概述
rabbitmq 节点类型改变
上篇日志中,我们已经介绍过 rabbitmq 节点的分类及集群模式
我们搭建了一个默认模式的集群,可以通过 rabbitmqctl cluster_status 命令看到,默认情况下,所有的节点都是 disc 节点,也就是说状态信息与队列消息同时存储在内存中和磁盘上,这样的好处是可以保证数据的可靠性,但是性能有所下降,因此,上文提到,通常的建议是一个集群中只配置一个磁盘 node,用来保证集群数据的安全性,其他节点配置成 ram 节点,用来提高集群的工作性能
要想改变节点类型,执行下列命令
- 使用 rabbitmqctl stop_app 停止 rabbitmq 应用
- 执行 rabbitmqctl change_cluster_node_type {disc | ram} 切换节点类型
- 执行 rabbitmqctl start_app 重新启动 rabbitmq 应用
- 可以通过 rabbitmqctl cluster_status 命令看到节点已经变成了 ram 节点
删除集群中的某个节点
想要执行删除集群中节点的命令,必须同时满足两个条件:
- 执行删除节点命令的节点是一个磁盘节点
- 除执行删除节点命令的节点,集群中的其他节点必须都已经停止
最好是首先将所有节点都改变为 disc 节点,然后再进行操作
满足上面两个条件,执行 rabbitmqctl forget_cluster_node {node_name} 即可让指定的节点退出集群
然而,此后集群中其他节点启动时会报错:
Node rabbit@se1 thinks it's clustered with node rabbit@se2, but rabbit@se2 disagrees
此时需要执行 rabbitmqctl reset 清除集群信息,然后执行 rabbitmqctl start_app 即可启动节点
灾后恢复
若整个集群被停掉了,应保证最后一个down掉的节点被最先启动,若不能则要使用forget_cluster_node命令将其移出集群
若集群中节点几乎同时以不可控的方式down了此时在其中一个节点使用force_boot命令重启节点
创建镜像队列
所谓的镜像队列,就是 rabbitmq 的 ha 模式,也就是同步队列,队列中的数据在所有的消息队列节点中复制存储,保证了数据的可靠性
有两种方法创建镜像队列:
让节点中的某个队列成为镜像队列
执行 rabbitmqctl sync_queue {queue-name} 可以让该节点的指定队列成为镜像队列,队列中的数据将会在整个集群的每个节点上复制存储
可以通过执行 rabbitmqctl cancel_sync_queue {queue-name} 取消某个队列的同步属性
通过 set_policy 命令建立镜像队列
set_policy 命令用来设置协议:
rabbitmqctl set_policy [-p vhostpath] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}
- name -- 协议名称
- pattern -- 匹配的正则表达式
- definition -- json term 的形式来定义这个协议
- priority -- 优先级,默认为 0,数字越大优先级越高
- apply-to -- 协议类型,有三种选择:queues、exchanges、all,默认为 all
可见,set_policy 提供了很大的灵活性,他同样支持将指定的队列设置为镜像队列:
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
可以通过 rabbitmqctl list_policies 命令查看当前的协议列表
可以通过 rabbitmqctl clear_policy [-p vhostpath] {name} 清除某条协议
服务器状态的查询
队列列表查询
rabbitmqctl list_queues [-p vhostpath] [queueinfoitem…]
queueinfoitem 是可选参数,也可以以下一个或多个的组合:
- name
- durable
- auto_delete
- arguments
- policy
- pid
- owner_pid
- exclusive_consumer_pid
- exclusive_consumer_tag
- messages_ready
- messages_unacknowledged
- messages
- consumers
- active_consumers
- memory
- slave_pids
- synchronized_slave_pids
- status
交换机列表查询
rabbitmqctl list_exchanges [-p vhostpath] [exchangeinfoitem…]
exchangeinfoitem 是可选参数,也可以以下一个或多个的组合:
- name
- type
- durable
- auto_delete
- internal
- arguments
- policy
绑定列表查询
rabbitmqctl list_bindings [-p vhostpath] [bindinginfoitem…]
bindinginfoitem 是可选参数,也可以以下一个或多个的组合:
- source_name
- source_kind
- destination_name
- destination_kind
- routing_key
- arguments
用户管理
用户的新增、删除、修改及查询
- 新增用户 -- rabbitmqctl add_user Username Password
- 删除用户 -- rabbitmqctl delete_user Username
- 修改密码 -- rabbitmqctl change_password Username Newpassword
- 查看用户列表 -- rabbitmqctl list_users
用户角色
系统提供了四个用户角色,使用 rabbitmqctl set_user_tags User Tag 可以为用户设置角色,Tag 参数就是用户的角色
你可以自定义 Tag,也可以为用户指定多个角色
系统提供的四个角色是:
- administrator -- 超级管理员,可以查看和修改所有信息
- monitoring -- 监控者,可以查看 rabbitmq 节点的相关信息 (进程数,内存使用情况,磁盘使用情况等)
- policymaker -- 策略制定者,可以对 policy 进行管理,但无法查看节点相关信息
- management -- 普通管理者,无法看到节点信息,也无法对策略进行管理,但可以登录管理控制台
用户自定义角色则不能登录到管理控制台
用户权限
用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限
配置权限会影响到exchange,queue的声明和删除
读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作
以下命令可以设置、查看、清除用户权限:
- 设置用户权限 -- rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
- 查看用户权限 -- rabbitmqctl list_permissions [-p VHostPath]
- 查看指定用户权限信息 -- rabbitmqctl list_user_permissions User
- 清除用户的权限信息 -- rabbitmqctl clear_permissions [-p VHostPath] User
参考资料
rabbitMQ入门详解 -- http://blog.csdn.net/cugb1004101218/article/details/21243927?utm_source=tuicool&utm_medium=referral
rabbitmq 用户管理 -- http://www.cnblogs.com/AloneSword/p/4200051.html