集群
架构图
MQ集群使用了HAProxy
中间件作为负载均衡工具,HAProxy
是一款高性能4层(tcp
)和7层(Http)
负载均衡工具,支持服务健康检测等强大的特性,拥有丰富的负载策略。
部署MQ集群
先部署MQ服务,根据实际情况可以部署多个实例,每个实例的部署方式基本是一样的,不一样的地方下面会标出。
镜像
端口映射
-
15672
:web管理页面端口 -
5672
:服务端口
环境变量
-
RABBITMQ_DEFAULT_USER
:账号 -
RABBITMQ_DEFAULT_PASS
:密码 -
RABBITMQ_ERLANG_COOKIE
:集群验证Cookie,每个集群节点需要设置成一样的值 -
RABBITMQ_NODENAME
:节点名称
节点配置每台主机不一样,rabbit
前缀是固定值,@
符号后面的是主机名(hostname),主机名配置参考下面的网络配置章节
主机映射
每个MQ服务需要部署在不同的主机上
数据卷
缩放升级策略
网络
网络配置非常重要,首先需要使用主机网络环境,其次主机名需要和环境变量RABBITMQ_NODENAME
@符号后面hostname
保持一致。
主机别名需要设置所有MQ实例的主机名和对应的ip,不然集群内的MQ节点无法找到彼此。当然,通过修改服务器的host文件能够起到同样的效果。
安全及主机设置
集群配置
假如主节点的的nodename
为rabbit@worker89
在其他节点打开命令终端:
依次执行如下命令:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@worker89
rabbitmqctl start_app
然后在任意节点执行如下命令,开启集群镜像模式:
rabbitmqctl set_policy -p / ha-all "^" '{"ha-mode":"all"}'
打开任意的节点的管理端,可以看到集群节点信息:
这样在其中任意一个节点上创建交换机、队列等,都会同步到其他节点上。
负载均衡
当集群创建好后,还需要为集群配置负载均衡,可以采用任意多个HAProxy
服务,示例中使用了2个。
首先在有docker
环境的主机上创建HAProxy
服务的配置文件haproxy.cfg
:
defaults #默认参数
option tcpka
frontend http-manager
bind *:15672
default_backend mq_manager_servers
frontend tcp-mq
bind *:5672
default_backend mq_servers
backend mq_manager_servers #定义mq管理服务
balance roundrobin
server mq-manager-1 10.10.10.89:15672 check
server mq-manager-2 10.10.10.98:15672 check
backend mq_servers #定义mq服务
balance roundrobin
server mq-server-1 10.10.10.89:5672 check
server mq-server-2 10.10.10.98:5672 check
根据集群实际的情况,将mq_manager_servers
和mq_servers
中的服务地址替换成实际的MQ节点。
然后打包镜像,在配置文件所在目录创建Dockerfile
文件
FROM 10.10.10.52:5000/haproxy:2.2
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
打包镜像:
docker build -t 10.10.10.52:5000/haproxy-mq:1.0 .
推送到项目私有云,根据实际的情况替换私有云地址:
docker push 10.10.10.52:5000/haproxy-mq:1.0
部署HAProxy
镜像
端口
-
15672
:web管理页面端口 -
5672
:服务端口
主机调度
保证每个主机部署一个
健康检查
当节点出现故障时,可快速剔除节点。
部署完成后便可以通过15672
和5672
映射出去的端口,测试集群了。
示例
参考datacenter
集群中的MQ
集群项目: