首页主机资讯RabbitMQ在Ubuntu上的集群管理怎么操作

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

时间2025-10-17 11:10:04发布访客分类主机资讯浏览1060
导读:RabbitMQ在Ubuntu上的集群管理操作指南 一、集群搭建前准备 环境要求:所有节点需安装相同版本的Erlang(RabbitMQ依赖)和Ubuntu系统;节点间网络互通(防火墙开放**4369(Erlang端口映射)、25672(...

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)。

  • 操作步骤:选择一台节点(如rabbit1)作为Cookie源,复制其Cookie内容到其他节点:
    # 在rabbit1上查看Cookie
    sudo cat /var/lib/rabbitmq/.erlang.cookie
    # 将内容复制到rabbit2、rabbit3(需替换为实际IP或主机名)
    sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit2:/var/lib/rabbitmq/.erlang.cookie
    sudo scp /var/lib/rabbitmq/.erlang.cookie user@rabbit3:/var/lib/rabbitmq/.erlang.cookie
    # 在其他节点设置Cookie权限
    sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
    sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
    

四、将节点加入集群

  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
  • 参数说明
    • ha-mode: all:队列复制到所有节点;
    • ha-sync-mode: automatic:新节点加入时自动同步队列数据;
    • ^.*:匹配所有队列(可修改为特定前缀,如ha-order仅镜像order开头队列);
    • --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参数)。

八、注意事项

  • 节点类型:建议至少部署2个磁盘节点disc,存储元数据),避免单点故障;内存节点(ram,提升性能)可作为辅助节点;
  • 网络分区处理:在/etc/rabbitmq/rabbitmq.conf中添加cluster_partition_handling = pause_minority,避免网络分区导致脑裂;
  • 数据持久化:队列和消息需设置为持久化(durable=true),防止节点重启数据丢失。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: RabbitMQ在Ubuntu上的集群管理怎么操作
本文地址: https://pptw.com/jishu/728789.html
Linux Informix怎样实现负载均衡 RabbitMQ消息压缩Ubuntu上怎么配置

游客 回复需填写必要信息