Ubuntu环境下RabbitMQ集群搭建步骤
rabbit1
、rabbit2
、rabbit3
),并在所有节点的/etc/hosts
文件中添加集群节点IP与主机名的映射(如192.168.1.101 rabbit1
、192.168.1.102 rabbit2
、192.168.1.103 rabbit3
),确保节点间可通过主机名互相访问。ntp
或chrony
服务同步所有节点时间(如sudo apt install chrony && sudo systemctl enable --now chrony
),避免因时间差异导致集群通信问题。sudo apt install erlang
安装Ubuntu源中的版本,或通过RabbitMQ官方源安装指定版本)。在所有节点上执行以下命令安装RabbitMQ Server:
sudo apt update
sudo apt install -y rabbitmq-server
安装完成后,RabbitMQ会自动启动并设置为开机自启(可通过sudo systemctl status rabbitmq-server
验证状态,显示active (running)
即为正常)。
为方便远程管理,需启用RabbitMQ的管理插件(默认监听15672端口):
sudo rabbitmq-plugins enable rabbitmq_management
启用后,可通过http://<节点IP>:15672
访问管理界面(默认用户名/密码为guest/guest
,但guest
用户默认仅允许本地访问,需后续创建新用户)。
RabbitMQ节点间通过Erlang Cookie进行身份认证,所有节点的Cookie文件内容必须一致。Cookie文件默认路径为/var/lib/rabbitmq/.erlang.cookie
:
rabbit1
),将.erlang.cookie
文件复制到其他节点(如rabbit2
、rabbit3
):# 在主节点执行
scp /var/lib/rabbitmq/.erlang.cookie rabbit2@192.168.1.102:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie rabbit3@192.168.1.103:/var/lib/rabbitmq/
400
,确保仅rabbitmq
用户可读写):# 在所有节点执行
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
此步骤是集群节点能够互相通信的关键,若Cookie不一致,节点将无法加入集群。
以rabbit1
为主节点,将rabbit2
、rabbit3
加入集群:
rabbit2
)上停止RabbitMQ应用:sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
rabbit@主节点主机名
,如rabbit@rabbit1
):sudo rabbitmqctl join_cluster rabbit@rabbit1
sudo rabbitmqctl start_app
rabbit3
加入集群。在任意节点上执行以下命令,查看集群节点列表及状态:
sudo rabbitmqctl cluster_status
若输出中包含所有节点(如rabbit@rabbit1
、rabbit@rabbit2
、rabbit@rabbit3
),且状态为running
,则说明集群搭建成功。
镜像队列可将队列副本分布到多个节点,确保节点故障时消息不丢失。以下命令将所有队列镜像到集群的所有节点(ha-mode: all
):
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
"^"
表示匹配所有队列名称;ha-mode: all
表示所有节点都存储队列副本。sudo rabbitmqctl list_queues name synchronised_slave_pids
若synchronised_slave_pids
不为空,说明队列已成功镜像。默认的guest
用户仅允许本地访问,需创建新用户并赋予管理员权限:
# 创建用户(如用户名:admin,密码:admin123)
sudo rabbitmqctl add_user admin admin123
# 设置用户为管理员角色
sudo rabbitmqctl set_user_tags admin administrator
# 赋予用户默认虚拟主机(/)的所有权限
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
创建后,可通过http://<节点IP>:15672
登录管理界面(使用admin/admin123
)。
--disk
,默认类型),用于存储元数据(如队列、交换器信息);内存节点(--ram
)仅缓存数据,性能更高但重启后数据丢失(如需添加内存节点,可在join_cluster
命令中添加--ram
参数)。/etc/rabbitmq/rabbitmq.conf
中添加cluster_partition_handling = pause_minority
(暂停少数派分区),确保集群稳定性。durable: true
),避免节点重启后消息丢失(如创建队列时添加durable: true
参数)。