热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RabbitMQ集群部署详解

一、RabbitMQ两种集群部署方式1.1普通集群模式queue创建之后,如果没有其它policy,消息实体只存在于其中一个节点,A、
一、RabbitMQ 两种集群部署方式

1.1 普通集群模式

queue 创建之后,如果没有其它 policy,消息实体只存在于其中 一个节点,A、B 两个 Rabbitmq 节点仅有相同的元数据,即队列结构,但队列的 数据仅保存有一份,即创建该队列的 rabbitmq 节点(A 节点),当消息进入 A 节 点的 Queue 中后,consumer 从 B 节点拉取时,RabbitMQ 会临时在 A、B 间进行 消息传输,把 A 中的消息实体取出并经过 B 发送给 consumer,所以 consumer 可以连接每一个节点,从中取消息,该模式存在一个问题就是当 A 节点故障后, B 节点无法取到 A 节点中还未消费的消息实体。

1.2 镜像集群模式

把需要的队列做成镜像队列,存在于多个节点,属于 RabbitMQ 的 HA 方案(镜 像模式是在普通模式的基础上,增加一些镜像策略)
该模式解决了普通模式中的数据丢失问题,其实质和普通模式不同之处在于,消 息实体会主动在镜像节点间同步,而不是在 consumer 取数据时临时拉取,该模 式带来的副作用也很明显,除了降低系统性能外,如果镜像队列数量过多,加之 大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在 对可靠性要求较高的场合中适用,一个队列想做成镜像队列,需要先设置 policy, 然后客户端创建队列的时候,rabbitmq 集群根据“队列名称”自动设置是普通集 群模式或镜像队列。

1.3 集群中有两种节点类型

内存节点:只将数据保存到内存
磁盘节点:保存数据到内存和磁盘

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘节点来保存数据就足够了如果集群中只有内存节点,那么不能全部停止它们, 否则所有数据消息在服务器全部停机之后都会丢失。

推荐设计架构: 在一个 rabbitmq 集群里,有 3 台或以上机器,其中 1 台使用磁盘模式,其它节 点使用内存模式,内存节点无访问速度更快,由于磁盘 IO 相对较慢,因此可作 为数据备份使用。

二、主机名解析

各 MQ 服务器配置本地主机名解析

10.0.0.31 mq1.example.local mq1
10.0.0.32 mq2.example.local mq2
10.0.0.33 mq3.example.local mq3

三、安装RabbitMQ

sudo apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -ysudo apt-key adv --keyserver "hkps://keys.openpgp.org" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo apt-key add -curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo apt-key add -sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main## Provides RabbitMQ
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
EOF
sudo apt-get update -ysudo apt-get install -y erlang-base \erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \erlang-runtime-tools erlang-snmp erlang-ssl \erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerlsudo apt-get install rabbitmq-server -y --fix-missing

四、启动服务

systemctl enable --now rabbitmq-server

五、创建 RabbitMQ 集群

Rabbitmq 的集群是依赖于 erlang 的集群来工作的&#xff0c;所以必须先构建起erlang 的集群环境&#xff0c;而 Erlang 的集群中各节点是通过一个 magic COOKIE 来实现的&#xff0c;这个 COOKIE 存放在 /var/lib/rabbitmq/.erlang.COOKIE 中&#xff0c;文件是 400 的权限,所以必须保证各节点 COOKIE 保持一致&#xff0c;否则节点之间就无法通信。

5.1 第一步&#xff1a;各服务器关闭 RabbitMQ

systemctl stop rabbitmq-server

5.2 第二步&#xff1a;在mq-server1同步.erlang.COOKIE至其他两台服务器

scp /var/lib/rabbitmq/.erlang.COOKIE 10.0.0.32:/var/lib/rabbitmq/.erlang.COOKIE
scp /var/lib/rabbitmq/.erlang.COOKIE 10.0.0.33:/var/lib/rabbitmq/.erlang.COOKIE

5.3 第三步&#xff1a;各服务器启动 RabbitMQ

systemctl start rabbitmq-server

5.4 第四步&#xff1a;查看当前集群状态

root&#64;mq1:/var/lib/rabbitmq# rabbitmqctl cluster_status
Cluster status of node rabbit&#64;mq1 ...
BasicsCluster name: rabbit&#64;mq1.example.local #集群名称Disk Nodes #磁盘节点rabbit&#64;mq1Running Nodes #运作中节点rabbit&#64;mq1Versions #版本rabbit&#64;mq1: RabbitMQ 3.9.0 on Erlang 24.0.4

5.5 第五步&#xff1a;创建 RabbitMQ 集群

在 mq-server2 作为内存节点添加到 mq-server1&#xff0c;并作为内存节点&#xff0c;在 mq-server2 执行以下命令

rabbitmqctl stop_app #停止 app 服务
rabbitmqctl reset #清空元数据
rabbitmqctl join_cluster rabbit&#64;mq1 --ram #将rabbitmq-server2添加到集群当中&#xff0c;并成为内存节点&#xff0c;不加--ram默认是磁盘节点
rabbitmqctl start_app #启动 app 服务

在 mq-server3 作为内存节点添加到 mq-server1&#xff0c;并作为内存节点&#xff0c;在 mq-server3 执行以下命令

rabbitmqctl stop_app #停止 app 服务
rabbitmqctl reset #清空元数据
rabbitmqctl join_cluster rabbit&#64;mq1 --ram #将rabbitmq-server2添加到集群当中&#xff0c;并成为内存节点&#xff0c;不加--ram默认是磁盘节点
rabbitmqctl start_app #启动 app 服务

5.6 第六步&#xff1a;将集群设置为镜像模式

只要在其中一台节点执行以下命令即可

rabbitmqctl set_policy ha-all "#" &#39;{"ha-mode":"all"}&#39;

5.7 第七步&#xff1a;验证当前集群状态

root&#64;mq1:/var/lib/rabbitmq# rabbitmqctl cluster_status
Cluster status of node rabbit&#64;mq1 ...
BasicsCluster name: rabbit&#64;mq1.example.localDisk Nodesrabbit&#64;mq1RAM Nodesrabbit&#64;mq2
rabbit&#64;mq3Running Nodesrabbit&#64;mq1
rabbit&#64;mq2
rabbit&#64;mq3Versionsrabbit&#64;mq1: RabbitMQ 3.9.0 on Erlang 24.0.4
rabbit&#64;mq2: RabbitMQ 3.9.0 on Erlang 24.0.4
rabbit&#64;mq3: RabbitMQ 3.9.0 on Erlang 24.0.4

5.8 第八步&#xff1a;web 界面验证集群状态

各 RabbitMQ 服务器安装

rabbitmq-plugins enable rabbitmq_management

5.9 第九步&#xff1a;创建账号并授权

rabbitmqctl add_user xiaoming 123456
rabbitmqctl set_user_tags xiaoming administrator
rabbitmqctl set_permissions xiaoming ".*" ".*" ".*"

5.10 第十步&#xff1a;开启 web 插件后的集群状态

在这里插入图片描述


推荐阅读
  • 在Windows环境中优化提交Spark任务的方法与实践
    在Windows环境中优化提交Spark任务的方法与实践 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 本文深入探讨了Spring Cloud Eureka在企业级应用中的高级使用场景及优化策略。首先,介绍了Eureka的安全配置,确保服务注册与发现过程的安全性。接着,分析了Eureka的健康检查机制,提高系统的稳定性和可靠性。随后,详细讨论了Eureka的各项参数调优技巧,以提升性能和响应速度。最后,阐述了如何实现Eureka的高可用性部署,保障服务的连续性和可用性。通过这些内容,开发者可以更好地理解和运用Eureka,提升微服务架构的整体效能。 ... [详细]
  • 优化后的标题:PHP分布式高并发秒杀系统设计与实现
    PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。 ... [详细]
  • 在Linux系统中,原本已安装了多个版本的Python 2,并且还安装了Anaconda,其中包含了Python 3。本文详细介绍了如何通过配置环境变量,使系统默认使用指定版本的Python,以便在不同版本之间轻松切换。此外,文章还提供了具体的实践步骤和注意事项,帮助用户高效地管理和使用不同版本的Python环境。 ... [详细]
  • RancherOS 是由 Rancher Labs 开发的一款专为 Docker 设计的轻量级 Linux 发行版,提供了一个全面的 Docker 运行环境。其引导镜像仅 20MB,非常适合在资源受限的环境中部署。本文将详细介绍如何在 ESXi 虚拟化平台上安装和配置 RancherOS,帮助用户快速搭建高效、稳定的容器化应用环境。 ... [详细]
  • 本文深入探讨了 Spring Cloud 微服务架构中 Gateway 组件的应用,详细介绍了其在实现高效请求路由与过滤方面的关键作用。文章首先从基本配置入手,逐步讲解了如何通过静态路由和动态路由实现灵活的服务访问控制。此外,还特别介绍了如何配置 Gateway 以自动从 Nacos 服务注册中心拉取服务列表,进一步提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • Docker网络基础探讨了如何通过高效的技术手段实现跨主机容器间的顺畅通信与访问。本文深入分析了Docker网络架构,特别是其在多主机环境下的应用,为Go语言开发者提供了宝贵的实践指导和理论支持。 ... [详细]
  • 在RabbitMQ中,消息发布者默认情况下不会接收到关于消息在Broker中状态的反馈,这可能导致消息丢失的问题。为了确保消息的可靠传输与投递,可以采用确认机制(如发布确认和事务模式)来验证消息是否成功抵达Broker,并采取相应的重试策略以提高系统的可靠性。此外,还可以配置消息持久化和镜像队列等高级功能,进一步增强消息的可靠性和高可用性。 ... [详细]
  • 阿里巴巴Java后端开发面试:TCP、Netty、HashMap、并发锁与红黑树深度解析 ... [详细]
author-avatar
手机用户2602915211
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有