温馨提示×

Ubuntu RabbitMQ集群搭建步骤

小樊
44
2025-10-04 09:03:53
栏目: 智能运维

Ubuntu环境下RabbitMQ集群搭建步骤

1. 环境准备

  • 主机名与hosts配置:为每个节点设置唯一主机名(如rabbit1rabbit2rabbit3),并在所有节点的/etc/hosts文件中添加集群节点IP与主机名的映射(如192.168.1.101 rabbit1192.168.1.102 rabbit2192.168.1.103 rabbit3),确保节点间可通过主机名互相访问。
  • 时间同步:使用ntpchrony服务同步所有节点时间(如sudo apt install chrony && sudo systemctl enable --now chrony),避免因时间差异导致集群通信问题。
  • Erlang安装:RabbitMQ基于Erlang开发,需先安装与RabbitMQ版本兼容的Erlang(可通过sudo apt install erlang安装Ubuntu源中的版本,或通过RabbitMQ官方源安装指定版本)。

2. 安装RabbitMQ

在所有节点上执行以下命令安装RabbitMQ Server:

sudo apt update
sudo apt install -y rabbitmq-server

安装完成后,RabbitMQ会自动启动并设置为开机自启(可通过sudo systemctl status rabbitmq-server验证状态,显示active (running)即为正常)。

3. 启用管理插件

为方便远程管理,需启用RabbitMQ的管理插件(默认监听15672端口):

sudo rabbitmq-plugins enable rabbitmq_management

启用后,可通过http://<节点IP>:15672访问管理界面(默认用户名/密码为guest/guest,但guest用户默认仅允许本地访问,需后续创建新用户)。

4. 配置Erlang Cookie(集群通信密钥)

RabbitMQ节点间通过Erlang Cookie进行身份认证,所有节点的Cookie文件内容必须一致。Cookie文件默认路径为/var/lib/rabbitmq/.erlang.cookie

  • 步骤1:选择主节点(如rabbit1),将.erlang.cookie文件复制到其他节点(如rabbit2rabbit3):
    # 在主节点执行
    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/
    
  • 步骤2:设置Cookie文件权限(必须为400,确保仅rabbitmq用户可读写):
    # 在所有节点执行
    sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
    sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
    

此步骤是集群节点能够互相通信的关键,若Cookie不一致,节点将无法加入集群。

5. 将节点加入集群

rabbit1为主节点,将rabbit2rabbit3加入集群:

  • 步骤1:在从节点(如rabbit2)上停止RabbitMQ应用:
    sudo rabbitmqctl stop_app
    
  • 步骤2:将节点重置为初始状态(首次加入集群时执行,后续扩容无需重置):
    sudo rabbitmqctl reset
    
  • 步骤3:加入主节点集群(rabbit@主节点主机名,如rabbit@rabbit1):
    sudo rabbitmqctl join_cluster rabbit@rabbit1
    
  • 步骤4:启动从节点应用:
    sudo rabbitmqctl start_app
    
  • 步骤5:重复上述步骤(步骤1-4),将rabbit3加入集群。

6. 验证集群状态

在任意节点上执行以下命令,查看集群节点列表及状态:

sudo rabbitmqctl cluster_status

若输出中包含所有节点(如rabbit@rabbit1rabbit@rabbit2rabbit@rabbit3),且状态为running,则说明集群搭建成功。

7. 配置镜像队列(可选,高可用)

镜像队列可将队列副本分布到多个节点,确保节点故障时消息不丢失。以下命令将所有队列镜像到集群的所有节点(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不为空,说明队列已成功镜像。

8. 创建管理员用户(可选,替代默认用户)

默认的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)。

注意事项

  • 节点类型:集群中建议至少配置2个磁盘节点--disk,默认类型),用于存储元数据(如队列、交换器信息);内存节点(--ram)仅缓存数据,性能更高但重启后数据丢失(如需添加内存节点,可在join_cluster命令中添加--ram参数)。
  • 网络分区处理:为避免网络分区导致脑裂,建议在/etc/rabbitmq/rabbitmq.conf中添加cluster_partition_handling = pause_minority(暂停少数派分区),确保集群稳定性。
  • 数据持久化:队列和消息需设置为持久化(durable: true),避免节点重启后消息丢失(如创建队列时添加durable: true参数)。

0