RabbitMQ集群在CentOS上的搭建指南
node1、node2),确保网络互通(可通过ping命令验证)。setenforce 0)、防火墙(systemctl stop firewalld)或放行后续所需端口(避免干扰测试)。RabbitMQ基于Erlang编写,需先安装兼容版本的Erlang。
sudo tee /etc/yum.repos.d/erlang.repo <<EOF
[erlang-solutions]
name=Erlang Solutions repository for CentOS-\$releasever - \$basearch
baseurl=https://packages.erlang-solutions.com/erlang/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.erlang-solutions.com/erlang/solutions.asc
EOF
sudo yum install -y erlang
# 验证安装
erl -version # 应输出Erlang版本信息
sudo tee /etc/yum.repos.d/rabbitmq.repo <<EOF
[rabbitmq-server]
name=RabbitMQ repository for CentOS-\$releasever - \$basearch
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/\$releasever/\$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
EOF
sudo yum install -y rabbitmq-server
# 启动服务并设置开机自启
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
Erlang Cookie是节点间身份认证的凭证,所有集群节点的Cookie文件必须完全一致(包括权限)。
node1)的Cookie:sudo cat /var/lib/rabbitmq/.erlang.cookie # 复制文件内容
sudo scp /var/lib/rabbitmq/.erlang.cookie user@node2:/var/lib/rabbitmq/
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie # 仅所有者可读写
为方便节点间通过主机名访问,需修改/etc/hosts文件(所有节点执行)。
/etc/hosts:sudo vi /etc/hosts
192.168.1.10 node1
192.168.1.11 node2
node1):确保RabbitMQ服务正常运行(默认已启动)。node2):# 停止RabbitMQ服务
sudo systemctl stop rabbitmq-server
# 清除旧数据(首次加入集群需执行,后续无需)
sudo rm -rf /var/lib/rabbitmq/mnesia/*
# 启动服务
sudo systemctl start rabbitmq-server
# 加入集群(将node2加入node1的集群)
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@node1 # node1为主节点主机名
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_status
输出应显示所有节点(如node1、node2)均已加入集群,无分区(partitions: [])。sudo rabbitmq-plugins enable rabbitmq_management
http://<节点IP>:15672,默认用户名/密码为guest(仅限本地访问,生产环境需创建新用户)。镜像队列将队列数据复制到多个节点,提升容灾能力。
sudo rabbitmq-plugins enable rabbitmq_mirroring_queue
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
注:
ha-mode可选值:all(所有节点)、exactly(指定数量节点)、nodes(指定节点列表)。
若防火墙开启,需放行RabbitMQ默认端口:
sudo firewall-cmd --permanent --zone=public --add-port=5672/tcp # AMQP协议端口
sudo firewall-cmd --permanent --zone=public --add-port=15672/tcp # 管理界面端口
sudo firewall-cmd --reload
http://<节点IP>:15672,查看“Queues”或“Nodes”页面,确认队列分布在多个节点。node1创建队列,然后在node2查看是否同步。按照以上步骤操作,即可在CentOS上搭建高可用的RabbitMQ集群。生产环境中,建议增加节点数量(如3节点)、配置监控告警(如Prometheus+Granafa),并定期备份数据。