CentOS 7 Docker容器部署两个节点RabbitMQ集群
大约 4 分钟约 1063 字
CentOS 7 Docker容器部署两个节点RabbitMQ集群
在CentOS系统上安装Docker软件环境
# CentOS 7系统设置脚本对系统做统一配置,如果设置SELINUX以及防火墙等等
curl http://download-soft.lead.cn/linux/scripts/centos7_os_basic_config.sh | bash
# 安装Docker软件
curl http://download-soft.lead.cn/linux/scripts/centos7-install-docker.sh | bash
创建跨主机Docker网络
vim /etc/systemd/system/multi-user.target.wants/docker.service
# 在[Service]节中修改一下内容:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock -H fd:// --containerd=/run/containerd/con
tainerd.sock
# 重新加载docker服务
systemctl daemon-reload
systemctl restart docker
在集群中要被选举为manager的docker节点
# 初始化docker swarm并创建跨主机网络mqnet
docker swarm init --advertise-addr 10.30.101.91
[root@mq01 rabbitmq]# docker swarm init --advertise-addr 10.30.101.91
Swarm initialized: current node (q148uia669846yo3wcmtjsz1w) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-1gel2pvusbp94vl9u1ise3e3uprdb089jt445jx5hqi7ufh5jx-b6xui81b8q4b8gdle0poqvl0v 10.30.101.91:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
[root@mq01 rabbitmq]#
向集群中添加worker节点
docker swarm join --token SWMTKN-1-1gel2pvusbp94vl9u1ise3e3uprdb089jt445jx5hqi7ufh5jx-b6xui81b8q4b8gdle0poqvl0v 10.30.101.91:2377
[root@mq02 rabbitmq]# docker swarm join --token SWMTKN-1-1gel2pvusbp94vl9u1ise3e3uprdb089jt445jx5hqi7ufh5jx-b6xui81b8q4b8gdle0poqvl0v 10.30.101.91:2377
This node joined a swarm as a worker.
查看当前集群中的节点信息
# 查看当前主节点上的node信息
[root@mq01 rabbitmq]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
q148uia669846yo3wcmtjsz1w * mq01 Ready Active Leader 20.10.5
k1n9lj0csnuy4qnnjllat2th9 mq02 Ready Active 20.10.5
[root@mq01 rabbitmq]#
创建 overlay 网络,用于跨主机 容器间的通信, 只能在manager节点上创建
# 创建跨主机网络mqnet
docker network create --driver overlay --subnet=10.30.101.0/24 --gateway=10.30.101.1 --attachable mqnet
#说明:
#--driver overlay 网络类型
#--subnet=18.0.0.0/24 子网段
#--gateway=18.0.0.254 设置网关ip
#--attachable 用于swarm 服务和独立容器跟其他 Docker 守护进程中运行的独立容器通信的 overlay 网络
--========================================================
从容器中获取rabbitmq软件包文件到宿主机文件系统
# 创建临时mq容器并将所有plugins相关文件都拷贝到宿主机文件系统中,集群中的每个节点都要操作
docker run -dit --name mq rabbitmq:3.7.16-management
docker cp mq:/opt/rabbitmq/plugins /data/rabbitmq/
docker cp rabbitmq01:/etc/rabbitmq/rabbitmq.conf /data/rabbitmq/
docker stop mq && docker rm -f mq
# 配置hosts文件,所有节点主机名都配置一下
echo "10.30.101.31 rabbitmq01" >> /etc/hosts
echo "10.30.101.32 rabbitmq02" >> /etc/hosts
# 在宿主机上准备容器要用到的hosts文件,必须将集群的每个节点的地址和主机名信息写入hosts文件中
cat >> /data/rabbitmq/hosts <<EOF
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.30.101.31 rabbitmq01
10.30.101.32 rabbitmq02
EOF
创建主节点容器
# 在集群的一个物理服务器上创建RabbitMQ的主节点容器
docker run -dit \
-m 6144M --memory-swap -1 \
--net mqnet \
--ip 10.30.101.31 \
--privileged=true \
--name=rabbitmq01 \
--hostname=rabbitmq01 \
-p 5672:5672 \
-p 15672:15672 \
-v /data/rabbitmq/:/var/lib/rabbitmq/ \
-v /data/rabbitmq/plugins/:/opt/rabbitmq/plugins/ \
-v /data/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /etc/localtime:/etc/localtime \
-v /data/rabbitmq/hosts:/etc/hosts \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_123456' \
rabbitmq:3.7.16-management
创建从节点容器
docker run -dit \
-m 6144M --memory-swap -1 \
--net mqnet \
--ip 10.30.101.32 \
--privileged=true \
--name=rabbitmq02 \
--hostname=rabbitmq02 \
-p 5672:5672 \
-p 15672:15672 \
-v /data/rabbitmq/:/var/lib/rabbitmq \
-v /data/rabbitmq/plugins/:/opt/rabbitmq/plugins \
-v /data/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
-v /etc/localtime:/etc/localtime \
-v /data/rabbitmq/hosts:/etc/hosts \
-e TZ='Asia/Shanghai' \
-e LANG="en_US.UTF-8" \
-e RABBITMQ_ERLANG_COOKIE='rabbitmq_cookie_123456' \
--link rabbitmq01:rabbitmq01 \
rabbitmq:3.7.16-management
# 命令选项比较多
RabbitMQ 主节点初始化
[root@mq01 rabbitmq]# cat hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.30.101.31 rabbitmq01
10.30.101.32 rabbitmq02
[root@mq01 rabbitmq]# docker exec -it rabbitmq01 bash
root@rabbitmq01:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq01 ...
root@rabbitmq01:/# rabbitmqctl reset
Resetting node rabbit@rabbitmq01 ...
root@rabbitmq01:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq01 ...
completed with 3 plugins.
root@rabbitmq01:/# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@rabbitmq01:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitmq01...
Plugin configuration unchanged.
root@rabbitmq01:/# exit
exit
[root@mq01 rabbitmq]#
RabbitMQ从节点初始化及加入集群操作
[root@mq02 rabbitmq]# docker exec -it rabbitmq02 bash
root@rabbitmq02:/#
root@rabbitmq02:/#
root@rabbitmq02:/# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.30.101.31 rabbitmq01
10.30.101.32 rabbitmq02
root@rabbitmq02:/#
root@rabbitmq02:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq02 ...
root@rabbitmq02:/# rabbitmqctl reset
Resetting node rabbit@rabbitmq02 ...
# 参数“--ram”表示设置为内存节点,忽略次参数默认为磁盘节点。
root@rabbitmq02:/# rabbitmqctl join_cluster rabbit@rabbitmq01
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
root@rabbitmq02:/# rabbitmq-plugins enable rabbitmq_management
Enabling plugins on node rabbit@rabbitmq02:
rabbitmq_management
The following plugins have been configured:
rabbitmq_management
rabbitmq_management_agent
rabbitmq_web_dispatch
Applying plugin configuration to rabbit@rabbitmq02...
Plugin configuration unchanged.
root@rabbitmq02:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq02 ...
completed with 3 plugins.
root@rabbitmq02:/# exit
exit
[root@mq02 rabbitmq]#
登录主节点上设置镜像策略
# 配置镜像集群策略
root@rabbitmq01:/#
root@rabbitmq01:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
root@rabbitmq01:/#