Ubuntu环境下RabbitMQ集群搭建步骤
rabbit1、rabbit2、rabbit3),并通过/etc/hosts文件实现主机名解析(所有节点需保持一致)。例如:192.168.1.101 rabbit1
192.168.1.102 rabbit2
192.168.1.103 rabbit3
验证解析有效性:ping rabbit2(应能正常访问)。ntp或chrony同步所有节点时间(避免脑裂问题)。例如安装ntp:sudo apt update && sudo apt install -y ntp
sudo systemctl enable --now ntp
sudo apt update
sudo apt install -y erlang
# 添加RabbitMQ官方源密钥
curl -s https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
# 添加源列表
echo "deb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
sudo apt update
# 安装RabbitMQ(含管理插件)
sudo apt install -y rabbitmq-server
Erlang Cookie是节点间认证的凭证,所有节点的Cookie文件内容必须完全一致(默认路径:/var/lib/rabbitmq/.erlang.cookie)。
rabbit1)上复制Cookie文件到其他节点:scp /var/lib/rabbitmq/.erlang.cookie rabbit2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie rabbit3:/var/lib/rabbitmq/
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo systemctl restart rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
active (running)):sudo systemctl status rabbitmq-server
sudo rabbitmq-plugins enable rabbitmq_management
管理界面默认访问地址:http://{节点IP}:15672(初始账号guest/guest,仅限本地访问)。rabbit2、rabbit3加入rabbit1集群为例):
rabbit2上执行:sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
rabbit2加入rabbit1集群(rabbit1为主节点):sudo rabbitmqctl join_cluster rabbit@rabbit1
注:rabbit@rabbit1中的rabbit1是主节点的主机名(需与/etc/hosts中的配置一致)。sudo rabbitmqctl start_app
rabbit3加入集群(命令同rabbit2)。在任意节点(如rabbit1)上执行以下命令,查看集群节点列表及状态:
sudo rabbitmqctl cluster_status
正常输出应包含所有节点(如rabbit@rabbit1、rabbit@rabbit2、rabbit@rabbit3),且状态为running。
镜像队列将队列数据复制到多个节点,避免单点故障。推荐使用仲裁队列(Quorum Queues)(RabbitMQ 3.8+版本,替代传统镜像队列,基于Raft协议保证强一致性)。
ha-mode: "exactly"表示副本数,ha-params: 3表示3个副本):sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' --priority 0 --apply-to queues
参数说明:
^:匹配所有队列名称;ha-mode: "exactly":精确指定副本数;ha-params: 3:3个副本(需与集群节点数一致);ha-sync-mode: "automatic":自动同步队列数据(避免手动同步)。test_queue),并设置为持久化(durable: true)。Hello, RabbitMQ Cluster)。rabbit1的RabbitMQ服务(sudo systemctl stop rabbitmq-server)。rabbit2或rabbit3的管理界面查看test_queue,应仍能访问消息(说明队列已镜像到其他节点)。join_cluster命令中指定--ram参数:sudo rabbitmqctl join_cluster --ram rabbit@rabbit1
/etc/rabbitmq/rabbitmq.conf中添加:cluster_partition_handling = pause_minority
该策略会在网络分区时暂停少数派节点(如3节点集群中1节点分区,暂停该节点),待网络恢复后自动同步数据。durable: true(队列持久化),发布消息时设置delivery_mode: 2(消息持久化),确保节点重启后数据不丢失。