RabbitMQ Linux集群搭建详细步骤
ntp或chrony服务,避免集群因时间差异引发问题);/etc/hosts文件,将所有节点的IP与主机名映射(如192.168.1.101 node1、192.168.1.102 node2、192.168.1.103 node3),避免DNS解析问题。RabbitMQ基于Erlang语言开发,需先安装兼容版本的Erlang(可通过rabbitmq-server官方文档查询对应版本)。
# 安装Erlang(以Erlang 25为例)
sudo yum install -y epel-release
sudo yum install -y erlang
# 安装RabbitMQ
sudo yum install -y rabbitmq-server
# 安装Erlang
sudo apt update
sudo apt install -y erlang
# 安装RabbitMQ
sudo apt install -y rabbitmq-server
安装完成后,启动RabbitMQ服务并设置开机自启:
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server
RabbitMQ节点间通过Erlang Cookie进行身份验证,所有节点的Cookie文件必须完全一致(包括内容与权限)。
/var/lib/rabbitmq/.erlang.cookie(若为root用户安装,路径可能为/root/.erlang.cookie)。node1)生成Cookie(若已有则跳过):sudo rm -f /var/lib/rabbitmq/.erlang.cookie # 清除旧Cookie(可选)
echo "your_secure_cookie_string" | sudo tee /var/lib/rabbitmq/.erlang.cookie # 替换为自定义字符串
sudo scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
sudo scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie # 仅所有者可读写
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie # 归属rabbitmq用户
sudo systemctl start rabbitmq-server
sudo systemctl status rabbitmq-server # 检查服务状态(需显示“active (running)”)
sudo rabbitmq-plugins enable rabbitmq_management
默认管理员账号为guest(仅限本地访问),建议创建新用户:sudo rabbitmqctl add_user admin your_password # 创建用户
sudo rabbitmqctl set_user_tags admin administrator # 设置管理员权限
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*" # 授权所有权限
node1(主节点)执行以下命令,确保节点处于running状态:sudo rabbitmqctl cluster_status
node2、node3上停止RabbitMQ应用(无需停止服务):sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
node1为主节点,主机名需与/etc/hosts一致):sudo rabbitmqctl join_cluster rabbit@node1 # 若为内存节点,添加--ram参数(如`--ram`)
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_status
输出应包含所有节点的disc(磁盘节点)或ram(内存节点)信息,例如:Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}]
默认情况下,RabbitMQ队列仅在单个节点存储,若需提高可用性,需配置镜像队列(将队列复制到多个节点)。
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
参数说明:
ha-mode="all":队列将在所有节点同步复制;ha-sync-mode="automatic":自动同步队列内容(可选manual手动同步)。rabbitmqctl list_queues name policy查看队列策略,确认ha-all已生效。确保防火墙允许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
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw reload
--ram参数指定内存节点,例如:sudo rabbitmqctl join_cluster --ram rabbit@node1。/etc/rabbitmq/rabbitmq.conf中添加:cluster_partition_handling = pause_minority # 暂停少数派节点(推荐)
或使用自动恢复插件(rabbitmq_autoheal)。durable=true(队列持久化),发送消息时设置delivery_mode=2(消息持久化),确保重启后数据不丢失。通过以上步骤,即可完成RabbitMQ Linux集群的搭建。集群搭建后,可通过管理界面(http://<节点IP>:15672)监控节点状态、队列信息及连接情况。