Docker搭建RabbitMq镜像集群
创建容器
- 创建三个RabbitMq容器
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq1 -p 5672:5672 -p 15672:15672 --name rabbitmq1 rabbitmq:3-management
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq2 -p 5673:5672 -p 15673:15672 --name rabbitmq2 --link rabbitmq1:rabbitmq1 rabbitmq:3-management
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq3 -p 5674:5672 -p 15674:15672 --name rabbitmq3 --link rabbitmq1:rabbitmq1 --link rabbitmq2:rabbitmq2 rabbitmq:3-management
把 .erlang.cookie文件调制相同
- 选取一个容器的.erlang.cookie文件复制到主机的/home/rabbitmq/.erlang.cookie下面
docker cp rabbitmq1:/var/lib/rabbitmq/.erlang.cookie /home/rabbitmq/.erlang.cookie
- 将另外两个容器的.erlang.cookie更新
docker cp /home/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
docker cp /home/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
- 重启容器
docker restart rabbitmq1
docker restart rabbitmq2
docker restart rabbitmq3
加入集群
docker exec -it rabbitmq1 /bin/bash
rabbitmq-server -detached
exit
docker exec -it rabbitmq2 /bin/bash
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit
docker exec -it rabbitmq3 /bin/bash
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit
此时加入集群成功
镜像集群
- 命令参数含义
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
#-p Vhost: 可选参数,针对指定vhost下的queue进行设置
#Name: policy的名称
#Pattern: queue的匹配模式(正则表达式)
#Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
# ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
# all:表示在集群中所有的节点上进行镜像
# exactly:表示在指定个数的节点上进行镜像,节点的个#数由ha-params指定
# nodes:表示在指定的节点上进行镜像,节点名称通过ha-#params指定
# ha-params:ha-mode模式需要用到的参数
# ha-sync-mode:进行队列中消息的同步方式,有效值为automatic#和manual
# priority:可选参数,policy的优先级
- 查看当前策略
rabbitmqctl list_policies
- 添加策略
rabbitmqctl set_policy -p /ems myall '^' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#说明:策略名字为myall,虚拟主机/ems,正则表达式为 “^” 表示所有匹配所有队列名称 ^所有队列
成功之后队列为