节点管理
- 启动节点
【centOS7.x】:
systemctl start rabbitmq-server
【centOS6.X】:
nohup ../rabbitmq_server-3.6.1/sbin/rabbitmq-server &
- 停止节点
【centOS7.x】:
systemctl stop rabbitmq-server
【centOS6.X】:
ps -ef|grep rabbitmq
kill PID
- 重启节点
systemctl restart rabbitmq-server
- 修改节点类型
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type dist --磁盘节点
或
rabbitmqctl change_cluster_node_type ram --内存节点
rabbitmqctl start_app
- 查看节点状态
rabbitmqctl status
- 清除节点原数据
rabbitmqctl reset
集群管理
- 加入集群
#机器B 加入rabbit@master节点
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@master
rabbitmqctl start_app
#机器C 加入rabbit@master节点
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@master
rabbitmqctl start_app
注:此处要加入至的 rabbit@master 节点,不需要执行 rabbitmqctl stop_app 命令。
- 停止rabbitmq应用
rabbitmqctl stop_app
- 启动rabbitmq应用
rabbitmqctl start_app
- 查看集群状态
rabbitmqctl cluster_status
- 从集群中移除节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
或者
rabbitmqctl forget_cluster_node rabbit@rabbit-1 #支持远程删除节点(在处理无响应节点时,这个很有用)
- 集群重启顺序
集群重启的顺序是固定的,并且是相反的。 如下所述:
启动顺序:磁盘节点 => 内存节点
关闭顺序:内存节点 => 磁盘节点
最后关闭必须是磁盘节点,不然可能回造成集群启动失败、数据丢失等异常情况。
没有一个直接的命令可以关闭整个集群,需要逐一进行关闭。但是需要保证在重启时,最后关闭的节点最先被启动。
如果第一个启动的不是最后关闭的节点,那么这个节点会等待最后关闭的那个节点启动,默认进行 10 次连接尝试,超时时间为 30 秒,如果依然没有等到,则该节点启动失败。
节点在停止和重新启动时经历的过程:
停止节点选择一个集群成员(将仅考虑磁盘节点)以在重新启动后与之同步。重新启动后,默认情况下,该节点将尝试与集群对方联系10次,每次响应超时为30秒。
如果对端在该时间间隔内可用,则该节点将成功启动,同步对端的信息并继续运行。如果对等方不可用,则重新启动的节点将放弃并自愿停止。
当节点在关闭过程中没有集群节点在线时,它将在不尝试与任何已知对端同步的情况下启动。它将等待对端重新加入它。
因此,当整个群集关闭时,最后一个关闭的节点是在关闭时唯一没有任何正在运行的对等节点的节点。该节点可以启动而无需先联系任何对等节点。
由于节点将尝试与已知对等方联系最多5分钟(默认情况下),因此可以在该时间段内以任何顺序重新启动节点。在这种情况下,他们将成功地彼此重新加入。
可以使用两种配置设置来调整此时间窗口:
# wait for 60 seconds instead of 30
mnesia_table_loading_retry_timeout = 60000
# retry 15 times instead of 10
mnesia_table_loading_retry_limit = 15
通过调整这些设置并调整必须返回已知对等方的时间窗口,可以解决可能需要超过5分钟才能完成的群集范围内的重新部署方案。 升级期间,有时最后一个要停止的节点必须是升级后要启动的第一个节点。该节点将被指定执行集群范围的架构迁移,其他节点可以在它们重新加入时从中进行同步并应用。
在某些情况下,无法恢复最后一个脱机节点。您可以使用forget_cluster_node
另外,可以在节点上使用force_boot rabbitmqctl命令使其引导,而无需尝试与任何对等节点同步(就像它们最后一次关闭一样)。
仅当最后一个要关闭的节点或一组节点永远不会重新联机时,才通常需要这样做。
用户管理
- 创建虚拟主机(vhost)
rabbitmqctl add_vhost zat
注:RabbitMQ 通过虚拟主机(vhost)来分发消息。拥有自己独立的权限控制,不同的vhost之间是隔离的,单独的。
- 创建用户并授权
rabbitmqctl add_user 用户名 密码
- 设置为管理员
rabbitmqctl set_user_tags 用户名 administrator
- 授权远程访问权限
rabbitmqctl set_permissions -p zat 用户名 ".*" ".*" ".*"
- 修改用户密码
rabbitmqctl change_password 用户名 密码
- 删除来宾用户
rabbitmqctl delete_user guest
- 查看用户
rabbitmqctl list_users
- 查看用户权限
rabbitmqctl list_user_permissions username
镜像队列
- 设置策略
rabbitmqctl set_policy -p zat ha-allqueue "^" '{"ha-mode":"all"}'
命令說明:针对指定vhost(zat)下的queue进行设置为镜像队列,即队列会被复制到集群各个节点,各个集群节点交换机、队列、队列内容都保持一致。
- 查看哪些slaves已经同步完成
rabbitmqctl list_queue {queue_name}
- 同步队列
rabbitmqctl sync_queue {queue_name}
注:前提是镜像队列,队列中的数据将会在整个集群的相应节点(取决于设置的策略)上复制存储。
- 取消队列的同步属性
rabbitmqctl cancel_sync_queue {queue_name}
插件管理
# rabbitmq-plugins [-n node] {command} [command options ...]
# 启动插件
# rabbitmq-plugins enable [--offline] [--online] {plugin ...}
rabbitmq-plugins enable rabbitmq_management
# 禁用插件
# rabbitmq-plugins disable [--offline] [--online] {plugin ...}
rabbitmq-plugins disable rabbitmq_management
# 表示启用参数指定的插件,并且禁用其他所有插件
# 没有参数表示禁用所有的插件
rabbitmq-plugin set rabbitmq_management
# 显示所有的插件,每一行一个
rabbitmq-plugins list
# 显示所有的插件,并且显示插件的版本号和描述信息
rabbitmq-plugins list -v
# 显示所有名称含有 "management" 的插件
rabbitmq-plugins list -v management
# 显示所有显示或者隐式启动的插件
rabbitmq-plugins list -e rabbit
对象管理
# name:罗列出所有虚拟机,tracing:表示是否使用了 RabbitMQ 的 trace 功能
rabbitmqctl list_vhosts [name,tracing]
# 查看交换器
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
# 查看绑定关系的细节
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
# 查看已声明的队列
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
# 返回 TCP!IP连接的统计信息。
rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]
# 返回当前所有信道的信息。
rabbitmqctl list_channels [channelinfoitem ...]
# 列举消费者信息 每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认 prefetch_count 及参数列表这些信息。
rabbitmqctl list_consumers [-p vhost]
策略管理
# 策略查看
rabbitmqctl list_policies [-p <vhost>]
# 策略设置
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
# 策略清除
rabbitmqctl clear_policy [-p <vhost>] <name>
参数
- 虚拟主机参数
虚拟主机参数绑定到虚拟主机,由组件名称、名称和值组成。
示例:Federation upstrea。它的目标是一个组件(federation-upstream),它的名称绑定到一个虚拟主机并且它的值定义了连接到上游代理的参数。
# 设置参数
rabbitmqctl set_parameter [-p vhost] <component_name> <name> <value>
# 清除参数
rabbitmqctl clear_parameter [-p vhost] <component_name> <name>
# 列出参数
rabbitmqctl list_parameters [-p vhost]
- 全局参数
全局参数没有绑定到特定虚拟主机,由名称和值组成。
示例:集群的名称。
# 设置参数
rabbitmqctl set_global_parameter <name> <value>
# 清除参数
rabbitmqctl clear_global_parameter <name>
# 列出参数
rabbitmqctl list_global_parameters
其它
- 数据目录
/var/lib/rabbitmq/mensia/rabbit@localhost
- 日誌目录
/var/log/rabbitmq/rabbit@redis-3.log
- 查看日志
journalctl -xe