ubuntu

RabbitMQ在Ubuntu上如何扩展

小樊
36
2025-11-09 07:36:07
栏目: 智能运维

RabbitMQ在Ubuntu上的扩展方法
RabbitMQ的扩展主要通过集群部署(水平扩展节点)和镜像队列(高可用性扩展)实现,以下是针对Ubuntu系统的详细操作步骤:

一、前置准备

  1. 安装Erlang环境
    RabbitMQ基于Erlang开发,需先安装兼容版本的Erlang(如RabbitMQ 3.9需Erlang OTP 22+)。在Ubuntu上可通过以下命令安装:

    sudo apt update
    sudo apt install erlang
    

    安装完成后,通过erl -version验证版本是否符合要求。

  2. 安装RabbitMQ Server
    在所有需要扩展的节点上安装RabbitMQ:

    sudo apt update
    sudo apt install rabbitmq-server
    

    安装完成后,启动服务并设置为开机自启:

    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  3. 配置Erlang Cookie
    RabbitMQ节点间通过Erlang Cookie(位于/var/lib/rabbitmq/.erlang.cookie)认证通信。需确保所有节点的Cookie文件内容一致且权限正确(400,属主为rabbitmq:rabbitmq)。

    • 从主节点复制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
      

二、构建RabbitMQ集群(水平扩展节点)

  1. 配置节点主机名与hosts文件

    • 为每个节点设置静态hostname(如rmq1rmq2rmq3):
      hostnamectl set-hostname rmq1 --static
      
    • 在所有节点的/etc/hosts文件中添加节点IP与hostname映射(确保同一局域网内能互相解析):
      192.168.1.100 rmq1
      192.168.1.101 rmq2
      192.168.1.102 rmq3
      
  2. 启动主节点并验证状态
    在主节点(如rmq1)上启动RabbitMQ服务,检查集群状态:

    sudo systemctl start rabbitmq-server
    sudo rabbitmqctl status
    

    确认服务运行正常(Status: running)。

  3. 将其他节点加入集群
    在从节点(如rmq2rmq3)上执行以下命令:

    • 停止RabbitMQ服务:
      sudo systemctl stop rabbitmq-server
      
    • 加入主节点集群(rabbit@主节点hostname):
      sudo rabbitmqctl join_cluster rabbit@rmq1
      
    • 启动从节点服务:
      sudo systemctl start rabbitmq-server
      
  4. 验证集群状态
    在任意节点上运行cluster_status命令,查看所有节点是否加入集群:

    sudo rabbitmqctl cluster_status
    

    输出应包含所有节点的running状态(如rabbit@rmq1rabbit@rmq2)。

三、配置镜像队列(高可用性扩展)

镜像队列将队列数据复制到集群中的多个节点,避免单点故障。设置所有队列镜像的策略如下:

sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

设置后,新创建的队列会自动镜像到所有节点。若需修改现有队列,需先删除旧队列再重新创建。

四、扩展后的验证

  1. 节点状态验证
    通过cluster_status确认所有节点处于running状态,且running节点数等于集群总节点数。

  2. 队列镜像验证
    在任意节点创建队列(如test_queue),然后在其他节点查看队列是否存在(sudo rabbitmqctl list_queues name durable),并确认durable属性为true(表示镜像队列)。

  3. 故障转移验证
    停止主节点服务(sudo systemctl stop rabbitmq-server),检查其他节点是否能自动接管队列(通过cluster_status查看节点状态,通过生产者/消费者测试消息收发是否正常)。

注意事项

0
看了该问题的人还看了