您的位置:首页 > 运维架构 > 网站架构

RabbitMQ集群与高可用部署

2017-11-22 13:48 459 查看
部署环境
系统环境
172.16.10.10 计算机名:node1.rabbitmq
172.16.10.11 计算机名:node2.rabbitmq
172.16.10.12 计算机名:node3.rabbitmq
所有服务器操作系统为:CentOS Linux release 7.3.1611 (Core)
hosts文件如下:
172.16.10.10 node1.rabbitmq node1
172.16.10.11 node2.rabbitmq node2
172.16.10.12 node3.rabbitmq node3

软件环境
rabbitmq部署方法:yum -y install rabbitmq-server
rabbitmq安装版本:rabbitmq-server-3.3.5-34.el7.noarch

注意:
部署集群要求所有节点的rabbitmq-server版本需要相同,如果是源码安装的话还要求rabbitmq-server所依赖的软件环境也要相同
集群方案
因我们要实现集群高可用的功能,所以我们采用镜像模式,此模式下有任何一台服务器宕机不会影响正常的生产和消费,但集群内部的通讯会占用较大的带宽
部署集群
在部署集群开始前我们还需要再次确保服务器和软件环境正确,接下来按下面步骤部署镜像集群
将node1节点的/var/lib/rabbitmq/.erlang.cookie复制到其它集群节点,因为各集群节点之间通讯必须共享相同的erlang cookie,这就是rabbitmq底层的工作原理。
systemctl start rabbitmq-server

scp /var/lib/rabbitmq/.erlang.cookie 172.16.10.11:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie 172.16.10.12:/var/lib/rabbitmq/
注意:此文件是在rabbitmq-server服务第一次启动是才会生成的,并且些文件的权限为400,属主和属组为rabbitmq。所以我们需要在node1上面启动一次rabbitmq-server服务,再执行复制

将node2和node3节点启动,分别在node2和node3执行下面的命令
chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
systemctl start rabbitmq-server

将node2和node3加入到集群环境,分别在node2和node3执行下面命令
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app

验证集群配置,在集群中任意一个node上面执行下在命令,查看到的结果一样
rabbitmqctl cluster_status(结果如下图所示)




在所有节点启用rabbitmq_management插件,在所有节点执行以下命令
rabbitmq-plugins enable rabbitmq_management
systemctl restart rabbitmq-server
将服务加入开机自启动
systemctl enable rabbitmq-server

最后在任何一节点执行以下命令rabbitmqctl set_policy -p nirvana-device ha-all "^\.*" '{"ha-mode":"all"}'配置指定虚拟主机的所有队列为镜像模式,-p指定虚拟主机,不指定默认为 / 这样配置后我们将会有两个镜像节点,只要保障有一台rabbitmq正常工作那么集群就可以提供服务
配置HAProxy+Keepalived
为了实现我们的RabbitMQ集群高可用,我们需要在前端加一个HAProxy来代理RabbitMQ访问,另外防止HAProxy单节点故障,所以我们使用HAProxy+Keepalived+RabbitMQ的方案来实现整套集群环境

安装HAPoryx和Keepalived
因测试环境服务器有限,我们将HAProxy和Keepalived部署在node1和node2上面,并使用172.16.10.100为VIP,在node1和node2上面行以下命令安装
yum install haproxy keepalived
Node1的Keepalived配置
! Configuration File for keepalived

global_defs {
router_id node1
}

vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 20
}

vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy
}
virtual_ipaddress {
172.16.10.100/24
}
}
Node2的Keepalived配置
! Configuration File for keepalived

global_defs {
router_id node2
}

vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh"
interval 2
weight 20
}

vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_haproxy
}
virtual_ipaddress {
172.16.10.100/24
}
}
haproxy_check.sh脚本配置
#!/bin/bash

A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
sleep 2
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
pkill keepalived
fi
fi
注意:此脚本需要有执行权限
chmod 755 /etc/keepalived/haproxy_check.sh
HAPorxy配置文件(Node1和Node2相同)
global
log         127.0.0.1 local2

chroot      /var/lib/haproxy
pidfile     /var/run/haproxy.pid
maxconn     4000
user        haproxy
group       haproxy
daemon

stats socket /var/lib/haproxy/stats

defaults
mode                    http
log                     global
option                  httplog
option                  dontlognull
option http-server-close
option forwardfor       except 127.0.0.0/8
option                  redispatch
retries                 3
timeout http-request    10s
timeout queue           1m
timeout connect         10s
timeout client          1m
timeout server          1m
timeout http-keep-alive 10s
timeout check           10s
maxconn                 4000

listen rabbitmq_cluster
bind 0.0.0.0:5670
mode tcp
option tcplog
timeout client  3h
timeout server  3h
timeout connect 3h
balance roundrobin
server node1 172.16.10.10:5672 check inter 5000 rise 2 fall 3
server node2 172.16.10.11:5672 check inter 2000 rise 2 fall 3
server node2 172.16.10.12:5672 check inter 2000 rise 2 fall 3

listen rabbitmq_cluster
bind 0.0.0.0:15670
balance roundrobin
server node1 172.16.10.10:15672 check inter 5000 rise 2 fall 3
server node2 172.16.10.11:15672 check inter 2000 rise 2 fall 3
server node2 172.16.10.12:15672 check inter 2000 rise 2 fall 3
开启HAProxy日志Node1Node2相同)编辑/etc/rsyslog.conf,打开以下四行注释$ModLoad imudp$UDPServerRun 514$ModLoad imtcp$InputTCPServerRun 514
增加一行配置local2.* /var/log/haproxy.log
重启rsyslog服务systemctl restart rsyslog到目前为止,RabbitMQ集群部署完毕,最后就是测试集群
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集群 高可用 rabbitmq