0

0

rabbitmq 集群有什么用?

小老鼠

小老鼠

发布时间:2025-10-03 10:34:02

|

862人浏览过

|

来源于php中文网

原创

搭建RabbitMQ集群需至少两台服务器,安装RabbitMQ并配置相同Erlang Cookie,通过join_cluster命令将节点加入主节点,使用cluster_status验证状态,可选配置镜像队列或仲裁队列以提高可用性,推荐使用Management UI、Prometheus+Grafana等工具监控队列长度、消息速率、连接数、节点状态等关键指标。

rabbitmq 集群有什么用?

rabbitmq 集群主要用于提高消息队列系统的可用性和吞吐量。通过将消息队列分布在多个节点上,集群可以容忍单个节点的故障,并提供更高的并发处理能力。

rabbitmq 集群的搭建与使用

如何搭建一个简单的 RabbitMQ 集群?

搭建 RabbitMQ 集群,最基本的方法是利用 RabbitMQ 自带的集群功能。你需要至少两台服务器,并且保证它们之间网络互通。

  1. 安装 RabbitMQ: 在每台服务器上安装 RabbitMQ 服务。你可以使用 apt-get (Debian/Ubuntu) 或 yum (CentOS/RHEL) 等包管理器,或者直接从 RabbitMQ 官网下载安装包。

    # Debian/Ubuntu
    sudo apt-get update
    sudo apt-get install rabbitmq-server
    
    # CentOS/RHEL
    sudo yum install rabbitmq-server
    systemctl enable rabbitmq-server
    systemctl start rabbitmq-server
  2. 配置 Erlang Cookie: RabbitMQ 集群依赖 Erlang 的分布式特性,所以所有节点必须使用相同的 Erlang Cookie。这个 Cookie 通常位于 /var/lib/rabbitmq/.erlang.cookie。将其中一个节点的 Cookie 复制到其他所有节点上。

    # 在节点 1 上
    sudo cat /var/lib/rabbitmq/.erlang.cookie
    
    # 将节点 1 的 Cookie 复制到节点 2 和节点 3 的 /var/lib/rabbitmq/.erlang.cookie 文件中
  3. 加入集群: 选择一个节点作为 "主节点",其他节点加入到这个主节点。首先,停止其他节点上的 RabbitMQ 服务。

    sudo rabbitmqctl stop_app

    然后,使用 rabbitmqctl join_cluster 命令将其他节点加入到主节点。

    # 在节点 2 上
    sudo rabbitmqctl join_cluster rabbit@node1  # node1 是主节点的 hostname
    
    # 在节点 3 上
    sudo rabbitmqctl join_cluster rabbit@node1

    最后,启动这些节点上的 RabbitMQ 服务。

    sudo rabbitmqctl start_app
  4. 验证集群状态: 在任意一个节点上,使用 rabbitmqctl cluster_status 命令查看集群状态。

    sudo rabbitmqctl cluster_status

    你应该能看到所有节点都显示在集群状态中。

  5. 配置镜像队列(可选): 为了提高可用性,可以配置镜像队列。镜像队列会将队列的消息复制到多个节点上。

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

    这个命令会将所有队列设置为镜像队列,消息会复制到所有节点。

集群模式有哪些?quorum queues 和 classic mirrored queues 有什么区别

RabbitMQ 集群主要有两种模式:经典镜像队列(Classic Mirrored Queues)和仲裁队列(Quorum Queues)。

  • 经典镜像队列(Classic Mirrored Queues): 这是 RabbitMQ 早期版本提供的集群模式。在这种模式下,一个队列会被镜像到多个节点上,其中一个节点作为主节点,其他节点作为镜像节点。当主节点发生故障时,其中一个镜像节点会被提升为新的主节点。

    手机在线人工冲值
    手机在线人工冲值

    说明:我不知道这个系统还能用到什么地方!他的运作方式是这样的,客户在其他地方比如掏宝购买了 你得卡,然后在你的网站进行冲值,你得有人登陆并看着后台,如果有人冲值,就会刷出记录,手工冲值完毕后,你得点击 [冲值完毕],客户的页面 就会返回 冲值信息!安装:上传所有文件,倒入(sql.txt)mysql数据库,使用myphpadminphplib 777phplib/sys.php 777phplib

    下载
    • 优点: 实现简单,配置容易。
    • 缺点: 数据一致性问题。如果主节点在确认消息之前发生故障,消息可能会丢失或重复。切换主节点时可能导致短暂的服务中断。
  • 仲裁队列(Quorum Queues): 这是 RabbitMQ 3.8 引入的一种新的队列类型,旨在解决经典镜像队列的数据一致性问题。仲裁队列基于 Raft 一致性算法,确保所有节点上的消息顺序和内容一致。

    • 优点: 数据一致性高,即使在节点故障的情况下也能保证消息的可靠性。
    • 缺点: 性能略低于经典镜像队列。配置相对复杂。

