一、创建桥接网络
docker network create rabbitmq_net
二、拉取镜像
docker pull rabbitmq
docker pull haproxy
#查看镜像
docker images rabbitmq
docker images haproxy
三、配置主机名
vi /etc/hosts
192.168.1.20 rabbitmq01
192.168.1.20 rabbitmq02
192.168.1.20 rabbitmq03
测试主机名:
ping rabbitmq01
四、创建容器
docker run -d --name=rabbitmq01 -p 5673:5672 -p 15673:15672 \
-e RABBITMQ_NODENAME=rabbitmq01 -e RABBITMQ_ERLANG_COOKIE='meetyou' \
-h rabbitmq01 -e RABBITMQ_DEFAULT_USER=meetyou \
-e RABBITMQ_DEFAULT_PASS=2019Meetyou \
--net=rabbitmq_net rabbitmq:latest
docker run -d --name=rabbitmq02 -p 5674:5672 -p 15674:15672 \
-e RABBITMQ_NODENAME=rabbitmq02 -e RABBITMQ_ERLANG_COOKIE='meetyou' \
-h rabbitmq02 -e RABBITMQ_DEFAULT_USER=meetyou \
-e RABBITMQ_DEFAULT_PASS=2019Meetyou \
--net=rabbitmq_net rabbitmq:latest
docker run -d --name=rabbitmq03 -p 5675:5672 -p 15675:15672 \
-e RABBITMQ_NODENAME=rabbitmq03 -e RABBITMQ_ERLANG_COOKIE='meetyou' \
-h rabbitmq03 -e RABBITMQ_DEFAULT_USER=meetyou \
-e RABBITMQ_DEFAULT_PASS=2019Meetyou \
--net=rabbitmq_net rabbitmq:latest
- RABBITMQ_ERLANG_COOKIE:通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有容器都一致即可。
- -h: 设置容器hostname名称
- –net: 设置所属网络
进入容器,启动管理页面
docker exec -it rabbitmq01 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq02 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq03 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
访问MQ地址测试:
http://localhost:15673
http://localhost:15674
http://localhost:15675
五、salve加入集群操作
(注意做这个步骤的时候:需要配置/etc/hosts必须相互能够寻地到 我们已通过-h指定hostname)rabbitmq02、rabbitmq03容器(docker exec -it 容器id /bin/bash),执行一下:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbitmq01@rabbitmq01
//(--ram:内存存储方式,默认磁盘存储)
rabbitmqctl start_app
移动节点
rabbitmqctl forget_cluster_node rabbitmq02@rabbitmq02
Removing node rabbitmq02@rabbitmq02 from cluster …
六、配置镜像队列
//设置镜像队列策略(在任意一个节点上执行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
*将所有队列设置为镜像队列,即队列会被同步复制到各个节点,RabbitMQ高可用集群就已经搭建好了,我们可以重启服务,查看队列是否在从节点同步。
查询集群状态
rabbitmqctl cluster_status
更改节点类型(内存型或磁盘型)
rabbitmqctl stop_app
#磁盘存储
rabbitmqctl change_cluster_node_type disc
#内存存储
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app