基于docker容器的rabbitmq镜像集群部署流程
本集群采用Haproxy负载均衡方案
一 、拉取镜像,创建容器并启动
在98服务器上面使用rabbitmq:3.7-management镜像安装rabbitmq,
创建三个rabbitmq容器并运行。
1.1 执行容器rabbitmq01命令
docker run -d --hostname rabbitmq01 --name gd_mq_rabbitmq_1 -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7-management
1.2 执行容器rabbitmq02命令
docker run -d --hostname rabbitmq02 --name gd_mq_rabbitmq_2 -p 15674:15672 -p 5674:5672 --link gd_mq_rabbitmq_1:rabbitmq01 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7-management
1.3 执行容器rabbitmq03命令
docker run -d --hostname rabbitmq03 --name gd_mq_rabbitmq_3 -p 15675:15672 -p 5675:5672 --link gd_mq_rabbitmq_1:rabbitmq01 --link gd_mq_rabbitmq_2:rabbitmq02 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7-management
二、 查看容器启动状态
启动容器后,访问
http://192.168.163.98:15673
http://192.168.163.98:15674
http://192.168.163.98:15675 查看单个容器是否启动成功。
账号/密码:guest / guest。
三、 配置rabbitMQ集群
3.1 进入第一个rabbitmq节点容器:
docker exec -it gd_mq_rabbitmq_1 bash
进入容器后,操作rabbitmq,执行如下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit
3.2 进入第二个rabbitmq节点容器
docker exec -it gd_mq_rabbitmq_2 bash
执行如下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
3.3 进入第三个rabbitmq节点容器
docker exec -it gd_mq_rabbitmq_3 bash
执行如下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit
四、 实现镜像模式集群
4.1 设置镜像队列策略
进入容器
docker exec -it rabbitmqCluster01 bash
执行如下命令(该命令可以在任意一个节点执行):
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
说明:
在cluster中任意节点启用策略,策略会自动同步到集群节点
rabbitmqctl set_policy ha-all "^" ‘{“ha-mode”:“all”}’
策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示匹配所有队列名称。
4.2 创建haproxy镜像和容器
4.1.1 HaProxy简介:
HaProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HaProxy特别适用于负载特大的web站点,这些站点通常又需要会话保持或七层处理。HaProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以简单安全整合进您当前框架中,同时可以保护你的web服务器不被暴露到网络上
4.1.2 拉取haproxy镜像
docker pull haproxy
4.1.3 创建haproxy.cfg文件
创建/home/haproxy/haproxy.cfg文件
内容如下:
#logging options
global
log 127.0.0.1 local0 info
maxconn 5120
chroot /usr/local/etc/haproxy
uid 99
gid 99
daemon
quiet
nbproc 20
pidfile /var/run/haproxy.pid
defaults
log global
#使用4层代理模式,”mode http”为7层代理模式
mode tcp
#if you set mode to tcp,then you nust change tcplog into httplog
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 2000
timeout connect 5s
#客户端空闲超时时间为 60秒 则HA 发起重连机制
timeout client 60s
#服务器端链接超时时间为 15秒 则HA 发起重连机制
timeout server 15s
#front-end IP for consumers and producters
#集群监听端口
listen rabbitmq_cluster
bind 0.0.0.0:5677
#配置TCP模式
mode tcp
#balance url_param userid
#balance url_param session_id check_post 64
#balance hdr(User-Agent)
#balance hdr(host)
#balance hdr(Host) use_domain_only
#balance rdp-cookie
#balance leastconn
#balance source //ip
#简单的轮询
balance roundrobin
#rabbitmq集群节点配置
#inter 每隔五秒对mq集群做健康检查, 2次正确证明服务器可用,2次失败证明服务器不可用,并且配置主备机制
server gd_mq_rabbitmq_1 192.168.163.98:5673 check inter 5000 rise 2 fall 2
server gd_mq_rabbitmq_2 192.168.163.98:5674 check inter 5000 rise 2 fall 2
server gd_mq_rabbitmq_3 192.168.163.98:5675 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
bind 0.0.0.0:8100
mode http
option httplog
stats enable
#设置haproxy监控地址为http://192.168.163.98:8100/rabbitmq-stats
stats uri /rabbitmq-stats
stats refresh 5s
stats auth admin:123456
listen rabbitmq_admin #监听8000端口转发到rabbitmq的客户端
bind 0.0.0.0:8000
server gd_mq_rabbitmq_1 192.168.163.98:15673 check inter 5000 rise 2 fall 2
server gd_mq_rabbitmq_2 192.168.163.98:15674 check inter 5000 rise 2 fall 2
server gd_mq_rabbitmq_3 192.168.163.98:15675 check inter 5000 rise 2 fall 2
4.1.4 创建并启动容器:
执行如下命令:
docker run --name rabbitmq-haproxy -p 5677:5677 -p 8100:8100 -p 8000:8000 -v /home/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro haproxy:latest
4.1.5 监控集群
Haproxy监控地址:http://192.168.163.98:8100/rabbitmq-stats
用户名:admin
密码:123456
Rabbitmq集群连接地址:192.168.163.98 端口:5677