区别总结:

特性 经典镜像队列 (Classic Mirrored Queues) 仲裁队列 (Quorum Queues)
数据一致性 较低 较高
一致性算法 Raft
性能 较高 略低
复杂性 较低 较高
适用场景 对数据一致性要求不高的场景 对数据一致性要求高的场景

选择哪种模式取决于你的应用场景。如果你的应用对数据一致性要求非常高,那么仲裁队列是更好的选择。如果你的应用对性能要求更高,并且可以容忍一定程度的数据不一致,那么经典镜像队列可能更适合你。

如何监控 RabbitMQ 集群的健康状态?

监控 RabbitMQ 集群的健康状态至关重要,可以帮助你及时发现并解决问题。

  1. RabbitMQ Management UI: RabbitMQ 自带一个 Web 管理界面,可以用来监控集群的各种指标,如队列长度、消息速率、连接数等。你可以在浏览器中访问 http://your_server_ip:15672 (默认端口是 15672) 来打开管理界面。

  2. RabbitMQ CLI 工具 使用 rabbitmqctl 命令可以获取集群的各种信息。例如,可以使用 rabbitmqctl cluster_status 命令查看集群状态,使用 rabbitmqctl list_queues 命令查看队列信息。

  3. Prometheus 和 Grafana: 可以使用 Prometheus 收集 RabbitMQ 的指标,然后使用 Grafana 可视化这些指标。你需要安装 RabbitMQ 的 Prometheus 插件,并配置 Prometheus 来抓取这些指标。

    • 安装 Prometheus 插件:

      sudo rabbitmq-plugins enable rabbitmq_prometheus
    • 配置 Prometheus:prometheus.yml 文件中添加 RabbitMQ 的配置。

      scrape_configs:
        - job_name: 'rabbitmq'
          static_configs:
            - targets: ['your_rabbitmq_server_ip:15692'] # 默认端口是 15692
    • 使用 Grafana 可视化: 在 Grafana 中导入 RabbitMQ 的 Dashboard,可以方便地查看各种指标。

  4. 使用第三方监控工具: 有很多第三方监控工具可以用来监控 RabbitMQ 集群,如 Datadog、New Relic 等。这些工具通常提供更丰富的功能和更强大的可视化能力。

需要监控的关键指标:

  • 队列长度: 队列长度过长可能表示消费者处理能力不足,需要增加消费者数量或者优化消费者代码。
  • 消息速率: 消息速率过高可能导致 RabbitMQ 性能下降,需要优化生产者代码或者增加 RabbitMQ 节点。
  • 连接数: 连接数过多可能导致 RabbitMQ 资源耗尽,需要检查连接是否被正确关闭。
  • 节点状态: 确保所有节点都处于健康状态,没有节点发生故障。
  • 磁盘空间: 磁盘空间不足可能导致 RabbitMQ 无法正常工作,需要及时清理磁盘空间。
  • 内存使用: 内存使用过高可能导致 RabbitMQ 性能下降,需要增加内存或者优化配置

通过监控这些关键指标,你可以及时发现并解决 RabbitMQ 集群的问题,确保消息队列系统的稳定运行。

相关专题

更多
erlang语言是什么
erlang语言是什么

erlang是一种并发、容错、分布式和动态类型的编程语言。它专门用于构建并发系统,并提供了一个轻量级进程模型来实现并发性。想了解更多erlang的相关内容,可以阅读本专题下面的文章。

395

2024.06.19

rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

201

2024.02.23

什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

325

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.10.07

cookie
cookie

Cookie 是一种在用户计算机上存储小型文本文件的技术,用于在用户与网站进行交互时收集和存储有关用户的信息。当用户访问一个网站时,网站会将一个包含特定信息的 Cookie 文件发送到用户的浏览器,浏览器会将该 Cookie 存储在用户的计算机上。之后,当用户再次访问该网站时,浏览器会向服务器发送 Cookie,服务器可以根据 Cookie 中的信息来识别用户、跟踪用户行为等。

6419

2023.06.30

document.cookie获取不到怎么解决
document.cookie获取不到怎么解决

document.cookie获取不到的解决办法:1、浏览器的隐私设置;2、Same-origin policy;3、HTTPOnly Cookie;4、JavaScript代码错误;5、Cookie不存在或过期等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

344

2023.11.23

阻止所有cookie什么意思
阻止所有cookie什么意思

阻止所有cookie意味着在浏览器中禁止接受和存储网站发送的cookie。阻止所有cookie可能会影响许多网站的使用体验,因为许多网站使用cookie来提供个性化服务、存储用户信息或跟踪用户行为。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

410

2024.02.23

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

12

2026.01.19

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP入门到实战消息队列RabbitMQ
PHP入门到实战消息队列RabbitMQ

共22课时 | 1.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.3万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号