Ubuntu 上搭建 RabbitMQ 集群
一 环境准备与前置检查
二 安装与基础配置
sudo apt update
sudo apt-get install -y erlang rabbitmq-server
sudo systemctl enable --now rabbitmq-server
sudo rabbitmq-plugins enable rabbitmq_management
# 在 node1 上查看
sudo cat /var/lib/rabbitmq/.erlang.cookie
# 在 node2/3 上
sudo systemctl stop rabbitmq-server
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
# 用 scp 从 node1 覆盖 node2/3 的 .erlang.cookie
sudo scp node1:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie
sudo systemctl start rabbitmq-server
sudo hostnamectl set-hostname node1 # node2/node3 分别设置为 node2/node3
echo "192.168.1.101 node1" | sudo tee -a /etc/hosts
echo "192.168.1.102 node2" | sudo tee -a /etc/hosts
echo "192.168.1.103 node3" | sudo tee -a /etc/hosts
sudo rabbitmqctl status
sudo rabbitmq-plugins list
三 组建集群
# 停止应用(不停止 Erlang VM)
sudo rabbitmqctl stop_app
# 首次加入集群时重置(清空本地 Mnesia 数据)
sudo rabbitmqctl reset
# 加入集群(使用种子节点的节点名,如 rabbit@node1)
sudo rabbitmqctl join_cluster rabbit@node1
# 启动应用
sudo rabbitmqctl start_app
sudo rabbitmqctl join_cluster --ram rabbit@node1
sudo rabbitmqctl cluster_status
# 期望输出包含类似:
# [{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}]
四 高可用与运维要点
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
cluster_partition_handling = pause_minority
sudo systemctl restart rabbitmq-server。sudo rabbitmqctl forget_cluster_node rabbit@nodeX
五 常见问题排查
sudo rabbitmqctl sync_queue <队列名>。