第一种(单机部署RabbitMq的集群)
步骤1 先创建对应的挂载目录和shell脚本
mkdir -p /tmp/rabbitmq1/lib
mkdir -p /tmp/rabbitmq2/lib
mkdir -p /tmp/rabbitmq3/lib
mkdir -p /tmp/rabbitmq1/log
mkdir -p /tmp/rabbitmq2/log
mkdir -p /tmp/rabbitmq3/log
节点1(主节点脚本) vi /tmp/rabbitmq1/rabbitmq-ram.sh
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
节点2(节点脚本) vi /tmp/rabbitmq2/ rabbitmq-disk
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
节点3(节点脚本) vi /tmp/rabbitmq3/ rabbitmq-disk
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
步骤 2 创建docker-compose.yml文件并执行(docker-compose up -d)
version: '3'
services:
rabbitmq1:
image: rabbitmq:management
container_name: rabbitmq1
hostname: rabbit_host1
ports:
- "5672:5672"
- "15672:15672"
volumes:
- /tmp/rabbitmq1/lib:/var/lib/rabbitmq
- /tmp/rabbitmq1/log:/var/log/rabbitmq
- /tmp/rabbitmq1/rabbitmq-ram.sh:/opt/rabbitmq/rabbitmq-ram.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq1
networks:
- rabbitmq
rabbitmq2:
image: rabbitmq:management
container_name: rabbitmq2
hostname: rabbit_host2
ports:
- "5673:5672"
- "15673:15672"
depends_on:
- "rabbitmq1"
volumes:
- /tmp/rabbitmq2/lib:/var/lib/rabbitmq
- /tmp/rabbitmq2/log:/var/log/rabbitmq
- /tmp/rabbitmq2/rabbitmq-disk.sh:/opt/rabbitmq/rabbitmq-disk.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq2
- RABBITMQ_CLUSTERED=true
- RABBITMQ_CLUSTER_WITH=rabbit@rabbitmq1
- RABBITMQ_RAM_NODE=true
networks:
- rabbitmq
rabbitmq3:
image: rabbitmq:management
container_name: rabbitmq3
hostname: rabbit_host3
ports:
- "5674:5672"
- "15674:15672"
depends_on:
- "rabbitmq1"
volumes:
- /tmp/rabbitmq3/lib:/var/lib/rabbitmq
- /tmp/rabbitmq3/log:/var/log/rabbitmq
- /tmp/rabbitmq3/rabbitmq-disk.sh:/opt/rabbitmq/rabbitmq-disk.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq3
- RABBITMQ_CLUSTERED=true
- RABBITMQ_CLUSTER_WITH=rabbit@rabbitmq1
- RABBITMQ_RAM_NODE=true
networks:
- rabbitmq
networks:
rabbitmq:
driver: bridge
3 分别进入3个节点的容器中,并分别执行(shell脚本)
sh /opt/rabbitmq/rabbitmq-ram.sh
sh /opt/rabbitmq/ rabbitmq-disk.sh
sh /opt/rabbitmq/ rabbitmq-disk.sh
#4 查看集群节点状态,配置启动了3个节点,1个磁盘节点和2个内存节点(随便在一个节点的容器中执行该命令)
rabbitmqctl cluster_status
#5 创建好集群好我们要给集群加一个虚拟机环境/dev 以免程序报错
6 我们不能直接关机,要输入docker-compose down把容器关了再关机否则容器造成集群失败
集群重启顺序
集群重启的顺序是固定的,并且是相反的
启动顺序:磁盘节点 => 内存节点
关闭顺序:内存节点 => 磁盘节点
最后关闭必须是磁盘节点,否则容易造成集群启动失败、数据丢失等异常情况
因为这里使用的是Docker-Compose所以我们让从节点都依赖于主节点,只有主节点启动后,从节点才会启动,关闭是自动先关闭的是从节点,注意我们一定不能直接关机,要输入docker-compose down把容器关了再关机否则容器造成集群失败
depends_on:
- "rabbitmq1"
集群失败后重建集群
如果要重建集群的话必须把rabbitmq lib目录中的/mnesi目录删除掉
第二种(多机部署RabbitMq的集群)
除了docker-compose.yml的内容与单机部署不同之外,其他步骤均相同
docker-compose.yml三个机器都要写
机器1 (启动集群时先启动该机器,关闭时先关闭它)192.168.66.188
services:
rabbitmq1:
image: rabbitmq:management
container_name: rabbitmq1
hostname: rabbit_host1
ports:
- "4369:4369"
- "5671:5671"
- "5672:5672"
- "15671:15671"
- "15672:15672"
- "25672:25672"
extra_hosts:
- "rabbit_host1:192.168.66.188"
- "rabbit_host2:192.168.66.47"
- "rabbit_host3:192.168.66.189"
volumes:
- /tmp/rabbitmq/lib:/var/lib/rabbitmq
- /tmp/rabbitmq/log:/var/log/rabbitmq
- /tmp/rabbitmq/rabbitmq-ram.sh:/opt/rabbitmq/rabbitmq-ram.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq1
机器2 192.168.66.47
version: '3'
services:
rabbitmq2:
image: rabbitmq:management
container_name: rabbitmq2
hostname: rabbit_host2
ports:
- "4369:4369"
- "5671:5671"
- "5672:5672"
- "15671:15671"
- "15672:15672"
- "25672:25672"
extra_hosts:
- "rabbit_host1:192.168.66.188"
- "rabbit_host2:192.168.66.47"
- "rabbit_host3:192.168.66.189"
volumes:
- /tmp/rabbitmq/lib:/var/lib/rabbitmq
- /tmp/rabbitmq/log:/var/log/rabbitmq
- /tmp/rabbitmq/rabbitmq-disk.sh:/opt/rabbitmq/rabbitmq-disk.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq2
机器3 192.168.66.189
version: '3'
services:
rabbitmq3:
image: rabbitmq:management
container_name: rabbitmq3
hostname: rabbit_host3
ports:
- "4369:4369"
- "5671:5671"
- "5672:5672"
- "15671:15671"
- "15672:15672"
- "25672:25672"
extra_hosts:
- "rabbit_host1:192.168.66.188"
- "rabbit_host2:192.168.66.47"
- "rabbit_host3:192.168.66.189"
volumes:
- /tmp/rabbitmq/lib:/var/lib/rabbitmq
- /tmp/rabbitmq/log:/var/log/rabbitmq
- /tmp/rabbitmq/rabbitmq-disk.sh:/opt/rabbitmq/rabbitmq-disk.sh
restart: always
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=1234
- RABBITMQ_ERLANG_COOKIE=CURIOAPPLICATION
- RABBITMQ_NODENAME:rabbitmq3
- 文章链接: https://blog.zhangcun.store/2022/10/17/shi-yong-docker-compose-an-zhuang-rabbitmq-de-ji-qun-bao-han-dan-ji-he-duo-ji-liang-chong-xing-shi-da-jian/
- 版权声明: 本网站所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处!
你的赏识是我前进的动力
支付宝
微信
