当前位置: 首页 > news >正文

【RabbitMQ运维】集群搭建

以下是 ​​RabbitMQ 多节点集群搭建​​ 和 ​​单节点集群搭建​​ 的详细指南


​一、单节点集群搭建(单机伪集群)​

适用于本地测试或学习,通过多个节点模拟集群行为(所有节点在同一台机器上)。

​1. 安装 RabbitMQ​

# Ubuntu/Debian
sudo apt-get install -y erlang rabbitmq-server# CentOS/RHEL
sudo yum install -y erlang rabbitmq-server

​2. 启动多个节点(伪集群)​

# 启动节点1(AMQP端口5672,管理界面15672)
RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached
# 启动节点2(AMQP端口5673,管理界面15673)
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached
# 启动节点3(AMQP端口5674,管理界面15674)
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached

​3. 将节点加入集群​

# 停止节点的应用(保持Erlang进程运行)
rabbitmqctl -n rabbit2 stop_app
rabbitmqctl -n rabbit3 stop_app# 重置节点(仅首次搭建时需要)
rabbitmqctl -n rabbit2 reset
rabbitmqctl -n rabbit3 reset# 将 rabbit2 和 rabbit3 加入 rabbit1 的集群
rabbitmqctl -n rabbit2 join_cluster rabbit1@localhost
rabbitmqctl -n rabbit3 join_cluster rabbit1@localhost# 启动所有节点
rabbitmqctl -n rabbit2 start_app
rabbitmqctl -n rabbit3 start_app

注意:第三步加入集群时,rabbit1@localhost 需要更改为主节点的节点名称

​4. 验证集群状态​

# 查看集群节点列表
rabbitmqctl -n rabbit1 cluster_status# 输出示例:
# Cluster status of node rabbit1@localhost
# [{nodes,[{disc,[rabbit1@localhost,rabbit2@localhost,rabbit3@localhost]}]}]

​5. 访问管理界面​

  • 默认用户:guest / guest
  • 访问地址:
    • Rabbit1: :15672
    • Rabbit2: :15673
    • Rabbit3: :15674

​二、多节点集群搭建(真实分布式集群)​

适用于生产环境,节点分布在多台服务器上。

​1. 前置条件​

  • ​所有节点需满足​​:
    • 相同的 Erlang 和 RabbitMQ 版本。
    • 主机名可互相解析(通过 /etc/hosts 或 DNS)。
    • 开放端口:4369(EPMD)、25672(Erlang 分布式通信)、5672(AMQP)、15672(管理界面)。

​2. 配置步骤(以 3 节点为例)​

​(1)修改主机名和 hosts 文件​
# 在每台服务器上修改主机名(以 node1 为例)
sudo hostnamectl set-hostname node1# 编辑 /etc/hosts(所有节点均需配置)
sudo vim /etc/hosts
# 添加所有节点的IP和主机名
192.168.1.101 node1
192.168.1.102 node2
192.168.1.103 node3
​(2)安装 RabbitMQ(所有节点)​
# Ubuntu/Debian
sudo apt-get install -y erlang rabbitmq-server# CentOS/RHEL
sudo yum install -y erlang rabbitmq-server
​(3)启动 RabbitMQ 并启用管理插件​
# 启动服务
sudo systemctl start rabbitmq-server# 启用管理插件
sudo rabbitmq-plugins enable rabbitmq_management
​(4)将节点加入集群​
# 在 node2 和 node3 上执行以下操作:# 停止应用
sudo rabbitmqctl stop_app# 重置节点(首次加入集群时执行)
sudo rabbitmqctl reset# 加入 node1 的集群
sudo rabbitmqctl join_cluster rabbit@node1# 启动应用
sudo rabbitmqctl start_app
​(5)设置镜像队列(可选)​
# 在任意节点上执行,将队列镜像到所有节点
sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

​3. 验证集群​

# 在任意节点上查看集群状态
sudo rabbitmqctl cluster_status# 输出示例:
# Cluster status of node rabbit@node1
# [{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}]

​4. 访问管理界面​

  • 任意节点地址:
    • :15672
    • :15672
    • :15672

​三、关键注意事项​

  1. ​节点类型​​:

    • ​磁盘节点(disc)​​:存储元数据(推荐至少 2 个)。
    • ​内存节点(ram)​​:仅缓存数据(性能高,但重启后数据丢失)。
    # 加入集群时指定节点类型
    rabbitmqctl join_cluster --ram rabbit@node1
  2. ​网络分区处理​​:

    • 配置 pause_minority_mode 或使用自动恢复插件。
    # 避免网络分区导致脑裂
    echo 'cluster_partition_handling = pause_minority' >> /etc/rabbitmq/rabbitmq.conf
  3. ​数据持久化​​:

    • 队列和消息需设置为持久化(durable=true)。
  4. ​集群扩容/缩容​​:

    • 扩容:直接加入新节点。
    • 缩容:需先移除节点(forget_cluster_node)。

​四、常见问题解决​

  • ​节点无法加入集群​​:
    • 检查防火墙、Erlang Cookie 是否一致(默认路径:/var/lib/rabbitmq/.erlang.cookie)。
  • ​管理界面无法访问​​:
    • 确保插件已启用(rabbitmq-plugins list)。
    • 确保云服务器已开放端口,在安全组中设置
  • ​队列数据不同步​​:
    • 配置镜像队列策略(ha-mode=all)。
http://www.xdnf.cn/news/621199.html

相关文章:

  • 【强化学习】#7 基于表格型方法的规划和学习
  • 力扣 283.移动零 (双指针)
  • SQL语句的执行流程
  • C++搜索二叉树
  • Java语言快速排序和堆排序(优先队列)介绍,附demo代码
  • C# 深入理解类(析构函数和this关键字)
  • 【RK3588新品】嵌入式人工智能实验箱EDU-AIoT ELF 2发布
  • 【萤火工场GD32VW553-IOT开发板】ADC电压的LabVIEW采集
  • 【漫话机器学习系列】275.GrabCut 算法——用于去除图片背景(Grabcut For Removing Image Backgrounds)
  • SpringBoot项目配置文件、yml配置文件
  • 大厂缓存架构方案-Caffeine+Redis双层缓存架构
  • 织梦dedecms登录后台出现Safe Alert Request Error step 2
  • 企业级单元测试流程
  • BLIP3-o:一系列完全开源的统一多模态模型——架构、训练与数据集
  • 深入理解 JVM 运行时数据区
  • 让MySQL更快:EXPLAIN语句详尽解析
  • 如何设计Agent的记忆系统
  • Cmake编译gflags过程记录和在QT中测试
  • std::thread的说明与示例
  • Linux中的文件描述符
  • 毕业论文格式(Word)
  • LINUX 524 rsync+inotify 调试(问题1:指定端口无法同步/已通过;问题2:rsync.log文件中时间不显示/已显示)
  • Linux--环境的搭建(云服务器)
  • 云原生安全:Linux命令行操作全解析
  • 自媒体运营新利器:账号矩阵+指纹浏览器,解锁流量密码
  • STM32中断优先级分组有哪几种?
  • 分享一套提高表达力的图书
  • 关于 Web 安全:4. 中间件 框架风险点分析
  • 【爬虫】爬bibi视频
  • LINQ性能优化终极指南