RabbitMQ在Ubuntu上的集群管理怎么操作
导读:RabbitMQ在Ubuntu上的集群管理操作指南 一、集群搭建前准备 环境要求:所有节点需安装相同版本的Erlang(RabbitMQ依赖)和Ubuntu系统;节点间网络互通(防火墙开放**4369(Erlang端口映射)、25672(...
RabbitMQ在Ubuntu上的集群管理操作指南
一、集群搭建前准备
- 环境要求:所有节点需安装相同版本的Erlang(RabbitMQ依赖)和Ubuntu系统;节点间网络互通(防火墙开放**4369(Erlang端口映射)、25672(Erlang集群通信)、15672(管理界面)、5672(AMQP协议)**端口)。
- 主机名与hosts配置:为每个节点设置唯一主机名(如
rabbit1
、rabbit2
),并在所有节点的/etc/hosts
文件中添加集群节点IP与主机名的映射(如192.168.1.101 rabbit1
、192.168.1.102 rabbit2
),确保可通过主机名互相访问。 - 安装Erlang与RabbitMQ:在所有节点执行以下命令安装:
sudo apt update sudo apt install -y erlang sudo apt install -y rabbitmq-server
二、启动RabbitMQ服务与启用管理插件
- 启动服务:在每个节点启动RabbitMQ并设置开机自启:
sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server
- 启用管理插件:为方便远程管理,启用
rabbitmq_management
插件(默认监听15672端口):sudo rabbitmq-plugins enable rabbitmq_management
三、同步Erlang Cookie(集群通信关键)
RabbitMQ节点通过Erlang Cookie(默认路径/var/lib/rabbitmq/.erlang.cookie
)进行身份验证,所有节点的Cookie文件必须内容一致且权限正确(400
、属主为rabbitmq:rabbitmq
)。
- 操作步骤:选择一台节点(如
rabbit1
)作为Cookie源,复制其Cookie内容到其他节点:# 在rabbit1上查看Cookie sudo cat /var/lib/rabbitmq/.erlang.cookie # 将内容复制到rabbit2、rabbit3(需替换为实际IP或主机名) sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit2:/var/lib/rabbitmq/.erlang.cookie sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit3:/var/lib/rabbitmq/.erlang.cookie # 在其他节点设置Cookie权限 sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
四、将节点加入集群
- 初始化集群节点:在从节点(如
rabbit2
、rabbit3
)上停止RabbitMQ应用并重置(首次加入时需重置,会清除节点原有数据):sudo rabbitmqctl stop_app sudo rabbitmqctl reset sudo rabbitmqctl start_app
- 加入主节点集群:在从节点上执行
join_cluster
命令,指定主节点的Erlang节点名称(格式为主机名@节点IP或主机名
,如rabbit@rabbit1
):sudo rabbitmqctl stop_app sudo rabbitmqctl join_cluster rabbit@rabbit1 # 加入rabbit1的集群 sudo rabbitmqctl start_app
- 验证集群状态:在任意节点执行
cluster_status
命令,查看running_nodes
是否包含所有集群节点:
输出示例(成功加入后):sudo rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 [{ nodes,[{ disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]} ]} , { running_nodes,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]} ]
五、配置镜像队列(实现队列高可用)
默认情况下,RabbitMQ队列仅在单个节点存储,需通过镜像队列策略将队列复制到多个节点。以下命令将所有队列镜像到集群所有节点,并开启自动同步:
sudo rabbitmqctl set_policy ha-all "^.*" '{
"ha-mode":"all","ha-sync-mode":"automatic"}
' --priority 0 --apply-to queues
- 参数说明:
ha-mode: all
:队列复制到所有节点;ha-sync-mode: automatic
:新节点加入时自动同步队列数据;^.*
:匹配所有队列(可修改为特定前缀,如ha-order
仅镜像order
开头队列);--apply-to queues
:策略应用于队列。
六、集群节点管理操作
1. 扩容集群(添加新节点)
- 新节点安装Erlang、RabbitMQ,配置主机名、hosts文件、同步Cookie;
- 启动RabbitMQ服务,启用管理插件;
- 在新节点上执行
stop_app
→reset
→join_cluster
(指向集群中任意在线节点)→start_app
; - 通过
cluster_status
验证新节点是否加入。
2. 删除集群节点
- 在目标节点(如
rabbit4
)上停止应用:sudo rabbitmqctl stop_app
- 在集群中其他节点(如
rabbit1
)执行forget_cluster_node
命令,移除目标节点:sudo rabbitmqctl forget_cluster_node rabbit@rabbit4
- 在目标节点上执行
reset
(清除所有状态信息)→start_app
(重启服务):sudo rabbitmqctl reset sudo rabbitmqctl start_app
七、常见问题排查
- 节点无法加入集群:
- 检查Erlang Cookie是否一致(路径
/var/lib/rabbitmq/.erlang.cookie
); - 检查防火墙是否开放所需端口(4369、25672、15672、5672);
- 检查节点主机名是否正确解析(
ping rabbit2
测试)。
- 检查Erlang Cookie是否一致(路径
- 管理界面无法访问:
- 确认
rabbitmq_management
插件已启用(rabbitmq-plugins list
查看); - 检查云服务器安全组是否放行15672端口。
- 确认
- 队列数据不同步:
- 确认已配置镜像队列策略(
ha-mode: all
); - 检查队列是否设置为持久化(创建队列时添加
durable=true
参数)。
- 确认已配置镜像队列策略(
八、注意事项
- 节点类型:建议至少部署2个磁盘节点(
disc
,存储元数据),避免单点故障;内存节点(ram
,提升性能)可作为辅助节点; - 网络分区处理:在
/etc/rabbitmq/rabbitmq.conf
中添加cluster_partition_handling = pause_minority
,避免网络分区导致脑裂; - 数据持久化:队列和消息需设置为持久化(
durable=true
),防止节点重启数据丢失。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: RabbitMQ在Ubuntu上的集群管理怎么操作
本文地址: https://pptw.com/jishu/728789.html