【RabbitMQ】docker rabbitmq集群 docker搭建rabbitmq集群-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
docker rabbitmq集群 docker搭建rabbitmq集群
RabbitMQ提供了两种常用的集群模式
1.普通集群模式
2.镜像集群模式
普通集群模式只能同步主节点上的交换机和队列信息但对于队列中的消息不做同步主节点宕机也不能进行切换故障转移。
镜像集群模式在普通集群模式的基础上配置可以使子节点备份master队列中的消息也可以在master宕机时进行故障转移切换至子节点提供服务。
由于镜像集群模式基于普通集群模式上进行配置所以直接搭建普通集群模式。
普通集群搭建
首先要确保已经安装docker从中央仓库拉取rabbitmq镜像
docker pull rabbitmq:management
在拉取镜像的时候闲着没事干可以先创建目录后续用做挂载容器目录这里我放在/tmp/下
mkdir /tmp/rabbitmqcluster
cd /tmp/rabbitmqcluster
mkdir rabbitmq01 rabbitmq02 rabbitmq03
运行rabbitmq镜像需要多少个节点就启动多少个容器
##主节点
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v /tmp/rabbitmqcluster/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ rabbitmq:management
##子节点
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v /tmp/rabbitmqcluster/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 rabbitmq:management
##子节点
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v /tmp/rabbitmqcluster/rabbitmq03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqCookie’ --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:management
–hostsname 容器中的主机名便于区分
–name 容器名
-v 挂载Linux的目录到容器内目录
-p 映射Linux系统的端口与容器内端口注意要使用未被占用的端口每个容器都有两个端口15672为web页面的访问端口5672为服务端口
-e 容器环境变量 RABBITMQ_ERLANG_COOKIE 是rabbitmq节点加入集群必须的认证手段
-link 使容器间可以通信
放行CentOS7虚拟机的端口
访问并使用默认的guest账号登录usernameguestpasswordguest
http://192.168.16.223:15672
http://192.168.16.223:15673
http://192.168.16.223:15674
正常继续下一步
使用docker exec进入主节点所在容器的主机
docker exec -it rabbitmqCluster01 /bin/bash
关闭rabbitmq应用并重置节点数据再重新启动应用
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
进入子节点所在rabbitmq02主机
docker exec -it rabbitmqCluster02 /bin/bash
同样关闭应用并重置节点数据然后使用rabbitmqctl join_cluster指令加入主节点所在集群完成后启动服务
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
然后进另一个子节点的主机如法炮制
docker exec -it rabbitmqCluster03 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
此时可以在web界面的总览面板看到三个节点信息
此时搭建普通集群已完成
镜像集群配置
进入主节点所在容器主机
docker exec -it rabbitmqCluster01 /bin/bash
设置镜像集群策略注意策略可以在队列产生前设置也可以在队列产生后设置
rabbitmqctl set_policy --vhost “/MyVirtualHost” ha-all “^hello” ‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’
–vhost 需要使用镜像集群的虚拟主机Virtual Host也可不指定不指定则视为"/"主机,这里我指定测试用的/MyVirtualHost
ha-all 是我指定的策略名
“^hello” 通配符匹配这里指定队列名以hello开头的队列如果需要指定所有队列使用 “^”
‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’ json格式的参数其中ha-mode为镜像队列的模式这里设置all集群内所有节点都备份镜像ha-sync-mode是消息队列同步方式automatic自动同步
设置后在web界面可以看到队列的状态变化
删除策略使用rabbitmqctl clear_policy --vhost 指令name为你要删除的策略名可选参数–vhost指定虚拟主机名如果不指定默认为删除"/"的策略。这里因为我的策略是加在/MyVirtualHost这个虚拟主机上的所以需要指定。
rabbitmqctl clear_policy ha-all --vhost “/MyVirtualHost”
clear成功
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |