sudo apt update
sudo apt install -y erlang rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
node1、node2),并在/etc/hosts中添加IP与主机名映射,确保节点间能通过主机名通信:sudo hostnamectl set-hostname node1 # 在node1上执行
echo "192.168.1.101 node1" | sudo tee -a /etc/hosts # 所有节点添加
/var/lib/rabbitmq/.erlang.cookie文件内容必须一致(权限设为400,属主为rabbitmq):# 在node1上复制cookie到其他节点(如node2、node3)
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq@node3:/var/lib/rabbitmq/
# 所有节点修改cookie权限
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
node1上启动RabbitMQ并启用管理插件:sudo systemctl start rabbitmq-server
sudo rabbitmq-plugins enable rabbitmq_management
node2、node3上停止应用、重置节点(首次加入时需重置)、加入node1的集群:sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl join_cluster rabbit@node1 # 加入node1的集群
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_status
# 输出应显示所有节点(如node1、node2、node3)已加入集群
镜像队列将队列消息复制到多个节点,确保节点故障时消息不丢失。通过策略设置全局镜像(所有节点):
# 在任意节点执行(如node1)
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
ha-mode:"all":队列复制到所有节点;ha-sync-mode:"automatic":自动同步消息(避免手动同步延迟)。使用HAProxy作为负载均衡器,将客户端连接分发到集群节点,提高可用性与性能:
sudo apt install -y haproxy
/etc/haproxy/haproxy.cfg,添加以下内容:frontend rabbitmq
bind *:5672 # 客户端连接的AMQP端口
default_backend rabbitmq_nodes
backend rabbitmq_nodes
balance roundrobin # 轮询分发
server rabbit1 node1:5672 check inter 5000 rise 2 fall 3 # 检测节点可用性
server rabbit2 node2:5672 check inter 5000 rise 2 fall 3
server rabbit3 node3:5672 check inter 5000 rise 2 fall 3
sudo systemctl start haproxy
sudo systemctl enable haproxy
durable=true(队列持久化),发送消息时设置delivery_mode=2(消息持久化):# Python示例(pika库)
channel.queue_declare(queue='my_queue', durable=True)
channel.basic_publish(exchange='',
routing_key='my_queue',
body='Hello RabbitMQ!',
properties=pika.BasicProperties(delivery_mode=2))
--disc(默认即为磁盘节点):sudo rabbitmqctl join_cluster --disc rabbit@node1
http://<节点IP>:15672访问管理界面(默认账号guest/guest,生产环境需创建新用户):sudo rabbitmq-plugins enable rabbitmq_management
4369(Erlang端口)、5672(AMQP)、25672(集群通信)端口。ha-mode:all),并检查节点间网络是否正常。pause_minority_mode(暂停少数派节点),避免脑裂:echo 'cluster_partition_handling = pause_minority' | sudo tee -a /etc/rabbitmq/rabbitmq.conf
sudo systemctl restart rabbitmq-server