ntp服务并同步时间(避免集群因时间差异出现问题):sudo yum install -y ntp
sudo systemctl start ntpd
sudo systemctl enable ntpd
RabbitMQ基于Erlang语言编写,需先安装兼容版本的Erlang。
sudo rpm -Uvh https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
sudo yum install -y erlang
erl -version # 应显示Erlang版本信息
sudo rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sudo rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
sudo yum install -y rabbitmq-server
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
RabbitMQ节点通过Erlang Cookie(位于/var/lib/rabbitmq/.erlang.cookie)实现身份认证,所有节点的Cookie内容必须完全一致。
node1为例):cat /var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie user@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie user@node3:/var/lib/rabbitmq/
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
确保所有节点能通过主机名互相访问(需修改/etc/hosts文件)。
/etc/hosts(所有节点执行):sudo vi /etc/hosts
添加以下内容(替换为实际IP和主机名):192.168.1.101 rabbitmq01
192.168.1.102 rabbitmq02
192.168.1.103 rabbitmq03
ping rabbitmq02 # 应能ping通
rabbitmq01),启动RabbitMQ服务并重置(首次配置需重置):sudo systemctl stop rabbitmq-server
sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl start_app
rabbitmq02、rabbitmq03):sudo systemctl stop rabbitmq-server
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@rabbitmq01 # 加入主节点集群
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_status
输出应显示所有节点(rabbitmq01、rabbitmq02、rabbitmq03)均已加入集群。启用Web管理界面(默认端口15672),方便可视化操作。
sudo rabbitmq-plugins enable rabbitmq_management
admin和Admin@123为实际用户名密码):sudo rabbitmqctl add_user admin Admin@123
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
http://<节点IP>:15672,使用admin/Admin@123登录。镜像队列将队列数据复制到多个节点,提升高可用性。
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}'
ha-mode=all:队列在所有节点上复制。ha-sync-mode=automatic:自动同步队列数据。开放RabbitMQ默认端口(5672:AMQP协议;15672:管理界面)。
sudo firewall-cmd --permanent --zone=public --add-port=5672/tcp
sudo firewall-cmd --permanent --zone=public --add-port=15672/tcp
sudo firewall-cmd --reload
sudo rabbitmqctl cluster_status查看节点状态,若节点处于down状态,尝试重启服务或重置节点(sudo rabbitmqctl reset)。通过以上步骤,即可在CentOS系统上搭建高可用的RabbitMQ集群。