- 自定义网卡(节点之间能够网络互通)
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mqnet
- 获取rabbitmq镜像
docker pull rabbitmq:management
- 采用自定义网卡创建并运行容器
docker run -d --name myrabbit1 -p 15673:15672 -p 5673:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --net mqnet rabbitmq:management
docker run -d --name myrabbit2 -p 15674:15672 -p 5674:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --net mqnet rabbitmq:management
docker run -d --name myrabbit3 -p 15675:15672 -p 5675:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --net mqnet rabbitmq:management
- 保持三个容器的.erlang.cookie相同
a. 查看myrabbit1 的.erlang.cookie文件位置(其中home dir就是.erlang.cookie的路径:/var/lib/rabbitmq/.erlang.cookie)
docker logs myrabbit1
 b. 将.erlang.cookie拷贝到宿主机 容器复制文件到物理机:docker cp 容器名称:容器目录 物理机目录
c. 查看myrabbit2 容器的.erlang.cookie文件位置 d. 将myrabbit2 容器的.erlang.cookie文件替换成myrabbit1 容器的.erlang.cookie 物理机复制文件到容器:docker cp 物理机目录 容器名称:容器目录 e. myrabbit3 容器的.erlang.cookie文件替换成myrabbit1 容器的.erlang.cookie
- 停止三个容器(这一步很重要,.erlang.cookie重新配置后需要重启,重新加载才生效,但不能用docker restart命令)
docker stop myrabbit1
docker stop myrabbit2
dcoker stop myrabbit3
- 启动三个容器
docker start myrabbit1
docker start myrabbit2
dcoker start myrabbit3
- 加入rabbitmq到集群(一主儿从)
设置节点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@'server node'
rabbitmqctl start_app
exit
参数“–ram”表示设置为内存节点,忽略次参数默认为磁盘节点。 其中server node指节点1的账号  设置节点3
docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@'server node'
rabbitmqctl start_app
exit
其中server node指节点1的账号
- 登陆后可以看到

Erlang Cookie值必须相同,也就是RABBITMQ_ERLANG_COOKIE参数的值必须相同
有些特殊的情况,比如已经运行了一段时间的几个单个物理机,我们在之前没有设置过相同的Erlang Cookie值,现在我们要把单个的物理机部署成集群,实现我们需要同步Erlang的Cookie值。
因为RabbitMQ是用Erlang实现的,Erlang Cookie相当于不同节点之间相互通讯的秘钥,Erlang节点通过交换Erlang Cookie获得认证。
|