RabbitMQ服务之运行管理篇

RabbitMQ服务之运行管理篇

 

相关声明:

2、本系列文章均来自于实际项目、官网、网络资源整理而来,并自己进行修改、优化及调试,内容仅供参考;

 

在实际使用中,我们必须要对RabbitMQ服务器进行管理,也要对其上创建的用户进行基本的权限配置和管理,以及也经常会对Rabbit服务的使用进行统计分析,接下来我们会逐一介绍它们。另外,我们知道,RabbitMQ服务是由Erlang语言所编写,一个RabbitMQ服务器实例是由Erlang节点和运行在其上的Rabbit程序所构成,一个Erlang节点上可以同时运行多个RabbitMQ程序,它们彼此之间可以通信,不论它们是否在同一个服务器上,这也是Erlang程序的特点所在,为集群或是分布式的环境提供了好的开端,所以我们需要对RabbitMQ实例进行管理,来处理不同环境时的需求,比如:分布式环境下,我们只能停止应用程序,不能停止节点(不清楚的同学,请继续往下俯瞰)。

 

l   服务器的管理

l   用户权限配置

l   服务使用统计

 

 

一、服务器的管理

1、启动节点

RabbitMQ服务启动Erlang节点和Rabbit应用程序很简单,我们只需要在RabbitMQ的安装路径下找到./sbin目录,运行./rabbitmq-server即可,如下:

 

如果启动失败了,请直接查看日志文件,一般日志文件存放在安装目录的/var/log/rabbitmq下,日志文件名字为rabbit@[hostname].log,其中rabbit为默认的Erlang节点名字,而hostname即为当前的主机名字了。

如果想以后台进程方式运行,那么可以运行./rabbitmq-server  -detached,此时RabbitMQ服务实例以后台线程方式运行了。

 

 

2、关闭节点

RabbitMQ服务实例已经启动,那么如何合理的关闭它?答案是,我们可以使用rabbitmqctl来一站式管理RabbitMQ服务了。如果我们要停止正在运行的RabbitMQ,可以使用./sbin/rabbitmqctl  stop来停止,如下:

 

需要注意的是,此时不仅关闭了Rabbit应用程序,同时也关闭了Erlang节点。那么,有时候我们只想关闭Rabbit应用程序,而保留Erlang节点继续为其它程序服务(特别是在集群或分布式好环境中,一个Erlang节点上可能同时运行着其它的Erlang程序,所以这样的关闭节点是不可取的),那么,我们该如何操作?其实比较简单,我们只需要使用./sbin/rabbitmqctl  stop_app即可只关闭运行着的Rabbit程序,如下:



 

注意,关闭应用程序的控制台日志,与关闭整个节点的日志是相同的。另外,对应的也有只启动应用程序,我不说,你该想到的操作./sbin/rabbitmqctl  start_app ,操作结果如下:


 

二、用户权限配置

1、用户管理

在RabbitMQ中,用户是访问控制的基本单元。针对一到多个vhost,其可以被赋予不同级别的访问权限,并使用标准的用户名和密码形式来认证反问用户的到来。另外,对用户的增加、删除及查询用户的列表等操作都比较简单,我们只需要使用rabbitmqctl工具即可做到。

为当前程序新建用户admin密码为admin,这样操作./sbin/rabbitmqctl  add_user admin  admin:

 

查看当前所有存在的用户列表,这样操作./sbin/rabbitmqctl  list_users:

 

NOTE:

仔细的同学可以看到,admin用户已经添加,目前只存在guest和admin两个用户,而admin用户的角色为[],这就是下面权限分配时要介绍的。

 

删除当前程序新建的用户admin,这样操作./sbin/rabbitmqctl delete_user  admin:

 

删除已经完成,我们可以使用list_users查看验证下:

 

NOTE:

当删除用户时,任何引用该用户访问权限条目都会从Rabbit权限数据库中自动删除,有点类似关联删除。同时,Rabbit并不会提醒你与用户相关的控制条目都被删除了,所有删除用户时需要谨慎。

 

修改指定用户的账号密码,其实操作很简单,这样操作./sbin/rabbitmqctl  change_password  admin adminpwd,具体如下:

 

2、权限配置

