快速搭建rabbitmq高可用集群
RabbitMQ 高可用集群架构

将两个 RabbitMQ 磁盘节点和一个 RabbitMQ 内存节点组成一个内建集群,之所以要用两个磁盘节点是防止,唯一的磁盘节点挂掉后,不能重建队列,交换器。用 HAProxy 作为 RabbitMQ 集群的负载均衡。为了防止 HAProxy 单点故障,用 Keepalived 将两个 HAProxy 节点做成一主一备。应用使用 VIP(虚拟IP) 访问 HAProxy 服务时,默认连接主机(Master)的 HAProxy,当主机(Master)上的 HAProxy 故障时,VIP 会漂移到备机(Backup)上,就会连接备机(Backup)上的 HAProxy 服务。
服务器规划
角色
数量
ip地址
RabbitMQ Disc Node
2
192.168.125.26,192.168.125.190
RabbitMQ RAM Node
1
192.168.125.176
HAProxy
2
192.168.125.222,192.168.125.168
虚拟ip
1
192.168.125.245
准备工作
安装Docker和Docker Compose
安装配置Docker
使用官方脚本安装 Docker
加载br_netfilter
设置下系统内核参数
:warning: 慎用
sysctl --system命令,如果参数在不同文件中设置,会有优先级问题,目前看来/etc/sysctl.conf的优先级最高配置docker镜像站
启动docker服务
安装配置Docker Compose
二进制方式 安装Docker Compose
配置bash补全命令
如果网络不可达,可先下载到本地,然后上传到内网ftp服务器上,进行下载,以下是笔者自己的内网ftp下载地址
下载rabbitmq和haproxy镜像
下载镜像
部署rabbitmq集群
部署192.168.125.26节点
192.168.125.26节点创建目录
查看服务编排文件clay-rabbitmq-node1.yaml
部署
:warning: 三个节点 RABBITMQ_ERLANG_COOKIE 保持一致。一定要有 extra_hosts 配置,否则在搭建集群的过程中会连接不到其他 rabbitmq 节点服务。此节点
作为集群根节点。
部署192.168.125.190节点
192.168.125.190节点创建目录
编写rabbitmq.sh启动脚本(磁盘节点)
查看服务编排文件clay-rabbitmq-node2.yaml
部署
节点启动完成后,通过命令进入rabbitmq2节点的容器中,执行/home/rabbitmq.sh脚本
部署192.168.125.176节点
192.168.125.176节点创建目录
编写rabbitmq-ram.sh启动脚本(内存节点)
查看服务编排文件clay-rabbitmq-node3.yaml
部署
在启动rabbitmq3节点,启动后,进入容器内部,执行 /home/rabbitmq-ram.sh 脚本添加内存节点到集群中
在容器内部使用rabbitmqctl cluster_status命令查看集群状态,以下是输出
也可以通过 http://192.168.125.26:15672/ 进入管理端查看集群状态

HaProxy 负载均衡
在192.168.125.222,192.168.125.168两个节点同时操作
创建目录
查看服务编排文件clay-haproxy.yaml
重点是设置 extra_hosts(rabbitmq 集群节点 ip) 和 volumes(使用自定义的配置文件)
haproxy 配置文件内容:
部署
登录 HAProxy 的管理端查看集群状态:http://192.168.125.222:8100/

使用 Keepalived 给 HAProxy 做主备
在192.168.125.222,192.168.125.168两个节点安装keepalived
Master 节点配置:
eth0是网卡名,ifconfig 命令查看服务器网卡,找到和本机服务 ip 对应的网卡,virtual_router_id 的值要和 backup 节点上的配置保持一致。
killall -0 haproxy 命令的意思是,如果 haproxy 服务存在执行该命令,什么都不会发生,如果服务不存在,执行该命令会报找不到进程 haproxy: no process found。
master 节点的 priority 在减去 weight 后要比 backup 节点的 priority 低才行,否则主备切换不成功。
Backup节点配置:
创建完配置,启动 keepalived。
测试 Keepalived
在 Master,Backup 节点上,使用 ip addr 命令看下 vip 在哪台机器的 eth0 网卡上。
默认在 master 主机上,停掉 master 主机的 haproxy 服务,然后在用 ip addr 查看虚拟 ip 在哪个机器上,如果漂移到备份主机上则代表热备生效。
在开启 master 主机的 haproxy 服务,ip addr 查看虚拟 ip 应该重新漂移回 master 主机上。
测试服务,使用虚拟 ip 加服务端口号访问 HAProxy 服务。
至此,高可用的 rabbitmq 集群 和 haproxy 软负载就搭建完成。
Last updated
Was this helpful?