【困敦】探索RabbitMQ(一)-搭建高可用集群(HA)

本文详细介绍了如何使用Docker搭建RabbitMQ高可用集群,从基础集群到结合nginx进行负载均衡,再到使用keepalived实现nginx集群的高可用。内容涵盖集群搭建、镜像配置、erlang.cookie同步、集群测试及nginx和keepalived的集成。

如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O

本系列分三章探索实际应用中的RabbitMQ:

【困敦】探索RabbitMQ(一)--搭建高可用集群(HA)

【困敦】探索RabbitMQ(二)--实战rabbitmq.client

【困敦】探索RabbitMQ(三)--实战spring.amqp

 

本章需要提前在虚拟机中安装docker,具体参考《VirtualBox安装CentOS及Docker》

这里分三个阶段介绍如何搭建rabbitmq高可用(HA)集群:

第一阶段-搭建rabbitmq镜像集群

第二阶段-nginx + rabbitmq镜像集群

第三阶段-nginx集群 + keepalived + rabbitmq镜像集群

每个阶段有对应的客户端可用性测试,不需要的同学可以跳过。

一、搭建rabbitmq镜像集群

1、拉取rabbitmq镜像并启动三个节点容器

docker pull rabbitmq:3.8.15-management

docker run -d  --name rabbitmq1 --hostname rabbitmq_host1   -p 15672:15672 -p 5672:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq:3.8.15-management

docker run -d --name rabbitmq2 --hostname rabbitmq_host2  -p 15673:15672 -p 5673:5672  --link rabbitmq1:rabbitmq_host1 rabbitmq:3.8.15-management

docker run -d --name rabbitmq3 --hostname rabbitmq_host3 -p 15674:15672 -p 5674:5672  --link rabbitmq1:rabbitmq_host1 --link rabbitmq2:rabbitmq_host2  rabbitmq:3.8.15-management

注意:

a、可以在docker仓库中选择其他版本,https://hub.docker.com/_/rabbitmq?tab=tags&page=1&ordering=last_updated

b、--link 的作用是使两个节点间可以相互通信(网络),此时还没有组成集群。

2、配置.erlang.cookie

每个节点/var/lib/rabbitmq目录下都有一个隐藏文件.erlang.cookie,其值需要在rabbitmq集群中保持统一。

有两种方式设置:

(1)在docker启动时可以添加参数:-e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie'。设置简单但后面操作中会出现警告:

RABBITMQ_ERLANG_COOKIE env variable support is deprecated and will be REMOVED in a future version。

(2)启动容器后,在每个容器目录中手动设置。

a、docker宿主机器中,准备一个 .erlang.cookie文件,内容为rabbitmq_cookie,并修改权限为读写,不改权限报错erlang.cookie must be accessible by owner only

chmod 600 .erlang.cookie 

b、拷贝到所有容器

docker cp .erlang.cookie rabbitmq1:/var/lib/rabbitmq

docker cp .erlang.cookie rabbitmq2:/var/lib/rabbitmq

docker cp .erlang.cookie rabbitmq3:/var/lib/rabbitmq

c、重启容器

docker restart rabbitmq1

docker restart rabbitmq2

docker restart rabbitmq3

3、将节点加入集群

docker exec -it rabbitmq1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

docker exec -it rabbitmq2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq_host1
rabbitmqctl start_app
exit

docker exec -it rabbitmq3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq_host1
rabbitmqctl start_app
exit

docker exec -it rabbitmq1 bash
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

4、配置镜像集群

docker exec -it rabbitmq1 bash
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

注意:

(1)如果不配置镜像,则为普通集群,每个节点都有元数据,但只有master节点有队列数据,如果访问到slave节点,则从master节点拉数据返回。一旦master节点宕机,选择一个slave节点变为master节点,不阻碍新消息产生和消费,但之前的队列消息会丢失,直至节点恢复。

(2)如果配置镜像集群,与普通集群不同的是,每个节点上都有队列数据,当master节点队列数据发生变化时会主动推送到slave节点,以防止任一节点宕机情况下,已有队列消息丢失,缺点是镜像节点越多,同步消耗越大,性能越低。

5、编写客户端代码

public class RabbitMQHelper {
    public static final String QU
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值