基于docker安装rabbitmq集群(两台主机)

1.安装docker
2.拉取rabbitmq镜像(以下操作均在普通用户操作)
sudo docker pull rabbitmq:management
3.启动容器
注意事项:
(1).默认端口不对外开放,每个rabbitmq为其指定非默认端口,端口指定后默认是不开启web管理,需要手动开启,具体操作见后面
(2).rabbitmq集群搭建时会有默认的node和RABBITMQ_DIST_PORT,若每台主机上启动多个docker,启动docker时需手动指定
(3).容器集群搭建时每个节点通讯是根据host来判断的,启动容器时可使用–add-host
启动第一个节点

sudo docker run -d --name rabbitmq-e07-01 --hostname rabbitmqE07-01 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq01:/var/lib/rabbitmq -v /data/rabbitmq01/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq01 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management
启动第二个节点

sudo docker run -d --name rabbitmq-e07-02 --hostname rabbitmqE07-02 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq02:/var/lib/rabbitmq -v /data/rabbitmq02/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq02 -e RABBITMQ_DIST_PORT=25673 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management
启动第三个节点

sudo docker run -d --name rabbitmq-e07-03 --hostname rabbitmqE07-03 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq03:/var/lib/rabbitmq -v /data/rabbitmq03/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq03 -e RABBITMQ_DIST_PORT=25674 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management
检查启动情况

5、加入集群
重启第一个节点
sudo docker exec -it rabbitmq-e07-01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

rabbitmqctl cluster_status 查询集群状态
第二个节点加入集群
sudo docker exec -it rabbitmq-e07-02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbitmq01@rabbitmqE07-01
rabbitmqctl start_app

第三个节点加入集群
sudo docker exec -it rabbitmq-e07-03 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbitmq01@rabbitmqE07-01(–ram为内存节点)
rabbitmqctl start_app

第二台主机
启动第一个节点
sudo docker run -d --name rabbitmq-e08-01 --hostname rabbitmqE08-01 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq01:/var/lib/rabbitmq -v /data/rabbitmq01/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq01 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management
启动第二个节点
sudo docker run -d --name rabbitmq-e08-02 --hostname rabbitmqE08-02 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq02:/var/lib/rabbitmq -v /data/rabbitmq02/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq02 -e RABBITMQ_DIST_PORT=25673 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management

启动第三个节点
sudo docker run -d --name rabbitmq-e08-03 --hostname rabbitmqE08-03 --net=host --add-host rabbitmqE08-01:10.66.180.249 --add-host rabbitmqE08-02:10.66.180.249 --add-host rabbitmqE08-03:10.66.180.249 --add-host rabbitmqE07-01:10.30.186.170 --add-host rabbitmqE07-02:10.30.186.170 --add-host rabbitmqE07-03:10.30.186.170 -v /data/rabbitmq03:/var/lib/rabbitmq -v /data/rabbitmq03/rabbitmq:/etc/rabbitmq -e RABBITMQ_NODENAME=rabbitmq03 -e RABBITMQ_DIST_PORT=25674 -e RABBITMQ_ERLANG_COOKIE=‘rabbitcookie’ rabbitmq:management
加入集群方法如上

问题总结:
@rabbitmq是依赖erlang集群的,erlang集群是通过cookie来通讯的,rabbitmq也是通过cookie来通讯的,此值必须保持一致
若不一致,可修改rabbitmq的cookie值,将cookie修改为一致后,重新启动rabbitmq

@2修改默认端口
启动后检查日志,若如果下面的3为0,则需要启动web管理插件

sudo docker exec -it rabbitmq-e07-01 bash
rabbitmq-plugins enable rabbitmq_management --启动web管理插件
@3修改默认端口
进入到容器映射到本机的目录,将如下端口修改为自己想要的端口
cd /data/rabbitmq01/rabbitmq
sudo vi rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
management.listener.port = 15672
management.listener.ssl = false
基于docker安装rabbitmq集群(单台主机)

1.拉取镜像MQ (以下操作均在普通用户下)
sudo docker pull rabbitmq:management
2.启动容器
sudo docker run -d --hostname rabbitmq1 --name rabbitmq01 -v /data/rabbitmq01:/var/lib/rabbitmq -v /data/rabbitmq01/rabbitmq:/etc/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqcookie’ rabbitmq:management

sudo docker run -d --hostname rabbitmq2 --name rabbitmq02 -v /data/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE=‘rabbitmqcookie’ --link rabbitmq01:rabbitmq1 rabbitmq:management
-v 目录映射(目前是写入在本地挂载的/data盘中)

查询启动结果及日志
sudo docker ps
sudo docker logs rabbitmq01
sudo docker logs rabbitmq02

1.容器节点加入集群
sudo docker exec -it rabbitmq01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

docker exec -it rabbitmqCluster02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1:5602(–ram是内存节点)
rabbitmqctl start_app
exit

4369 – erlang发现口

5672 --client端通信口

15672 – 管理界面ui端口

25672 – server间内部通信口

Act Mode
Nack message requeue true
获取消息,但是不做ack应答确认,消息重新入队

Ack message requeue false
获取消息,应答确认,消息不重新入队,将会从队列中删除

reject requeue true
拒绝获取消息,消息重新入队

reject requeue false
拒绝获取消息,消息不重新入队,将会被删除

Encoding
AMQP消息负载可以包含任何的二进制内容,因此他们很难再浏览器中展示,编码的选项含义有如下内容:string/base64,如果消息负载可以使用UTF-8字符串编码,就执行此操作,否则就按照base64编码进行返回。