ubuntu

RabbitMQ在Ubuntu上的集群管理怎么操作

小樊
46
2025-10-16 22:08:35
栏目: 智能运维

RabbitMQ在Ubuntu上的集群管理操作指南

一、集群搭建前准备

  1. 环境要求:所有节点需安装相同版本的Erlang(RabbitMQ依赖)和Ubuntu系统;节点间网络互通(防火墙开放**4369(Erlang端口映射)、25672(Erlang集群通信)、15672(管理界面)、5672(AMQP协议)**端口)。
  2. 主机名与hosts配置:为每个节点设置唯一主机名(如rabbit1rabbit2),并在所有节点的/etc/hosts文件中添加集群节点IP与主机名的映射(如192.168.1.101 rabbit1192.168.1.102 rabbit2),确保可通过主机名互相访问。
  3. 安装Erlang与RabbitMQ:在所有节点执行以下命令安装:
    sudo apt update
    sudo apt install -y erlang
    sudo apt install -y rabbitmq-server
    

二、启动RabbitMQ服务与启用管理插件

  1. 启动服务:在每个节点启动RabbitMQ并设置开机自启:
    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  2. 启用管理插件:为方便远程管理,启用rabbitmq_management插件(默认监听15672端口):
    sudo rabbitmq-plugins enable rabbitmq_management
    

三、同步Erlang Cookie(集群通信关键)

RabbitMQ节点通过Erlang Cookie(默认路径/var/lib/rabbitmq/.erlang.cookie)进行身份验证,所有节点的Cookie文件必须内容一致权限正确400、属主为rabbitmq:rabbitmq)。

四、将节点加入集群

  1. 初始化集群节点:在从节点(如rabbit2rabbit3)上停止RabbitMQ应用并重置(首次加入时需重置,会清除节点原有数据):
    sudo rabbitmqctl stop_app
    sudo rabbitmqctl reset
    sudo rabbitmqctl start_app
    
  2. 加入主节点集群:在从节点上执行join_cluster命令,指定主节点的Erlang节点名称(格式为主机名@节点IP或主机名,如rabbit@rabbit1):
    sudo rabbitmqctl stop_app
    sudo rabbitmqctl join_cluster rabbit@rabbit1  # 加入rabbit1的集群
    sudo rabbitmqctl start_app
    
  3. 验证集群状态:在任意节点执行cluster_status命令,查看running_nodes是否包含所有集群节点:
    sudo rabbitmqctl cluster_status
    
    输出示例(成功加入后):
    Cluster status of node rabbit@rabbit1
    [{nodes,[{disc,[rabbit@rabbit1,rabbit@rabbit2,rabbit@rabbit3]}]},
     {running_nodes,[rabbit@rabbit3,rabbit@rabbit2,rabbit@rabbit1]}]
    

五、配置镜像队列(实现队列高可用)

默认情况下,RabbitMQ队列仅在单个节点存储,需通过镜像队列策略将队列复制到多个节点。以下命令将所有队列镜像到集群所有节点,并开启自动同步:

sudo rabbitmqctl set_policy ha-all "^.*" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --priority 0 --apply-to queues

六、集群节点管理操作

1. 扩容集群(添加新节点)

  1. 新节点安装Erlang、RabbitMQ,配置主机名、hosts文件、同步Cookie;
  2. 启动RabbitMQ服务,启用管理插件;
  3. 在新节点上执行stop_appresetjoin_cluster(指向集群中任意在线节点)→start_app
  4. 通过cluster_status验证新节点是否加入。

2. 删除集群节点

  1. 目标节点(如rabbit4)上停止应用:
    sudo rabbitmqctl stop_app
    
  2. 集群中其他节点(如rabbit1)执行forget_cluster_node命令,移除目标节点:
    sudo rabbitmqctl forget_cluster_node rabbit@rabbit4
    
  3. 在目标节点上执行reset(清除所有状态信息)→start_app(重启服务):
    sudo rabbitmqctl reset
    sudo rabbitmqctl start_app
    

七、常见问题排查

  1. 节点无法加入集群
    • 检查Erlang Cookie是否一致(路径/var/lib/rabbitmq/.erlang.cookie);
    • 检查防火墙是否开放所需端口(4369、25672、15672、5672);
    • 检查节点主机名是否正确解析(ping rabbit2测试)。
  2. 管理界面无法访问
    • 确认rabbitmq_management插件已启用(rabbitmq-plugins list查看);
    • 检查云服务器安全组是否放行15672端口。
  3. 队列数据不同步
    • 确认已配置镜像队列策略(ha-mode: all);
    • 检查队列是否设置为持久化(创建队列时添加durable=true参数)。

八、注意事项

0
看了该问题的人还看了