使用rabbitmqctl 管理服务

发表时间:2017-12-05 12:56:37 浏览量( 15 ) 留言数( 0 )

学习目标:

1、了解使用rabbitmqclt进行管理

学习过程:

我们可以使用 前面介绍的web界面管理工具,也可以使用命令行管理。

-n node 默认node名称是"rabbit@server",如果你的主机是'server.example.com',那么node名是rabbit@server

 -q 安静输出模式,信息会被禁止输出

rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]

实例:rabbitmqctl  list_users

attcontent/e043e0d6-f86c-403a-8a36-8d8f24b46951.png

1、RabbitMQ用户角色及权限控制

1.RabbitMQ的用户角色分类:

none、management、policymaker、monitoring、administrator

2.RabbitMQ各类角色描述:

none

不能访问 management plugin


management

用户可以通过AMQP做的任何事外加:

列出自己可以通过AMQP登入的virtual hosts  

查看自己的virtual hosts中的queues, exchanges 和 bindings

查看和关闭自己的channels 和 connections

查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。


policymaker 

management可以做的任何事外加:

查看、创建和删除自己的virtual hosts所属的policies和parameters


monitoring  

management可以做的任何事外加:

列出所有virtual hosts,包括他们不能登录的virtual hosts

查看其他用户的connections和channels

查看节点级别的数据如clustering和memory使用情况

查看真正的关于所有virtual hosts的全局的统计信息


administrator   

policymaker和monitoring可以做的任何事外加:

创建和删除virtual hosts

查看、创建和删除users

查看创建和删除permissions

关闭其他用户的connections


3.创建用户并设置角色:

可以创建管理员用户,负责整个MQ的运维,例如:

$sudo rabbitmqctl add_user  user_admin  passwd_admin  

赋予其administrator角色:

$sudo rabbitmqctl set_user_tags user_admin administrator  


可以创建RabbitMQ监控用户,负责整个MQ的监控,例如:

$sudo rabbitmqctl add_user  user_monitoring  passwd_monitor  

赋予其monitoring角色:

$sudo rabbitmqctl set_user_tags user_monitoring monitoring  


可以创建某个项目的专用用户,只能访问项目自己的virtual hosts

$sudo rabbitmqctl  add_user  user_proj  passwd_proj  

赋予其monitoring角色:

$sudo rabbitmqctl set_user_tags user_proj management  


创建和赋角色完成后查看并确认:

$sudo rabbitmqctl list_users  


4.RabbitMQ权限控制

默认virtual host:"/"

默认用户:guest 

guest具有"/"上的全部权限,仅能有localhost访问RabbitMQ包括Plugin,建议删除或更改密码。可通过将配置文件中loopback_users置孔来取消其本地访问的限制:

[{rabbit, [{loopback_users, []}]}]


用户仅能对其所能访问的virtual hosts中的资源进行操作。这里的资源指的是virtual hosts中的exchanges、queues等,操作包括对资源进行配置、写、读。配置权限可创建、删除、资源并修改资源的行为,写权限可向资源发送消息,读权限从资源获取消息。比如:

exchange和queue的declare与delete分别需要exchange和queue上的配置权限

exchange的bind与unbind需要exchange的读写权限

queue的bind与unbind需要queue写权限exchange的读权限

发消息(publish)需exchange的写权限

获取或清除(get、consume、purge)消息需queue的读权限

对何种资源具有配置、写、读的权限通过正则表达式来匹配,具体命令如下:

set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

其中,<conf> <write> <read>的位置分别用正则表达式来匹配特定的资源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和默认的exchange,'^$'不匹配任何资源


需要注意的是RabbitMQ会缓存每个connection或channel的权限验证结果、因此权限发生变化后需要重连才能生效。


为用户赋权:

$sudo rabbitmqctl  set_permissions -p /vhost1  user_admin  '.*' '.*' '.*'  

该命令使用户user_admin具有/vhost1这个virtual host中所有资源的配置、写、读权限以便管理其中的资源

查看权限:

$sudo rabbitmqctl list_user_permissions user_admin  

