Rabbitmq集群搭建

  参考:https://www.cnblogs.com/shihaiming/p/11014257.html

    https://www.cnblogs.com/knowledgesea/p/6535766.html

  Rabbitmq简介

  RabbiMQ是用Erang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。

  RabbiMQ模式

1
2
3
4
5
RabbitMQ模式大概分为以下三种:
(1)单一模式。
(2)普通模式(默认的集群模式)。
(3) 镜像模式(把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。
要实现镜像模式,需要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。

   RabbiMQ特点

  RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化
  也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。

  配置环境查看

 

 

   主机规划

  

IP地址主机名操作系统防火墙和SELinux用途
192.168.1.101 mq01 CentOS7.4(64位) 关闭 磁盘节点
192.168.1.102 mq02 CentOS7.4(64位) 关闭 内存节点
192.168.1.103 mq03 CentOS7.4(64位) 关闭 内存节点

  注意,这里三台服务器都连接上互联网,另外RabbitMQ集群节点必须在同一网段里,如果是跨广域网,效果会变差。

  RabbitMQ普通集群配置

  更改三台MQ节点的计算机名分别为mq01、mq02 和mq03,然后修改hosts配置文件

1
2
3
4
cat /etc/hosts
192.168.1.101 mq01
192.168.1.102 mq02
192.168.1.103 mq03

   注意:主机名也需要修改

  安装rabbitmq-server

  三台主机均操作安装

1
yum -y install rabbitmq-server

   拷贝erlang.cookie

  Rabbitmq的集群是依附于erlang的集群来工作的,所以必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。所以必须保证各节点cookie一致,不然节点之间就无法通信。

  注意:默认第一次启动才会生成该文件,在第一台主机先启动rabbitmq再拷贝至另外两台主机

1
2
# cat /var/lib/rabbitmq/.erlang.cookie
NBFIDWJAUZKASAOOWFAE

   拷贝

   拷贝后默认权限是root需要修改成rabbitmq权限

1
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

   分别查看三个节点并添加管理服务,最后启动rabbitmq服务

  三个阶段均操作

1
2
3
4
5
/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装情况
 
/usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务
 
systemctl restart rabbitmq-server

   查看监控端口

 

 

   将mq02、mq03作为内存节点加入mq01节点集群中

1
2
3
4
5
rabbitmqctl stop_app    //停掉rabbit应用
 
rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盘节点
 
rabbitmqctl start_app  //启动rabbit应用

   注意:如果是修改了主机名以后需要重新连接一次ssh否则会报连接local的rabbitmq错误

  

1
2
3
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq02和mq03是内存节点,mq01是磁盘节点。
(2)如果要使mq02、mq03都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用

   退出集群

1
2
3
4
#停止应用
rabbitmqctl stop_app
#重置退出
rabbitmqctl reset

 

  查看集群状态

 

 

   登录rabbitmq web管理控制台,创建新的队列

  打开浏览器输入http://192.168.1.101:15672, 输入默认的Username:guest,输入默认的Password:guest ,登录后出现如图所示的界面。

 

 

   根据界面提示创建一条队列

 

 

 

 

 

   注意:在RabbitMQ集群集群中,必须至少有一个磁盘节点,否则队列元数据无法写入到集群中,当磁盘节点宕掉时,集群将无法写入新的队列元数据信息。

  RabbitMQ镜像集群配置

  上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。

  设置的镜像队列可以通过开启的网页的管理端,也可以通过命令,这里说的是其中的网页设置方式。

   1,创建rabbitmq策略

  在mq01节点的控制台上创建策略

  (1)点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。

  (2)按照图中的内容根据自己的需求填写。

 

 

 

   此时分别登陆mq02、mq03两个节点的控制台,可以看到上面添加的这个策略,如图所示:

 

 

 

   添加队列测试

  在mq01添加队列

 

 

 

   将鼠标指向+2可以显示出另外两台消息节点。

  创建消息

  (1)点击ab队列按钮
  (2)拖动滚动条,点击publish message
  (3)填写相关内容

 

 

1
2
3
4
2-Persistent:表示持久化
Headers:随便填写即可
Properties:点击问号,选择一个消息ID号
Payload:消息内容

 

 

 

  点击queue按钮,发现ab队列的Ready和Total中多了一条消息记录。

 

   破坏性测试

  将mq01节点关闭,再通过mq02和mq03查看消息记录是否还存在。

1
rabbitmqctl stop_app

 

 

 

 

   从中可以看到ab队列已经从之前的+2显示成+1了,而且消息记录是存在的。

  再将mq02节点的服务关闭,通过mq03查看消息记录是否还存在。

1
rabbitmqctl stop_app

 

 

   将mq01和mq02的服务再启动起来

1
rabbitmqctl start_app

 

 

   从中可以看到ab队列后面+2变成了粉色,鼠标指上去显示镜像无法同步。如果这时候停掉mq03节点的服务,那么队列里面的消息将会丢失。

 

   采取的解决办法是选择在mq02节点上执行同步命令。

1
rabbitmqctl sync_queue ab  //同步ab队列

 

 

   同步完成后,+2又变成了蓝色。

  这样,我们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。

posted @   minseo  阅读(508)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2019-07-10 Python3 IO编程之StringIO和BytesIO
2019-07-10 Python3 IO编程之文件读写
点击右上角即可分享
微信分享提示