RabbitMQ 集群构建

本文详细介绍了如何构建RabbitMQ的主从集群,包括集群环境准备、节点配置、cookie文件同步以及集群状态检查。在主从模式中,当master节点关闭时,系统会自动选择新的master节点继续服务,确保高可用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、主从集群架构

1、普通集群(主备模式)
	RabbitMQ代理操作所需的所有数据/状态都在所有节点之间复制。消息队列是一个例外,默认情况下,消息队列驻留在一个节点上,尽管它们在所有节点上都是可见且可访问的。
	注意点:
			1.此种模式,master点上的队列不能copy到salve节点上,连接到salve节点上的消费者是可以消费消息,消息消费master上队列中的消息也会删除掉。
			2.master节点down掉后,两个salve节点消费者也不能消费当中的消息。
			3.master节点发布消息后,或对消息进行操作后会立即同步到所有的salve节点上

在这里插入图片描述

2、集群环境准备
  • 节点配置:
    master节点:192.168.231.131 主机名:(mq1)
    salve节点1:192.168.231.132 主机名:(mq2)
    salve节点2:192.168.231.133 主机名:(mq3)
  • 准备三台服务器并配置IP映射:
    vim /etc/hosts 命令加入映射信息:
    192.168.231.131 mq1
    192.168.231.132 mq2
    192.168.231.133 mq3在这里插入图片描述
  • 三台服务器上安装RabbitMQ,并同步cookie文件(是隐藏文件),在master节点上执行
    为什么必须同步cookie文件?
    .erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每一个节点上要保持相同的.erlang.cookie文件,Rabbitmq的集群是依赖于erlang的集群来工作的,所以必须先构建起erlang的集群环境。Erlang的集群中各节点是通过一个magic cookie来实现的,这个cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中,或者${home}/.erlang.cookie ,所以必须保证各节点cookie保持一致,否则节点之间就无法通信。
    安装步骤这里就不叙述了,
    下面开始同步cookie文件:
scp /var/lib/rabbitmq/.erlang.cookie root@mq2: /var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@mq3: /var/lib/rabbitmq/

Linux scp 命令说明:
scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令,是 cp 命令的加强版,
基本用法:scp [可选参数] 源文件/目录 root用户@那台主机 目标文件/目录
常用的可选参数:
-P 大写的,指定端口号
-r 递归复制整个目录
-v 显示所有 debug 信息
-q 不显示传输进度
-C 大写的,启用压缩
-4 使用 IPv4 地址
-6 使用 IPv6 地址

  • 查看cookie是否一致:
    master节点:cat /var/lib/rabbitmq/.erlang.cookie
    salve节点1:cat /var/lib/rabbitmq/.erlang.cookie
    salve节点2:cat /var/lib/rabbitmq/.erlang.cookie
    在这里插入图片描述
    三台服务器上的cookie必须是相同的(CGRMOKNNPQRUNBZSEGWO
  • 后台启动RabbitMQ所有节点,命令如下,启动成功后访问管理界面
rabbitmq-server -detached
  • 在salve节点1salve节点2两台服务器上执行加入集群命令:
    1.先关闭
rabbitmqctl stop_app

在这里插入图片描述
2.加入集群

rabbitmqctl join_cluster rabbit	@mq1

3.启动集群

rabbitmqctl start_app
  • 在任意节点查看集群状态:
rabbitmqctl cluster_status
  • 搭建集群成功如下显示:
    在这里插入图片描述

  • 登录管理界面,展示如下界面:
    在这里插入图片描述

  • 在master节点上创建队列:
    在这里插入图片描述

  • 在salve1、salve2节点上查看队列

在这里插入图片描述
在这里插入图片描述

  • 关闭master节点,执行如下命令,查看salve1和salve2节点:
rabbitmqctl stop_app

在这里插入图片描述
在这里插入图片描述

二、镜像集群架构

	镜像队列机制就是将三个节点之间设置主从关系,消息会在三个节点之间进行自动同步,且如果其中一个节点不可用,并不会导致消息丢失或服务不可用的情况,提示MQ集群的高可用。
  • 集群架构图:
    在这里插入图片描述
  • 配置集群架构
    1.策略说明:
rabbitmqctl set_policy [--p <vhost>]  [--priority <priority>]  [--apply-to <apply-to>] <name> <pattern> <definition>

[--p <vhost>]:可选参数 针对指定vhost下的queue进行设置   如不指定对所有的vhost下的queue进行设置
name:policy的名称
pattern:queue的匹配模式(正则表达式)
priority:可选参数,policy的优先级
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(手动)

例子
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 查看当前策略:
rabbitmqctl list_policies
  • 添加策略
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
说明:策略正则表达式为" ^ ":表示匹配所有队列名称		" ^hello ":表示匹配以hello开头的队列

在这里插入图片描述
在这里插入图片描述

  • 删除策略
rabbitmqctl clear_policy ha-all
  • 测试集群

master节点down机

结论:当master节点down掉后,rabbit会重新选择一个新节点作为master节点继续提供服务

master管理界面
在这里插入图片描述
salve1节点管理界面
在这里插入图片描述
salve2节点管理界面
在这里插入图片描述
down掉的节点重新启动
此时此节点为作为salve节点存在,并同步当前master节点的队列。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值