RabbitMQ docker集群 多机器部署

参考
 
ip
port
hostname
192.168.2.201
6041
node1
192.168.2.202
6041
node2
192.168.2.203
6041
node3
1、启动三个RabbitMQ容器
 
新版本已经不建议通过环境变量设置 Erlang Cookie 了,建议在 home 目录下新建 .erlang.cookie 文件,在 每个节点的 .erlang.cookie 写入一致的字符串,注意 .erlang.cookie 文件的权限应该为 400。
所以为了便于修改ErlangCookie,启动容器时要做好容器数据卷的映射。
因为/var/lib/rabbitmq 是 RabbitMQ home 目录和 data 目录,所以需要映射到宿主机
每以机器执行
mkdir -p /data/rabbitmq_cluster/node/{data,conf,log}
chmod -R 777 /data/rabbitmq_cluster/node
cat << EOF >/data/rabbitmq_cluster/node/data/.erlang.cookie
LleLHxuTQBrxgR4VnP03Q7 EOF chmod -R 600 /data/rabbitmq_cluster/node/data/.erlang.cookie

 

 
 
每台机器分别执行
node1
docker run -d --name rabbitmq --restart=always --hostname node1 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node2:192.168.2.202 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
node2
docker run -d --name rabbitmq --restart=always --hostname node2 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
node3
docker run -d --name rabbitmq --restart=always --hostname node3 \ 
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node2:192.168.2.202 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management

 

 
设置节点1
docker exec -it rabbitmq /bin/bash 
rabbitmq-plugins enable rabbitmq_management # 管理页面插件 r
abbitmqctl stop_app # (rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务)
rabbitmqctl reset
rabbitmqctl start_app #(只启动应用服务)
exit

 

 
设置节点2
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit

 

设置节点3
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset r
abbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit

 

 
2.5、预览结果
节点设置完成之后,在浏览器访问192.168.13.100:15673、192.168.13.100:15674和192.168.13.100:15675中任意一个来查看RabbitMQ Management:
0
至此,RabbitMQ集群搭建完毕。
 
3、配置镜像队列
3.1、配置镜像的原因
如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并 且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但 是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一 个短暂却会产生问题的时间窗。通过 publisherconfirm(发布确认) 机制能够确保客户端知道哪些消息己经存入磁盘,尽 管如此,一般不希望遇到因单点故障导致的服务不可用。
引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中 的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。
 
3.2、搭建步骤
启动三台集群节点
随便找一个节点添加 policy(策略) 要先绑定一个交换机和队列才行
 
0
 
 
 
 
说明:
 
Name:新建的策略的名字(按照自己的需求进行设置即可)
Pattern:会按照设置的规则进行镜像设置(例如本例中设置为 ^mirror,则会为开头是 mirror 的队列进行镜像备份)
Pattern: queue的匹配模式(正则表达式)。^表示所有队列都是镜像队列。
Definition: 镜像定义,包括三个部分ha-sync-mode、ha-mode、ha-params。
ha-mode: 指明镜像队列的模式,有效取值范围为all/exactly/nodes。
all:表示在集群所有的代理上进行镜像。
exactly:表示在指定个数的代理上进行镜像,代理的个数由ha-params指定。
nodes:表示在指定的代理上进行镜像,代理名称通过ha-params指定。
ha-params: ha-mode模式需要用到的参数。
ha-sync-mode: 表示镜像队列中消息的同步方式,有效取值范围为:automatic,manually。
automatic:表示自动向master同步数据。
manually:表示手动向master同步数据。
Priority: 可选参数, policy的优先级。
 
0
3.在 rabbitmq-node1 上创建一个队列发送一条消息,队列存在镜像队列
 
0
 
4、停掉 rabbitmq-node1 之后发现 rabbitmq-node2 成为镜像队列
0
 
5、就算整个集群只剩下一台机器了 依然能消费队列里面的消息 说明队列里面的消息被镜像队列传递到相应机器里面
posted @ 2024-04-28 11:17  文艺流浪汉  阅读(274)  评论(0编辑  收藏  举报