温馨提示×

Ubuntu RabbitMQ集群搭建方法

小樊
49
2025-10-06 09:40:11
栏目: 智能运维

Ubuntu环境下RabbitMQ集群搭建步骤

1. 环境准备

  • 基础要求:所有节点需安装相同版本的Ubuntu(如22.04 LTS)、相同版本的Erlang(与RabbitMQ兼容,如25.x)及RabbitMQ(建议3.12及以上)。
  • 主机名与网络:为每个节点设置唯一主机名(如rabbit1rabbit2rabbit3),并通过/etc/hosts文件实现主机名解析(所有节点需保持一致)。例如:
    192.168.1.101 rabbit1
    192.168.1.102 rabbit2
    192.168.1.103 rabbit3
    
    验证解析有效性:ping rabbit2(应能正常访问)。
  • 时间同步:使用ntpchrony同步所有节点时间(避免脑裂问题)。例如安装ntp
    sudo apt update && sudo apt install -y ntp
    sudo systemctl enable --now ntp
    

2. 安装Erlang与RabbitMQ

  • 安装Erlang:RabbitMQ依赖Erlang环境,通过Ubuntu官方源安装:
    sudo apt update
    sudo apt install -y erlang
    
  • 安装RabbitMQ:添加RabbitMQ官方APT源(确保获取最新版本),然后安装:
    # 添加RabbitMQ官方源密钥
    curl -s https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
    # 添加源列表
    echo "deb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
    sudo apt update
    # 安装RabbitMQ(含管理插件)
    sudo apt install -y rabbitmq-server
    

3. 配置Erlang Cookie(集群通信关键)

Erlang Cookie是节点间认证的凭证,所有节点的Cookie文件内容必须完全一致(默认路径:/var/lib/rabbitmq/.erlang.cookie)。

  • 步骤
    1. 在主节点(如rabbit1)上复制Cookie文件到其他节点:
      scp /var/lib/rabbitmq/.erlang.cookie rabbit2:/var/lib/rabbitmq/
      scp /var/lib/rabbitmq/.erlang.cookie rabbit3:/var/lib/rabbitmq/
      
    2. 设置Cookie文件权限(仅所有者可读写):
      sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
      sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
      
    3. 重启所有节点的RabbitMQ服务使Cookie生效:
      sudo systemctl restart rabbitmq-server
      

4. 启动RabbitMQ服务并启用管理插件

  • 启动服务:在所有节点上启动RabbitMQ并设置开机自启:
    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  • 验证服务状态:确保服务运行正常(显示active (running)):
    sudo systemctl status rabbitmq-server
    
  • 启用管理插件:为方便远程管理,启用Web管理界面插件:
    sudo rabbitmq-plugins enable rabbitmq_management
    
    管理界面默认访问地址:http://{节点IP}:15672(初始账号guest/guest,仅限本地访问)。

5. 将节点加入集群

  • 步骤(以rabbit2rabbit3加入rabbit1集群为例):
    1. 停止目标节点应用:在rabbit2上执行:
      sudo rabbitmqctl stop_app
      
    2. 重置目标节点(首次加入集群时执行,清除原有集群数据):
      sudo rabbitmqctl reset
      
    3. 加入集群:将rabbit2加入rabbit1集群(rabbit1为主节点):
      sudo rabbitmqctl join_cluster rabbit@rabbit1
      
      注:rabbit@rabbit1中的rabbit1是主节点的主机名(需与/etc/hosts中的配置一致)。
    4. 启动目标节点应用
      sudo rabbitmqctl start_app
      
    5. 重复上述步骤:将rabbit3加入集群(命令同rabbit2)。

6. 验证集群状态

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

sudo rabbitmqctl cluster_status

正常输出应包含所有节点(如rabbit@rabbit1rabbit@rabbit2rabbit@rabbit3),且状态为running

7. 配置镜像队列(实现高可用)

镜像队列将队列数据复制到多个节点,避免单点故障。推荐使用仲裁队列(Quorum Queues)(RabbitMQ 3.8+版本,替代传统镜像队列,基于Raft协议保证强一致性)。

  • 创建仲裁队列策略:在任意节点上执行以下命令,将所有队列设置为仲裁队列(ha-mode: "exactly"表示副本数,ha-params: 3表示3个副本):
    sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' --priority 0 --apply-to queues
    
    参数说明:
    • ^:匹配所有队列名称;
    • ha-mode: "exactly":精确指定副本数;
    • ha-params: 3:3个副本(需与集群节点数一致);
    • ha-sync-mode: "automatic":自动同步队列数据(避免手动同步)。

8. 测试集群高可用

  • 创建测试队列:通过管理界面或命令行创建队列(如test_queue),并设置为持久化(durable: true)。
  • 发布消息:向队列发送消息(如Hello, RabbitMQ Cluster)。
  • 停止主节点:停止rabbit1的RabbitMQ服务(sudo systemctl stop rabbitmq-server)。
  • 验证消息访问:通过rabbit2rabbit3的管理界面查看test_queue,应仍能访问消息(说明队列已镜像到其他节点)。

关键注意事项

  • 节点类型:集群包含磁盘节点(存储元数据,推荐至少2个)和内存节点(缓存数据,提升性能)。默认创建的节点为磁盘节点,如需添加内存节点,在join_cluster命令中指定--ram参数:
    sudo rabbitmqctl join_cluster --ram rabbit@rabbit1
    
  • 网络分区处理:配置集群分区处理策略(避免脑裂),在/etc/rabbitmq/rabbitmq.conf中添加:
    cluster_partition_handling = pause_minority
    
    该策略会在网络分区时暂停少数派节点(如3节点集群中1节点分区,暂停该节点),待网络恢复后自动同步数据。
  • 数据持久化:创建队列时需设置durable: true(队列持久化),发布消息时设置delivery_mode: 2(消息持久化),确保节点重启后数据不丢失。

0