1.环境准备 :
1.1 安装好的docker
查看 docker 是否安装 :
docker --version
1.2 物理机目录
新建docker 总目录,注意这里将来放一些关于docker的数据目录,名字随便取。
mkdir docker
1.3 拉取 rabbitmq 3.8.5 镜像
docker pull rabbitmq:3.8.5-management
1.4 拉取 haproxy 2.2.0 镜像
docker pull haproxy:2.2.0
2.创建相关文件&文件夹
2.1 创建 rabbitmq总文件目录
rabbitmq该目录是总目录
mkdir -p /docker/rabbitmq
2.2 模板配置文件
虽然是三个节点的配置,但是他们的配置参数较为相近,所有通过模板自动生成配置即可。
vi rabbitmq-cluster.tmpl
https://github.com/rabbitmq/rabbitmq-server/blob/master/docs/rabbitmq.conf.example
# 可以写自己的配置,这里保留
2.3 创建 rabbitmq 三个节点的目录文件
分别创建 rq01 rq02 rq03 三个节点的文件夹,用来存储配置文件、日志文件 、已经数据文件。
for 循环创建 文件夹,文件。
cd /docker/rabbitmq
for number in `seq 1 3`; do \
mkdir -p ./rq0${number}/log \
&& mkdir -p ./rq0${number}/etc \
&& NUM=${number} envsubst < ./rabbitmq-cluster.tmpl > \
./rq0${number}/etc/rabbitmq.conf \
&& mkdir -p ./rq0${number}/lib; \
done
2.4 创建 haproxy 配置文件及目录
2.4.1 创建haproxy 模板文件
vi haproxy-cluster.tmpl
#logging options
global
maxconn 10000 #默认最大连接数
log 127.0.0.1 local0 #[err warning info debug]
chroot /usr/local/sbin #chroot运行的路径
daemon #以后台形式运行haproxy
pidfile /var/run/haproxy.pid #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
defaults
log 127.0.0.1 local3
mode http #所处理的类别 (#7层 http;4层tcp )
maxconn 10000 #最大连接数
option dontlognull #不记录健康检查的日志信息
option redispatch #serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 3 #3次连接失败就认为服务不可用,也可以通过后面设置
balance roundrobin #默认的负载均衡的方式,轮询方式(roundrobin),source类似nginx的ip_hash,leastconn最小连接
timeout connect 5000 #连接超时
timeout client 50000 #客户端超时
timeout server 50000 #服务器超时
#配置haproxy web监控,查看统计信息
listen stats
bind 0.0.0.0:810${NUM}
mode http
option httplog
stats enable
#设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
stats uri /rabbitmq-stats
stats refresh 5s
stats auth admin:admin
#监听8000端口转发到rabbitmq的客户端
listen rabbitmq_admin
bind 0.0.0.0:800${NUM}
server rq01 172.31.0.2:15672 check inter 5000 rise 2 fall 2
server rq02 172.31.0.3:15672 check inter 5000 rise 2 fall 2
server rq03 172.31.0.4:15672 check inter 5000 rise 2 fall 2
listen rabbitmq_cluster
bind 0.0.0.0:5677
#配置TCP模式
mode tcp
#简单的轮询
balance roundrobin
#rabbitmq集群节点配置
server rq01 172.31.0.2:5672 check inter 5000 rise 2 fall 2
server rq02 172.31.0.3:5672 check inter 5000 rise 2 fall 2
server rq03 172.31.0.4:5672 check inter 5000 rise 2 fall 2
2.4.2 生成 haproxy 文件
生成 hy01 hy02 两个文件夹
cd /docker/rabbitmq
for number in `seq 1 2`; do \
mkdir -p ./hy0${number}/etc \
&& NUM=${number-1} envsubst < ./haproxy-cluster.tmpl > \
./hy0${number}/etc/haproxy.cfg; \
done
修改配置
cd /docker/rabbitmq/hy02/etc
vi haproxy.cfg
#把这个端口改下即可
5677=>5678
对应的端口号为 5677 8001 8101 、5678 8002 8102
2.5 文件夹授权
es 文件目录授权
cd /docker
chmod 777 rabbitmq -R
3.编排RabbitMQ节点容器
通常docker集群部署我们都会编写编排脚本,这个相对于单独一个一个run,出错率低且高效。
vi docker-compose.yml
version: '3'
services:
rq01:
image: rabbitmq:3.8.5-management
container_name: rq01
privileged: true
hostname: rq01
environment:
- RABBITMQ_NODENAME=rq01
- RABBITMQ_ERLANG_COOKIE=yanyulou
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
volumes:
- ./rq01/etc:/var/etc/rabbitmq
- ./rq01/lib:/var/lib/rabbitmq
- ./rq01/log:/var/log/rabbitmq
ports:
- 5672:5672
- 15672:15672
restart: always
networks:
rq-net:
ipv4_address: 172.31.0.2
rq02:
image: rabbitmq:3.8.5-management
container_name: rq02
privileged: true
hostname: rq02
environment:
- RABBITMQ_NODENAME=rq02
- RABBITMQ_ERLANG_COOKIE=yanyulou
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
volumes:
- ./rq02/etc:/var/etc/rabbitmq
- ./rq02/lib:/var/lib/rabbitmq
- ./rq02/log:/var/log/rabbitmq
ports:
- 5673:5672
- 15673:15672
restart: always
networks:
rq-net:
ipv4_address: 172.31.0.3
rq03:
image: rabbitmq:3.8.5-management
container_name: rq03
privileged: true
hostname: rq03
environment:
- RABBITMQ_NODENAME=rq03
- RABBITMQ_ERLANG_COOKIE=yanyulou
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
volumes:
- ./rq03/etc:/var/etc/rabbitmq
- ./rq03/lib:/var/lib/rabbitmq
- ./rq03/log:/var/log/rabbitmq
ports:
- 5674:5672
- 15674:15672
restart: always
networks:
rq-net:
ipv4_address: 172.31.0.4
hy01:
image: haproxy:2.2.0
container_name: hy01
privileged: true
ports:
- 8101:8101
- 8001:8001
volumes:
- ./hy01/etc/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
restart: always
links:
- rq01
- rq02
- rq03
networks:
rq-net:
ipv4_address: 172.31.0.5
hy02:
image: haproxy:2.2.0
container_name: hy02
privileged: true
ports:
- 8102:8102
- 8002:8002
volumes:
- ./hy02/etc/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg
restart: always
links:
- rq01
- rq02
- rq03
networks:
rq-net:
ipv4_address: 172.31.0.6
networks:
rq-net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.31.0.1/24
4.启动容器
4.1 启动容器
docker-compose up -d
4.2 启动集群服务
docker exec -it rq01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
docker exec -it rq02 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rq01@rq01
rabbitmqctl start_app
exit
docker exec -it rq03 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rq01@rq01
rabbitmqctl start_app
exit
5.测试登录
5.1 登录haproxy
5.2 登录 rabbitmq
6.其他补充
6.1 安装辅助命令
docker ps -a | grep hy0 | awk '{print $1 }' | xargs docker container stop
docker ps -a | grep hy0 | awk '{print $1 }' | xargs docker container rm
docker ps -a | grep rq0 | awk '{print $1 }' | xargs docker container stop
docker ps -a | grep rq0 | awk '{print $1 }' | xargs docker container rm


rabbitmq

