在这里插入图片描述

集群架构
​ 当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的。RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的,每个节点共享所有的用户,虚拟主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图:

在这里插入图片描述

(1)克隆三台linux机器:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

虚拟机名称和位置(L)可以自定义,位置处如果没有相应文件夹的话会自动创建:
在这里插入图片描述

(2)配置虚拟机的网络和ip:

配置网络和ip请参考: https://blog.csdn.net/weixin_38568503/article/details/118816557

演示其中一台linux的配置,其他克隆机类似:

虚拟机开机,然后配置网络,ip等:

配置当前虚拟机的网络配置文件:
vim /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述

命令:
ip addr :查看本机ip地址/或者ifconfig命令
i :修改配置文件内容。安装上图进行自定义的修改。
ESC: 修改完成后按ESC,然后按shit+: 输入wq 用来保存退出文件。
然后重启:reboot
然后重新查看ip addr地址

(3)RabbitMQ集群搭建步骤:

①. 修改三台机器的主机名称

vim /etc/hostname

如图配置:其中主机一的hostname设置值node1,主机二的hostname设置值node2,主机三的hostname设置值node3,然后保存退出即可:
在这里插入图片描述

②. 配置各个节点的hosts文件,让各个节点能相互识别对方

vim /etc/hosts
每台设置以下相同的内容:192.168.211.231等为三台机器的ip地址,node1为节点名称

192.168.211.231  node1
192.168.211.232  node2
192.168.211.233  node3

如图配置:

在这里插入图片描述

三台同样的设置,然后重启三台机器,便于系统识别hosts文件:reboot

③. 设置各个节点的cookie文件使用同一个值

在node1(即机器一) 上操作,将 .erlang.cookie 文件拷贝到其他两台主机上。该 cookie 文件相当于密钥令牌,集群中的 RabbitMQ 节点需要通过交换密钥令牌以获得相互认证,因此处于同一集群的所有节点需要具有相同的密钥令牌,否则在搭建过程中会出现 Authentication Fail 错误。

RabbitMQ 服务启动时,erlang VM 会自动创建该 cookie 文件,默认的存储路径为 /var/lib/rabbitmq/.erlang.cookie 或 $HOME/.erlang.cookie,该文件是一个隐藏文件,需要使用 ls -al 命令查看。(拷贝.cookie时,各节点都必须停止MQ服务):

// 各节点分别停止所有服务,构建Erlang的集群环境
systemctl stop rabbitmq-server

//主机node1上的操作:
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/.erlang.cookie

配置如图:
在这里插入图片描述

④. 启动RabbitMQ服务,顺带启动Erlang虚拟机和RabbitMQ应用服务(在三台节点上分别执行以下命令)

启动MQ服务,Erlang虚拟机:
rabbitmq-server -detached

⑤. 在节点2(node2)机器上执行

#先关闭防火墙,再启动:
systemctl stop firewalld
#下次开机防火墙也是关闭的
systemctl enable firewalld
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# node2加入node1, node3加入node2
rabbitmqctl join_cluster rabbit@node1
# 4.启动服务
rabbitmqctl start_app

⑥. 在节点3(node3)机器上执行

#先关闭防火墙,再启动:
systemctl stop firewalld
#下次开机防火墙也是关闭的
systemctl enable firewalld
# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入, 在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app
# node2加入node1, node3加入node2
rabbitmqctl join_cluster rabbit@node2
# 4.启动服务
rabbitmqctl start_app

⑦. 查看集群状态
此时可以在任意节点上使用以下命令查看集群状态:

rabbitmqctl cluster_status

状态如图:
在这里插入图片描述

在这里插入图片描述
其他操作:

⑧. 需要重新设置用户

# 添加用户
rabbitmqctl add_user 用户名 密码

# 设置用户角色,分配操作权限
rabbitmqctl set_user_tags 用户名 administrator

# 为用户添加资源权限(授予访问虚拟机根节点的所有权限)
rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"

#查看当前用户和角色
rabbitmqctl list_users 

角色有四种:

administrator:可以登录控制台、查看所有信息、并对rabbitmq进行管理
monToring:监控者;登录控制台,查看所有信息
policymaker:策略制定者;登录控制台指定策略
managment:普通管理员;登录控制

这里创建用户admin,密码123,设置administrator角色,赋予所有权限

创建完成后,访问服务器公网ip:15672进行登录,然后便可进入到后台:

测试:http://192.168.211.231:15672/

在这里插入图片描述

其他操作一:解除集群节点(node2和node3机器分别执行)

# 1.停止服务
rabbitmqctl stop_app
# 2.重置集群状态
rabbitmqctl reset
# 3.重启服务
rabbitmqctl start_app
#查看集群状态
rabbitmqctl  cluster_status
#在集群其他正常节点将节点踢出集群,在node1机器上执行
rabbitmqctl forget_cluster_node rabbit@node2

在这里插入图片描述

其他操作二:重新加入集群:

# 1.停止服务
rabbitmqctl stop_app
# 2.重置状态
rabbitmqctl reset
# 3.节点加入
rabbitmqctl join_cluster rabbit@node1
# 4.重启服务
rabbitmqctl start_app

(4)镜像队列(备份队列):

在这里插入图片描述

搭建步骤:任何一台机器的控制台创建:
1.启动三台集群节点:
2.随便找一个节点添加policy(策略),如下图:
在这里插入图片描述

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

在这里插入图片描述

3.在node1上创建一个队列发送一条消息,队列存在镜像队列:

在这里插入图片描述

在这里插入图片描述
4.停掉node1之后发现node2成为镜像队列:
在这里插入图片描述
5.

在这里插入图片描述

(5)Haproxy+Keepalive实现高可用负载均衡(实现MQ的ip切换):

在这里插入图片描述

(6)联合交换机:

在这里插入图片描述

在这里插入图片描述

搭建步骤:

在这里插入图片描述

在这里插入图片描述
成功安装后的:
在这里插入图片描述

3.原理图:

在这里插入图片描述

在这里插入图片描述
4.在下游节点(node2)配置上游节点(node1):

在这里插入图片描述

然后在这里插入图片描述

在这里插入图片描述

(7)联合队列:

在这里插入图片描述

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