RabbitMQ 集群与高可用配置

集群概述

通过 Erlang 的分布式特性(通过 magic cookie 认证节点)进行 RabbitMQ 集群,各 RabbitMQ 服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。

  这些节点通过 RabbitMQ HA 队列(镜像队列)进行消息队列结构复制。本方案中搭建 3 个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ 集群对外就能提供服务。

环境

· CentOS 6.864位

· Erlang  otp_src_20.0

· RabbitMQ  3.6.10

· HAProxy   11.5.18

 

RabbitMQ 集群安装在 2个节点上:192.168.185.88192.168.185.89

HAProxy 安装在 192.168.185.72 上,用于对外提供 RabbitMQ 均衡。

 

所需安装包下载

配置步骤

1. 安装 erlang、rabbitmq

192.168.185.88、192.168.185.89两个节点上安装erlang和rabbitmq安装方法见文档<<Centos 6.8安装erlang&rabbitmq的方法>>

然后开启 RabbitMQ 监控插件:

rabbitmq-plugins enable rabbitmq_management

2. 修改 /etc/hosts

加入集群 3 个节点的描述:

192.168.185.72 RabbitMQ_185-72

192.168.185.88 RabbitMQ_185-88

192.168.185.89 RabbitMQ_185-89

 

3. 设置 Erlang Cookie

Erlang Cookie 文件:$HOME/.erlang.cookie。这里将 RabbitMQ_185-88 的该文件复制到 RabbitMQ_185-89,由于这个文件权限是 400,所以需要先修改 node2、node3 中的该文件权限为 777:

# chmod 777 $HOME/.erlang.cookie

然后将 node1 中的该文件拷贝到 node2、node3,最后将权限和所属用户/组修改回来:

# chmod 400 $HOME/.erlang.cookie

# chown rabbitmq $HOME/.erlang.cookie

# chgrp rabbitmq $HOME/.erlang.cookie

 

4. 使用 -detached 参数运行各节点

# rabbitmqctl stop

# rabbitmq-server -detached &

 

5. 组成集群

RabbitMQ_185-89  RabbitMQ_185-88 组成集群:

 

RabbitMQ_185-89 # rabbitmqctl stop_app

RabbitMQ_185-89 # rabbitmqctl join_cluster rabbit@node1

RabbitMQ_185-89 # rabbitmqctl start_app

 

此时 RabbitMQ_185-89  RabbitMQ_185-88 也会自动建立连接;如果要使用内存节点,则可以使用

RabbitMQ_185-89 # rabbitmqctl join_cluster --ram rabbit@node1 加入集群。

 

集群配置好后,可以在 RabbitMQ 任意节点上执行

# rabbitmqctl cluster_status

来查看是否集群配置成功。

 wKiom1mCzITRdu4IAAAt5KRrKlY568.png-wh_50

6. 设置镜像队列策略

在任意一个节点上执行:

# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。

 

完成这 6 个步骤后,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器。

 

7. 安装并配置 HAProxy

192.168.185.72 上安装 HAProxy,然后修改 /etc/haproxy/haproxy.cfg:

 

###########################rabbitmq代理配置###########################

listen haproxy_rabbitmq_cluster

mode http

bind 0.0.0.0:5672 #该端口为客户端使用的端口

balance roundrobin

server RabbitMQ_185-88 192.168.185.88:5672 check inter 5000 rise 2 fall 3

server RabbitMQ_185-89 192.168.185.89:5672 check inter 5000 rise 2 fall 3

########################### #rabbitmq web代理配置######################

listen haproxy_rabbitmq_cluster_web

mode http

bind 0.0.0.0:15672 #该端口为客户端使用的端口

balance roundrobin

server RabbitMQ_185-88 192.168.185.88:15672 check inter 5000 rise 2 fall 3

server RabbitMQ_185-89 192.168.185.89:15672 check inter 5000 rise 2 fall 3

---- EOF ----

附件:haproxy.Conf

global

log 127.0.0.1 local0

maxconn 4096 #最大连接数

stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin

daemon #后台运行haproxy

nbproc 1 #启动1个haproxy实例

pidfile /etc/haproxy/haproxy.pid #将所有进程PID写入pid文件

 

defaults #默认设置

#log global

log 127.0.0.1 local3 #日志文件的输出定向

 

#默认的模式:tcp|http|health

mode tcp #所处理的类别,默认采用http模式

option tcplog #日志类别,采用http日志格式`

option dontlognull

retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查

option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器

option abortonclose #当服务器负载很高时,自动结束掉当前队列中处理比较久的链接

maxconn 2000 #默认最大连接数

timeout connect 5000 #连接超时时间

timeout client 50000 #客户端连接超时时间

timeout server 50000 #服务器端连接超时时间

 

# Haproxy统计页面

listen haproxy_stats

bind 0.0.0.0:8100 #侦听IP:Port

mode http

log 127.0.0.1 local0 info #err|warning|info|debug]

stats refresh 5s

stats uri /haproxy-stats

stats realm Haproxy\ Statistics

stats auth admin:admin

stats hide-version

stats admin if TRUE #手工启用/禁用后端服务器

###############################rabbitmq代理配置##############

listen haproxy_rabbitmq_cluster #rabbitmq代理配置

mode http

bind 0.0.0.0:5672 #该端口为客户端使用的端口

balance roundrobin

server RabbitMQ_185-88 192.168.185.88:5672 check inter 5000 rise 2 fall 3

server RabbitMQ_185-89 192.168.185.89:5672 check inter 5000 rise 2 fall 3

###############################rabbitmq web代理配置##############

listen haproxy_rabbitmq_cluster_web #rabbitmq web代理配置

 

mode http

bind 0.0.0.0:15672 #该端口为客户端使用的端口

balance roundrobin

server RabbitMQ_185-88 192.168.185.88:15672 check inter 5000 rise 2 fall 3

server RabbitMQ_185-89 192.168.185.89:15672 check inter 5000 rise 2 fall 3

端口测试:

wKiom1mCzFrz7xHXAAAUvX7waII803.png-wh_50 

访问页面

RabbitMQ 集群与高可用配置_第1张图片