Listing permissions for user "user_admin" ...  

/vhost1<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*  


$sudo rabbitmqctl list_permissions -p /vhost1  

Listing permissions in vhost "/vhost1" ...  

user_admin<span style="white-space:pre">  </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.* 




其他管理命令

基本管理功能

stop [<pid_file>] 

    #停止在erlang node上运行的rabbitmq,会使rabbitmq停止

stop_app   

    #停止erlang node上的rabbitmq的应用,但是erlang node还是会继续运行的

start_app   

    #启动erlan node上的rabbitmq的应用wait <pid_file> 

    #等待rabbitmq服务启动reset 

    #初始化node状态,会从集群中删除该节点,从管理数据库中删除所有数据,例如vhosts等等。在初始化之前rabbitmq的应用必须先停止

force_reset 

    #无条件的初始化node状态

rotate_logs <suffix>   

    #轮转日志文件

用户管理

add_user <username> <password> 

    #在rabbitmq的内部数据库添加用户

delete_user <username> 

    #删除一个用户

change_password <username> <newpassword> 

    #改变用户密码  \\改变web管理登陆密码

clear_password <username> 

    #清除用户密码,禁止用户登录

set_user_tags <username> <tag> ...

    #设置用户tags

list_users 

    #列出用户

add_vhost <vhostpath> 

    #创建一个vhosts

delete_vhost <vhostpath> 

    #删除一个vhosts

list_vhosts [<vhostinfoitem> ...

    #列出vhosts

set_permissions [-p <vhostpath>] <user> <conf> <write> <read> 

    #针对一个vhosts 给用户赋予相关权限

clear_permissions [-p <vhostpath>] <username> 

    #清除一个用户对vhosts的权限

list_permissions [-p <vhostpath>]   

    #列出哪些用户可以访问该vhosts

list_user_permissions <username> 

    #列出该用户的访问权限

set_parameter [-p <vhostpath>] <component_name> <name> <value>

    #

clear_parameter [-p <vhostpath>] <component_name> <key>

    #

list_parameters [-p <vhostpath>]

    #

queue&exchange状态信息

list_queues [-p <vhostpath>] [<queueinfoitem> ...

    #返回queue的信息,如果省略了-p参数,则默认显示的是"/"vhosts的信息。

list_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...

    #返回exchange的信息。

list_bindings [-p <vhostpath>] [<bindinginfoitem> ...

    #返回绑定信息。

list_connections [<connectioninfoitem> ...

    #返回链接信息。

list_channels [<channelinfoitem> ...

    #返回目前所有的channels。

list_consumers [-p <vhostpath>] 

    #返回consumers,

status 

    #显示broker的状态

environment 

    #显示环境参数的信息

report 

    #返回一个服务状态report,

eval <expr>

policy管理

policy管理,策略用来控制和修改queues和exchange在集群中的行为,策略可以应用到vhost

set_policy [-p <vhostpath>] [--priority <priority>] [--apply-to <apply-to>

<name> <pattern> <definition>   

    #name 策略名称,pattern  正则表达式,用来匹配资源,符合的就会应用设置的策略,apply-to 表示策略应用到什么类型的地方,一般有queues、exchange和all,默认是all。priority 是个整数优先级,definition 是json格式设置的策略。

clear_policy [-p <vhostpath><name> 

    #清除一个策略

list_policies [-p <vhostpath>

    #列出已有的策略

cluster管理

join_cluster <clusternode> [--ram] 

    #clusternode表示node名称,--ram表示node以ram node加入集群中。默认node以disc node加入集群,在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app。

cluster_status 

    #显示cluster中的所有node

change_cluster_node_type disc | ram 

    #改变一个cluster中node的模式,该节点在转换前必须先停止,不能把一个集群中唯一的disk node转化为ram node

forget_cluster_node [--offline] 

    #远程移除cluster中的一个node,前提是该node必须处于offline状态,如果是online状态,则需要加--offline参数。

update_cluster_nodes clusternode   

    #

sync_queue queue 

    #同步镜像队列

cancel_sync_queue queue   

    #