RabbitMQ的镜像选择是rabbitmq:3.6.15-management
step1. 依次启动三个RabbitMQ的容器
RABBITMQ_ERLANG_COOKIE是配置erlang.cookie的值
.erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400。
具体的文件路径在 /var/lib/rabbitmq/.erlang.cookie
代码语言:javascript复制docker run -d --hostname rabbit1 --name myrabbit1 -p 8101:15672 -p 8201:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit2 --name myrabbit2 -p 8102:15672 -p 8202:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
docker run -d --hostname rabbit3 --name myrabbit3 -p 8103:15672 -p 8203:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.6.15-management
step2. 加入RabbitMQ节点到集群
代码语言:javascript复制设置节点1:
docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
设置节点2,加入到集群:
docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。
设置节点3,加入到集群:
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit
安装完成,使用docker ps查看
代码语言:javascript复制CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6e40e86437fa rabbitmq:3.6.15-management "docker-entrypoint..." 7 days ago Up 5 days 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8203->5672/tcp, 0.0.0.0:8103->15672/tcp myrabbit3
3def6fca813d rabbitmq:3.6.15-management "docker-entrypoint..." 7 days ago Up 5 days 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8202->5672/tcp, 0.0.0.0:8102->15672/tcp myrabbit2
28b198211066 rabbitmq:3.6.15-management "docker-entrypoint..." 7 days ago Up 5 days 4369/tcp, 5671/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:8201->5672/tcp, 0.0.0.0:8101->15672/tcp myrabbit1
或者访问任意一个管理页面
step3. 配置集群同步信息
直接在管理页面配置
点击Admin -> Virtual Hosts
添加一个虚拟主机cluster2
再点击虚拟主机配置用户
点击Policies,配置高可用策略
ha-mode : all-所有节点互为镜像,exactly-指定镜像节点的数量,nodes-指定具体需要镜像的节点
ha-params:ha-mode=all,缺省,不需要填
ha-mode=exactly,指定几个节点为一组镜像节点
ha-mode=nodes,指定具体的节点,string类型
ha-sync-mode: 镜像队列中消息的同步方式,有效值为automatic,manually
这里指定了2个节点为镜像节点
回到Exchanges页面看到新增了默认的exchange
在Queues页面添加一个queue 查看该queue
可以看到在rabbit3有一份镜像
回到服务器停止rabbit1再次查看队列test