在较早版本,比如:1.6.0前,用户只能对整个vhost进行授权或拒绝访问,对于已经授权的用户可以做任何事情;而在这之后,RabbitMQ的权限系统做了较大改进,形成ACL风格的权限系统,它允许了大量细粒度的控制,同时赋予用户读、写及配置权限。需要注意的是,访问控制权限无法跨越vhost进行,比如:想要给用户admin在vhost A和vhost B中赋予相同的权限,那么就必须创建两个访问控制条目(每个vhost一份)。

 

那么该如何给用户赋予权限?下面就以给用户admin赋予访问控制的读、写及配置权限为例,我们需要使用./sbin/rabbitmqctl操作,操作指令如下:

$sudo  ./sbin/rabbitmqctl  set_permissions  -p  / admin  “.*”  “.*” “.*”,操作结果如下:


当然,我们可以查看指定vhost上的用户权限列表,可以这样操作./sbin/rabbitmqctl list_permissions –p  /,操作结果如下:

 

NOTE:

-p  /:代表set_permissions控制条目应该应用到哪个vhost上;

admin:代表被授权的用户名字;

“.*” “.*”  “.*”:分别代表配置、读和写权限,而其中的”.*”为正则表达式,代表匹配所有权限;

 

我们也可以删除用户的权限,那么需要使用./sbin/rabbitmqctl  clear_permissions–p admin,操作结果如下:

 

然后,我们使用list_permissions查看下是否删除完成,如下:

 

我们发现,admin用户的权限已经被删除了,如果要查看用户所有的在RabbitMQ服务器上vhost上的权限,请使用list_user_permissions命令,

具体如下所示(admin为用户名字):

./rabbitmqctllist_user_permissions admin

 

3、用户角色

为用户添加权限,已经基本可以满足我们的需求了,但有时,我们可以使用系统预置的角色,为用户赋予角色,那么该用户也就拥有了该角色所赋予的所有权限了,在RabbitMQ中,橘色大致分为超级管理员,监控者,策略制定者, 普通管理者以及其他,它们的区别是什么?

 

(1) 超级管理员(administrator)

可登陆管理控制台(启用managementplugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

 

(2) 监控者(monitoring)

可登陆管理控制台(启用managementplugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

 

(3) 策略制定者(policymaker)

可登陆管理控制台(启用managementplugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)

 

(4) 普通管理者(management)

仅可登陆管理控制台(启用managementplugin的情况下),无法看到节点信息,也无法对策略进行管理。

 

(5) 其他

无法登陆管理控制台,通常就是普通的生产者和消费者。

 

知道了RabbitMQ中的几个角色之后,我们就来为用户admin添加下超级管理员角色,这也是实际使用时常做的事儿,我们可以这样操作./sbin/rabbitmqctl set_user_tags administrator,操作结果如下:

 

操作前,用户admin未被指定任何角色:

 

操作后,用户admin已被指定了角色:

 

 

三、服务使用统计

在上面,我们使用了-p选项,旨在指定虚拟主机或路径信息,如果不添加该选项,那么rabbitmqctl会将”/”作为默认的路径访问。

如果我们需要查看数据的统计情况,那么就需要一些样板数据,所以我们需要创建个队列,并将队列与交换机或转发器进行绑定,使产生些数据供查看统计(该过程省略,因为前面几篇文章均有介绍)。

 

A、查看队列

查看默认虚拟机上所有的队列列表(list_queues):

 

当然,我们也可以查看指定虚拟机上所有的队列列表(list_queues –p vhost1)。

 

查看默认虚拟机上队列的名字、消息数目、消费者数目及内存使用情况:


当然,我们也可以查看队列声明时的属性特征,具体如下:

 

如上图,我们就可以知道相关队列是否为持久化队列等属性信息。

 

B、查看交换机

接下来,获取默认的交换机的信息列表(list_exchanges),具体如下:

 

上图中,我们看到已经存在多个类型的交换机,比如:fanout、direct及topic等,这些交换机都为前面文章demo时创建的交换机信息。

然后,我们查看下交换机的属性信息,如下:

 

上图中,我们查看了交换机的名字、类型、是否持久化及属否会被系统自动删除等信息。

 

C、查看绑定到交换机的队列

 

上图中,我们可以查看到交换机的名字、绑定到其上的队列名字、路由键及相关参数等信息。

 

NOTE:

该命令不接收除-p外的参数操作。

 

如果我们想了解更多的rabbitmqctl命令,可以不携带参数运行rabbitmqctl,此时会看到帮助文档。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关内容推荐