当前位置:首页 > 服务端 > Rabbitmq 集群

Rabbitmq 集群

2022年11月09日 14:50:54服务端8

Rabbitmq 集群

集群目的就是为了实现rabbitmq的高可用性,集群分为2种

  • 普通集群:主备架构,只是实现主备方案,不至于主节点宕机导致整个服务无法使用
  • 镜像集群:同步结构,基于普通集群实现的队列同步

普通集群

slave节点复制master节点的所有数据和状态,除了队列数据,队列数据只存在master节点,但是Rabbitmq slave节点可以实现队列的转发,也就是说消息消费者可以连接到slave节点,但是slave需要连接到master节点转发队列,由此说明只能保证了服务可以用,无法达到高可用
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记

slave节点队列可以查看到,但是不会同步数据

镜像集群
基于普通集群实现队列的集群主从,消息会在集群中同步(至少三个节点)
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
镜像集群部署

环境准备
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
配置hosts

cat >> /etc/hosts << EOL
192.168.12.10 controller
192.168.12.11 standby1
192.168.12.12 standby2
EOL

配置.erlang.cookie

RabbitMQ 的集群是依赖 erlang 集群,而 erlang 集群是通过这个 cookie 进行通信认证的,因此,三台机器的配置文件需要一致

  • 目录:/var/lib/rabbitmq/.erlang.cookie (隐藏文件)
rabbitmq-server -detached	
#启动rabbitmq服务才能查看到.erlang.cookie文件(三台都要启动)
rabbitmqctl stop_app
#停止掉2个standby节点,不然复制后操作会提示认证问题,因为erlang.cookie改变了,需要kill才行
scp /var/lib/rabbitmq/.erlang.cookie root@standby1:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@standby2:/var/lib/rabbitmq/
#替换erlang.cookie文件

加入集群(节点操作加入)

rabbitmqctl cluster_status
#查看集群,默认集群就是自己
rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@controller
rabbitmqctl start_app
#停止服务、重启之前的数据、加入集群

报错解决
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记

rabbitmqctl start_app
#controller节点

Rabbitmq 集群 _ JavaClub全栈架构师技术笔记

rabbitmq-server -detached
rabbitmqctl stop_app
#再次启动后停止

查看集群状态
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
开启web管理页面

rabbitmq-plugins enable rabbitmq_management (三个节点)
#url:http://192.168.12.10:15672/
#默认账号:guest guest

Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
实现队列的集群

基于普通镜像通过配置策略的方式实现,policy可以选择exchanges 或者 queue 的数据需要复制同步,以及如何复制同步

  • 可以基于命令行配置
  • 支持web管理界面配置

策略格式

rabbitmqctl set_policy [-p ] [–priority <priorityz] [–apply-to <apply-to2]

  • -p Vhost: 可选参数,针对指定vhost下的queue进行设置
  • Name:priority 名称
  • Pattern: queue的匹配模式(使用正则表达式)
  • Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
    • ha-mode:指明镜像队列的模式,有效值为all/exactly/nodes
      • all:表示在集群中所有的节点上进行镜像
      • exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
      • nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
    • ha-params: ha-mode模式需要用到的参数
    • ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
  • priority:可选参数, policy的优先级

配置策略

rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#策略名 ha-all
#匹配所有的队列,也可以具体单个,比如'^test' 
#三个节点都进行队列镜像
#自动同步

查看策略

rabbitmqctl list_policies

Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记测试关闭controller节点

rabbitmqctl stop_app

Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
查看后发现节点已经变成standby2,数量也减少了一个

恢复controller节点

rabbitmqctl start_app

Rabbitmq 集群 _ JavaClub全栈架构师技术笔记
查看后,说明集群节点不会被抢回,其实这样也是合理的

参考:https://www.rabbitmq.com/clustering.html
参考视频:https://www.bilibili.com/video/BV1dE411K7MG?p=19

卸载rabbitmq(干净)

yum -y remove rabbitmq-server.noarch
yum -y remove erlang-* 
rm -rf /usr/lib64/erlang
rm -rf /var/lib/rabbitmq

作者:Y。S。H。
来源链接:https://blog.csdn.net/yangshihuz/article/details/114120589

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68843.html

标签: RabbitMQ
分享给朋友:

“Rabbitmq 集群” 的相关文章

MQ--01为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

MQ--01为什么要选择RabbitMQ ,RabbitMQ简介,各种MQ选型对比

MQ 是什么?队列是什么,MQ 我们可以理解为消息队列,队列我们可以理解为管道。以管道的方式做消息传递。 场景:     1.其实我们在双11的时候,当我们凌晨大量的秒杀和抢购商品,然后去结算的时候,就会发现,界面会提...

RabbitMQ消息队列创建

RabbitMQ消息队列创建

操作环境 centos 7.9 RabbitMQ 3.8.23 Erlang 24.1.2 局域网(内网) 本文章是通过RabbitMQ图形管理界面,进行消息创建与队列绑定 首先在RabbitMQ安装时...

rabbitmq 启动异常

问题点说明:今天早上,开发人员反映Rabbitmq有问题,我试着登录页面访问http://IP:15672,出现了报错信息,因为当时忙着处理,报错页面没有截下来。 后面想重启一下Rabbitmq看能不能解决问题,发现居然重启不了,然后查看了下日志信息,找到了Ra...

linux查看rabbitmq运行状态,RabbitMQ常用命令

RabbitMQ常用命令 rabbitmqctl命令 http://www.rabbitmq.com/man/rabbitmqctl.1.man.html# 1). 服务器启动与关闭 启动: rabbitmq-server –detach...

RabbitMQ消息堆积问题

RabbitMQ消息堆积问题

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 解决消息堆积有三种思路: 增加更多消费者,提高消费速度 在消费者...

RabbitMQ详解(一)

RabbitMQ详解(一)

一、消息队列相关概念 二、安装rabbitmq 三、配置rabbitmq 四、运行时参数配置 五、rabbitmq集群 一、消息队列相关概念 消息中间件: AMQP:高级消息队列协议  MQ是消费...

RabbitMQ 入门及学习思路

RabbitMQ 入门及学习思路

文章目录 简介 适用的应用场景 一个故事告诉你什么是消息队列 安装教程(Windows) 简单队列示例 RabbitMQ的优势...

SpringBoot集成rabbitmq(一)

SpringBoot集成rabbitmq(一)

前言        Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现。核心作用就是创建消息队列,异步发送和接收消息。通常用来在高并发中处理削峰填谷、延迟处理、解耦系统之间的强耦合、处理秒杀订单。  入门rabbitm...

RabbitMq的介绍和简单使用

RabbitMq的介绍和简单使用

1、概述 1.大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力 2.消息服务中两个重要概念: ​ 消息代理(message broker)和目的地(destination) 当消息发送者发送消息以后,将由消息代理接...

Web模式使用RabbitMQ

Web模式使用RabbitMQ

启动rabbitmq服务后,登陆网址:http://localhost:15672 ▎添加队列 ▎模拟生产者生产消息 1、进入交换机tab,点击默认交换机(AMQP default)进入...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。