docker搭建rabbitmq集群

#1. 环境准备
#####1.1 Docker主机规划
Docker主机 IP地址

docker2.onlymin.com	172.18.1.152
docker3.onlymin.com	172.18.1.153
docker4.onlymin.com	172.18.1.154

#####1.2 RabbitMQ容器规划
容器-name :在宿主机上运行“docker ps”命令时显示的名称。

容器-hostname:容器内部的hostname。

容器-name 容器-hostname 容器宿主机 映射端口

rabbit2	rabbit2.onlymin.com	docker2.onlymin.com	4369、5671、5672、15671、15672、25672
rabbit3	rabbit3.onlymin.com	docker3.onlymin.com	4369、5671、5672、15671、15672、25672
rabbit4	rabbit4.onlymin.com	docker4.onlymin.com	4369、5671、5672、15671、15672、25672

#####1.3 DNS服务器设置
rabbitmq集群建立需要解析主机名,因此需要一台内网DNS,存在以下记录(或者修改容器的hosts文件)

172.18.1.152 rabbit2.onlymin.com rabbit2
172.18.1.153 rabbit3.onlymin.com rabbit3
172.18.1.154 rabbit4.onlymin.com rabbit4

#####1.4 持久数据目录
建立目录用于存储rabbitmq容器数据

mkdir /data/rabbitmq
chmod 775 -R /data/rabbitmq

#2. 创建容器
#####2.1 在docker主机上创建容器rabbit2

docker run -d --hostname rabbit2.onlymin.com                       \
--add-host="rabbit2.onlymin.com rabbit2":172.18.1.152 \
--add-host="rabbit3.onlymin.com rabbit3":172.18.1.153 \
--add-host="rabbit4.onlymin.com rabbit4":172.18.1.154 \
--name rabbit2 \           
--log-opt max-size=10m \            
--log-opt max-file=3 \           
-p "4369:4369" \            
-p "5671:5671" \           
-p "5672:5672" \            
-p "15671:15671" \            
-p "15672:15672" \            
-p "25672:25672" \           
 -v /data/rabbitmq:/var/lib/rabbitmq:z \            
-e RABBITMQ_DEFAULT_USER=user01 \            
-e RABBITMQ_DEFAULT_PASS=password01 \            
-e RABBITMQ_ERLANG_COOKIE='secret cookie here' \            
reg.onlymin.com/public/rabbitmq:3.6.15-management

参数说明

-d
容器后台运行
--hostname rabbit2.onlymin.com
容器的主机名为 rabbit2.onlymin.com,容器内部的hostname
--add-host="rabbit2.onlymin.com rabbit2":172.18.1.152 \
--add-host="rabbit3.onlymin.com rabbit3":172.18.1.153 \
--add-host="rabbit4.onlymin.com rabbit4":172.18.1.154 \
修改容器内部的hosts,没有dns服务器的话就这么改
--name rabbit2
容器名为rabbit2,在宿主机上运行“docker ps”命令时显示的名称
--log-opt max-size=10m
日志文件单个最大10M
--log-opt max-file=3
日志文件最多保留3个
-p "4369:4369"
映射宿主机端口4369到容器端口4369,主机端口在前
-p "5671:5671"
略
-p "5672:5672"
略
-p "15671:15671"
略
-p "15672:15672"
略
-p "25672:25672"
略
-v /data/rabbitmq:/var/lib/rabbitmq:z
将宿主机目录/data/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用。
-e RABBITMQ_DEFAULT_USER=user01
设置rabbitmq默认用户为user01
-e RABBITMQ_DEFAULT_PASS=password01
设置rabbitmq默认密码为password01
-e RABBITMQ_ERLANG_COOKIE='secret cookie here'
设置rabbitmq的cookie为“secret cookie here”,可以自定义为其他文本,三个容器保持一致即可。
reg.onlymin.com/public/rabbitmq:3.6.15-management
使用reg.onlymin.com/public/rabbitmq:3.6.15-management这个镜像

#####2.2 在docker主机上创建容器rabbit3

docker run -d --hostname rabbit3.onlymin.com                       \
--add-host="rabbit2.onlymin.com rabbit2":172.18.1.152 \
--add-host="rabbit3.onlymin.com rabbit3":172.18.1.153 \
--add-host="rabbit4.onlymin.com rabbit4":172.18.1.154 \
--name rabbit3 \            
--log-opt max-size=10m \           
--log-opt max-file=3 \            
-p "4369:4369" \            
-p "5671:5671" \            
-p "5672:5672" \            
-p "15671:15671" \            
-p "15672:15672" \            
-p "25672:25672" \            
-v /data/rabbitmq:/var/lib/rabbitmq:z \            
-e RABBITMQ_DEFAULT_USER=user01 \            
-e RABBITMQ_DEFAULT_PASS=password01 \           
-e RABBITMQ_ERLANG_COOKIE='secret cookie here' \           
reg.onlymin.com/public/rabbitmq:3.6.15-management

#####2.3 在docker主机上创建容器rabbit4

docker run -d --hostname rabbit4.onlymin.com                       \
--add-host="rabbit2.onlymin.com rabbit2":172.18.1.152 \
--add-host="rabbit3.onlymin.com rabbit3":172.18.1.153 \
--add-host="rabbit4.onlymin.com rabbit4":172.18.1.154 \
--name rabbit4 \            
--log-opt max-size=10m \            
--log-opt max-file=3 \            
-p "4369:4369" \            
-p "5671:5671" \            
-p "5672:5672" \            
-p "15671:15671" \            
-p "15672:15672" \            
-p "25672:25672" \            
-v /data/rabbitmq:/var/lib/rabbitmq:z \            
-e RABBITMQ_DEFAULT_USER=user01 \            
-e RABBITMQ_DEFAULT_PASS=password01 \            
-e RABBITMQ_ERLANG_COOKIE='secret cookie here' \            
reg.onlymin.com/public/rabbitmq:3.6.15-management

#3. 创建集群
#####3.1 进入容器
通过docker exec以交互式的方式执行容器里的/bin/bash,进入容器的rabbit37的shell。

docker exec -it rabbit37 /bin/bash

#####3.2 设置管理员
在容器里执行命令,将用户user01设置为管理员

rabbitmqctl set_user_tags user01 administrator

3.3 节点加入集群
首先以docker exec命令进入容器的命令行,

docker exec -it rabbit3 /bin/bash

以磁盘节点方式加入,@后为主机名,不含域名。

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbit2
rabbitmqctl start_app

以内存节点方式加入

rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit2
rabbitmqctl start_app
  1. 故障节点的处理
    进入容器,将要移除的故障节点停机.
docker exec -it rabbit2 /bin/bash
rabbitmqctl stop

在一个正常的节点上进行节点的移除.

rabbitmqctl  -n rabbit@rabbit3 forget_cluster_node rabbit@rabbit2

查看集群状态信息.

rabbitmqctl cluster_status

你可能感兴趣的:(docker,rabbitmq)