本文为多宿主搭建,单机搭建可参考下方文章
https://www.cnblogs.com/CaesarLinsa/p/11037613.html
坑很多,配置要求比较严苛,请注意
多物理机搭建最大的问题是,默认bridge网络模式下docker容器使用的是bridge按照DHCP协议动态分配的子网IP,容器是虚拟网络容器,相对于外部网络是隔离的,所以无法通过hosts解析到外部IP,也无从连接其他mq节点
多宿主集群当前已知的搭建模式有:
① host的网络模式(- -net host)
② 插件(Calico flannel weave Docker Overlay)
③ overlay的网络模式
④ 内网DNS服务器提供域名解析
这里提供host网络模式的集群搭建,以两台物理机为例,网络环境为内网
172.16.22.72 (主机)
172.16.22.59 (备机)
172.16.22.240(VIP)
(零)、架构图
(一)、创建MQ容器
两种方法均可,均为增加hosts映射关系进行节点寻址,最终产出相同。建议采用方法一 ,后续节点扩增更灵活
- 方法一
1.创建hosts
两台机器都创建/opt/rabbitmq
目录,然后在rabbitmq目录下创建hosts文件
mkdir /opt/rabbitmq
cd /opt/rabbitmq
vi hosts
#ip 真实主机hostname(如果主机名为localhost会有一点问题,建议更改)
172.16.22.72 support
172.16.22.59 hr02
2.运行容器
当docker发现本地没有 rabbitmq:management
的镜像时会主动从仓库拉取,management
为带有管理页面的版本
#172.16.22.72
docker run -d --net host --name rabbit1 -v /opt/rabbitmq:/var/lib/rabbitmq:z -v /opt/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_COOKIE='RABBITMQ' rabbitmq:management
#172.16.22.59
docker run -d --net host --name rabbit2 -v /opt/rabbitmq:/var/lib/rabbitmq:z -v /opt/rabbitmq/hosts:/etc/hosts -e RABBITMQ_ERLANG_COOKIE='RABBITMQ' rabbitmq:management
- 方法二
#172.16.22.72
docker run -d --net host --name rabbit1 --add-host=support:172.16.22.72 --add-host=hr02:172.16.22.59 -e RABBITMQ_ERLANG_COOKIE='RABBITMQ' rabbitmq:management
#172.16.22.59
docker run -d --net host --name rabbit2 --add-host=support:172.16.22.72 --add-host=hr02:172.16.22.59 -e RABBITMQ_ERLANG_COOKIE='RABBITMQ' rabbitmq:management
【可选】
如果要将文件映射到宿主机方便以后迁移备份,可以添加文件映射命令如下。要注意,添加映射后不会开启管理页面的插件,需要进入容器手动启用插件,原因尚未探寻#etc存放配置,lib存放数据库,log存放日志 -v /home/rabbitmq/etc/rabbitmq:/etc/rabbitmq -v /home/rabbitmq/lib/rabbitmq:/var/lib/rabbitmq ->v /home/rabbitmq/log/rabbitmq:/var/log/rabbitmq
开启插件
docker exec -it rabbit1 /bin/bash rabbitmq-plugins enable rabbitmq_management
【解释】
#采用host的网络模式 --net host #容器命名为rabbit1 --name rabbit1 #将宿主机的/opt/rabbitmq目录映射到容器中的/var/lib/rabbitmq目录, #z是一个标记,在selinux环境下使用 -v /opt/rabbitmq:/var/lib/rabbitmq:z #设置env 环境变量。这里的cookie可以为任意值,所有节点保持一致即可 -e RABBITMQ_ERLANG_COOKIE='RABBITMQ' #增加host --add-host=support:172.16.22.72
(二)、搭建集群
将除了第一个节点外的其他节点加入第一个节点,每个节点都执行如下命令。加入节点时,
加上--ram
命令则为创建内存节点,不加为硬盘节点