RabbitMQ 管理
多租户与权限
每一个RabbitMQ服务器都能创建虚拟的服务器,我们称之为虚拟主机(Virtual Host)vhost。每一个vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器及绑定关系等,并且它拥有自己独立的权限。
创建vhost
[email protected]:/opt/rabbitmq# rabbitmqctl add_vhost vhost1
Creating vhost "vhost1"
显示
[email protected]:/opt/rabbitmq# rabbitmqctl list_vhosts
Listing vhosts
vhost1
/
删除
[email protected]:/opt/rabbitmq# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1"
授予权限命令:
rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}
vhost:授予用户访问权限的vhost名称,可以设置为默认值,即为vhost"/"
user:可以访问指定的vhost的用户名
conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
read:一个用于匹配用户在哪些资源上拥有可读权限的正则表达式
授予root用户可访问虚拟主机vhost1,并在所有的资源上都具备可配置、可写及可读的权限,
[email protected]:/opt/rabbitmq# rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "/"
消除权限:
[email protected]:/opt/rabbitmq# rabbitmqctl clear_permissions -p vhost1 root
Clearing permissions for user "root" in vhost "vhost1"
列举权限:
[email protected]:/opt/rabbitmq# rabbitmqctl list_permissions -p /
Listing permissions in vhost "/"
root .* .* .*
guest .* .* .*
[email protected]:/opt/rabbitmq# rabbitmqctl list_user_permissions root
Listing permissions for user "root"
/ .* .* .*
rabbitmqcctl 工具的标准语法如下 ([]表示可选参数, {} 表示必选参数)
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options ...]
[-n node]
默认节点是"[email protected]",此处的hostname是主机名称。
[-q]
使用-q标志来启用quiet模式,这样可以屏蔽一些消息的输出。
[-t timeout]
操作超时时间秒为单位
[email protected]:/opt/rabbitmq# rabbitmqctl list_vhosts -q
/
用户管理
创建用户命令
rabbitmqctl add_user {username} {password}。
rabbitmqctl add_user root root123
rabbitmqctl change_password {username} {newpassword}命令来更改指定的用户的密码。
[email protected]:/opt/rabbitmq# rabbitmqctl change_password root root
Changing password for user "root"
删除用户的命令
rabbitmqctl delete_user {username},其中username表示要删除的用户名称
rabbitmqctl delete_user root
用户有角色分为5种类型
1)none:无任何角色。新创建的用户有角色默认为none。
2)management:可以访问Web管理页面。
3)policymaker:包含management的所有权限,并且可以管理策略Policy和参数
4)monitoring:包含management的所有权限,并且可以看到所有连接、僧道及节点相关的信息。
5)administrator:包含monitoring的所有权限,并且可以管理用户、虚拟主机权限、策略、参数等。
rabbitmqctl set_user_tags {username} {tag ...}命令来设置角色。
[email protected]:/opt/rabbitmq# rabbitmqctl set_user_tags root administrator
Setting tags for user "root" to [administrator]
Web端管理
启动插件命令:
rabbitmq-plugins enable rabbitmq_management
查看当前插件
[email protected]:/opt/rabbitmq# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on [email protected]
默认访问地址
关闭插件命令:
rabbitmq-pluginsdiaable rabbitmq_management
应用与集群管理
应用管理
rabbitmqctl stop [pid_file]
用于停止运行Rabbitmq的Erlang虚拟机和RabbitMQ服务应用。
rabbitmqctl stop
rabbitmqctl shutdown
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。
执行这个命令会阻塞直到Erlang虚拟机进程退出。它不需要指定pid_file而可以阻塞等待指定进程的关闭。
rabbitmqctl stop_app
停止RabbitMQ服务应用,但是Erlang虚拟机还是处于运行状态。此命令的执行优先于其他管理操作,比如rabbitmqctl reset。
rabbitmqctl start_app
启动RabbitMQ应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止 的RabbitMQ应用 。
rabbitmqctl wait [pid_file]
等待RabbitMQ应用的启动。它会等到pid_file的创建,然后等待pid_file中所代表的进程启动。
rabbitmqctl reset
将RabbitMQ节点重置还原到最初的状态。包括从原来所在的集群中删除些节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost等 。
rabbitmqctl force_reset
强制将RabbitMQ节点重置还原到最初状态。不同于rabbimqctl reset 命令,rabbitmqctl force_reset命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重置节点。
rabbitmqctl rotate_logs{suffix}
指示RabbitMQ节点轮换日志文件。RabbitMQ节点会将原来的日志文件的内容追加到原始名称+后缀的日志文件中,然后再将新的日志内容记录到新创建的日志中。当目标文件不存在时,会重新创建。如果不指定后缀suffix,则日志文件只是重新打开而不会进行轮换。
集群管理
将节点加入指定的集群中。
rabbitmqctl join_cluster {cluster_node} [--ram]
显示集群的状态
rabbitmqctl cluster_status
修改集群节点的类型
rabbitmqctl change_cluster_node_type {disc|ram}
将节点从集群中删除
rabbitmqctl forget_cluster_node [--offline]
在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。
rabbitmqctl update_cluster_nodes{clusternode}
确保节点可以启动,即使不是最后一个关闭的节点。
rabbitmqctl force_boot
rabbitmqctl sync_queue [-p vhost] {queue}
指示未同步队列queue的slave镜像可以同步master镜像行的内容。
同步期间此队列会被阻塞,直到同步完成。此条命令执行的成功的前提是队列queue配置了镜像。
rabbitmqctl cancel_sync_queue [-p vhost] {queue}
取消队列queue同步镜像的操作。
rabbitmqctl set_cluster_name {name}
设置集群名称。集群名称在客户端连接时会通报给客户端。
服务端状态
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
此命令返回队列的详细信息。
-name: 队列名称
-durable: 队列是否持久化
- auto_delete: 队列是否自动删除
- arguments 队列的参数。
-policy 应用到队列上的策略名称
- pid: 队列关联的 r1ang 进程的 ID
- owner pid: 处理排他队列连接的 Erlang 进程 如果此队列是非排他的,此值将为空。
- exclusive: 队列是否是排他的
- exclusive consumer_pid: 订阅到此排他队列的消费者相 的信道 联的 Erlang
进程 。如果此队列是非排他的,此值将为空
- exclusive_consumer_tag 订阅到此排他队列的消费者的 consumerTag 如果
此队列是非排他的,此值将为空。
- messages _ ready: 准备发送给客户端的消息个数
- messages_unacknowledged: 发送给客户端但尚未应答的消息个数
-messages: 准备发送给客户端和未应答消息的总和
- messages_ready_ram: 驻留在内存中 messages_ready 的消息个数
- messages unacknowledged ram: 驻留在内存中 messages unacknowledged
的消息个数
- messages_ram 驻留在内存中的消息总数
- messages_persistent 队列中持久化消息的个数 对于非持久化队列来说总是
-messages_bytes: 队列中所有消息的大小总和 这里不包括消息属性或者任何其他
开销。
- messages_bytes_ready: 准备发送给客户端的消息的大小总和。
- messages bytes unacknowledged: 发送给客户端但尚未应答的消息的大小总和。
-messages_bytes_ram: 驻留在内存中的 messages_bytes
-messages_bytes_persiste t: 队列中持久化的 messages_bytes
-disk_reads: 从队列启动开始,己从磁盘中读取该队列的消息总次数。
-disk_writes: 从队列启动开始,己向磁盘队列写消息的总次数。
-consumer: 消费者数目。
-cosumer_utilisation: 队列中的消息能够立刻投递给消费者的比率,介于0和1
之间 。这个受网络拥塞或者 Basic.Qos 的影响而小于`
-memory: 与队列相关的 Erlang 进程所消耗的内存字节数,包括械、堆及内部结构
-slave_pids: 如果队列是镜像的 ,列出所有 slave 镜像的 pid
-synchro ised slave pids: 如果队列是镜像的,列出所有己经同步的 slave 镜像
pid
-state 队列状 态。正常情况下是 running 如果队列正常同步数据可能会有
"{syncing, MsgCount}" 的状态;如果队列所在的节点掉线了,则队列显示状态为
down (此时大多数的 queueinfoitems 也将不可用〉。
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
返回交换器的详细细节。
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
返回绑定关系的细节。
rabbitmqctl list_connections [connectioninfoitem ...]
返回TCP/IP连接统计信息。
rabbitmqctl list_channels [channelinfoitem ...]
返回当前所有的信道信息。
rabbimqctl list_consumers [-p vhost]
列举消费者信息。
rabbitmqctl status
显示Broker状态,比如当前Erlang节点上运行的应用程序、RabbitMQ/Erlang的版本信息、OS的名称,内存及文件描述符等统计信息。
rabbitmqctl node_health_check
对RabbitMQ节点进行健康检查,确认应用是否正常运行、list_queues和list_channels是否能正常返回等。
rabbitmqctl environment
显示每个运行程序环境中每个变量的名称和值。
rabbitmqctl report
当所有服务器状态生成一个服务器状态报告,并将输出重写向到一个文件。
rabbitmqctl reportt >report.txt
rabbitmqctl eval{expr}
执行任意Erlang表达式。