目录
扫描二维码关注公众号,回复:
13460306 查看本文章
RabbitMQ的集群:普通集群(副本集群),镜像集群
一、普通集群(副本集群)
1.普通集群的特点(普通集群就是弟弟)
- 从节点不能同步主节点中的队列数据
- 消费者可以订阅从节点,从节点通过向主节点查询数据然后向消费者提供服务
2.搭建普通集群
(1)搭建
#启动docker
systemctl start docker
#拉取镜像
docker pull rabbitmq:3.7-management
--------------------------------------
#注:如果拉取失败
#如果拉取失败
vi /etc/resolv.conf
#在里面添加如下
nameserver 8.8.8.8
nameserver 114.114.114.114
--------------------------------------
#创建文件夹
mkdir -p /home/soft/rabbitmqcluster
cd /home/soft/rabbitmqcluster/
#创建文件夹
mkdir rabbitmq01 rabbitmq02 rabbitmq03
#启动rabbitmq01
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v /home/soft/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.7-management
#启动rabbitmq02
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v /home/soft/rabbitmqcluster/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.7-management
#启动rabbitmq03
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v /home/soft/rabbitmqcluster/rabbitmq03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.7-management
#重启rabbitmq01
docker exec -it rabbitmqCluster01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
#重启rabbitmq02
docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
#重启rabbitmq03
docker exec -it rabbitmqCluster03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
(2)登陆mq
http://192.168.210.131:15672/#/
http://192.168.210.131:15673/#/
http://192.168.210.131:15674/#/
账户名密码:guest
(3)普通集群的缺点
当我们主节点宕机之后,从节点没法工作。而且从节点没法复制主节点的队列数据。出故障后没法故障转移。
比如我先运行一个hello模式的队列:
然后我让主节点宕机:
宕机后直接点挂了,从节点是不可用状态:
二、镜像集群
因为普通集群缺点太大,真正没法用,我们一般使用镜像集群。
1.架构图
2.配置集群架构
#策略说明
rabbitmqctl set_policy [-p <vhost>] [--priority <priority >] [--apply-to <apply-to>] <name> <pattern> <definition>
注:
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
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:进行队列中消息同步方式,有效值为auutomatic和manual
priority:可选参数,policy优先级
#查看当前策略
rabbitmqctl list_policies
#添加策略
#策略正则表达式为"^"表示所有匹配所有队列名称
#^hello:匹配hello开头队列
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#删除策略
rabbitmqctl clear_policy ha-all
三、打赏请求
如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~