RabbitMQ 集群架构

主备模式(Warren)

概念:主节点提供服务,当主节点出现故障,备用节点立刻替补上去。备用节点可以不止一个。 在并发和数据量不高的情况下,这种模型好用且简单。

示意图

主备模式示意图

Consumer,HaProxy,主节点,备份节点,数据存储相互之间应该是隔离的。假如把HaProxy 和主节点放在一台服务器上,这台服务器出现故障,主备模式不会起作用。

镜像模式(Mirror)

概念:为了保证 MQ 数据高可靠,多个节点之间数据要同步。

示意图

镜像模式示意图

镜像模式搭建

MQ 节点

需要几个就装几个。

安装

yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz

wget www.rabbitmq.com/releases/erlang/erlang-18.3-1.el7.centos.x86_64.rpm
wget http://repo.iotti.biz/CentOS/7/x86_64/socat-1.7.3.2-5.el7.lux.x86_64.rpm
wget www.rabbitmq.com/releases/rabbitmq-server/v3.6.5/rabbitmq-server-3.6.5-1.noarch.rpm
rpm -ivh erlang-18.3-1.el7.centos.x86_64.rpm 
rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
rpm -ivh rabbitmq-server-3.6.5-1.noarch.rpm
配置

以下操作,MQ 的所有节点都要执行

注意修改vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app文件
修改:loopback_users 中的 <<"guest">>,只保留guest
修改:heartbeat 为1

/首先启动服务
/etc/init.d/rabbitmq-server start stop status restart
//查看服务有没有启动: lsof -i:5672
rabbitmq-plugins enable rabbitmq_management
//可查看管理端口有没有启动: lsof -i:15672 或者 netstat -tnlp|grep 15672

/etc/init.d/rabbitmq-server start stop status restart
验证单个节点是否安装成功:http://192.168.11.71:15672/

选择一个节点为主节点,其他的作为备份节点。将主节点的 /var/lib/rabbitmq/.erlang.cookie 文件同步到备份节点上。复制之后修改备份节点文件权限和主节点相同。

节点组成集群
  1. 所有节点执行 rabbitmq-server -detached
  2. 在所有备份节点上执行
rabbitmqctl stop_app
rabbitmqctl join_cluster 主节点的名字
rabbitmqctl start_app
  1. 在任意一个节点上执行镜像策略
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

HaProxy

HaProxy 是一个类似于 Nginx 功能的一个工具,需要安装配置才能使用。

需要部署几个 HaProxy 就安装几个。至少要2个。

安装
//下载依赖包
yum install gcc vim wget

//下载haproxy
wget http://www.haproxy.org/download/1.6/src/haproxy-1.6.5.tar.gz

//解压
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local

//进入目录、进行编译、安装
cd /usr/local/haproxy-1.6.5
make TARGET=linux31 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy

//赋权
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
配置
//创建haproxy配置文件
vim /etc/haproxy/haproxy.cfg
#logging options
global
    log 127.0.0.1 local0 info
    maxconn 5120
    # haproxy 安装地址
    chroot /usr/local/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
    contimeout 5s
     ##客户端空闲超时时间为 60秒 则HA 发起重连机制
     clitimeout 60s
     ##服务器端链接超时时间为 15秒 则HA 发起重连机制
     srvtimeout 15s 
#front-end IP for consumers and producters

listen rabbitmq_cluster
    bind 0.0.0.0:5672
    #配置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 bhz76 192.168.11.76:5672 check inter 5000 rise 2 fall 2
        server bhz77 192.168.11.77:5672 check inter 5000 rise 2 fall 2
        server bhz78 192.168.11.78:5672 check inter 5000 rise 2 fall 2
#配置haproxy web监控,查看统计信息
listen stats
    bind 192.168.11.79:8100
    mode http
    option httplog
    stats enable
    #设置haproxy监控地址为http://localhost:8100/rabbitmq-stats
    stats uri /rabbitmq-stats 
    stats refresh 5s

特别注意
server bhz76 192.168.11.76:5672 check inter 5000 rise 2 fall 2
这一行的配置,这就是配置主备节点的。如果全是 check 则全是主节点,没有备份节点。

有几个 MQ 节点则配置几个。

启动
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

//查看haproxy进程状态
ps -ef | grep haproxy

KeepAlived

在安装 HaProxy 的机器上安装 KeepAlived

安装
//安装所需软件包
yum install -y openssl openssl-devel

//下载
wget http://www.keepalived.org/software/keepalived-1.2.18.tar.gz

//解压、编译、安装
tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/

cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

make && make install
配置
//将keepalived安装成Linux系统服务,因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作
//首先创建文件夹,将keepalived配置文件进行复制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

//然后复制keepalived脚本文件:
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

//可以设置开机启动:chkconfig keepalived on,到此我们安装完毕!
chkconfig keepalived on

vim /etc/keepalived/keepalived.conf

主节点的配置

! Configuration File for keepalived

global_defs {
   router_id bhz79  ##标识节点的字符串,通常为hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
    interval 2  ##检测时间间隔
    weight -20  ##如果条件成立则权重减20
}

vrrp_instance VI_1 {
    state MASTER  ## 主节点为MASTER,备份节点为BACKUP
    interface eth0 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eth0)
    virtual_router_id 79  ## 虚拟路由ID号(主备节点一定要相同)
    mcast_src_ip 192.168.11.79 ## 本机ip地址
    priority 100  ##优先级配置(0-254的值)
    nopreempt
    advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {  ## 认证匹配
        auth_type PASS
        auth_pass xxx ## 自定义的 keepalived 之间互相认证密码
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.11.70  ## 虚拟ip,可以指定多个
    }
}

备份节点的配置

! Configuration File for keepalived

global_defs {
   router_id bhz80  ##标识节点的字符串,通常为hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##执行脚本位置
    interval 2  ##检测时间间隔
    weight -20  ##如果条件成立则权重减20
}

vrrp_instance VI_1 {
    state BACKUP  ## 主节点为MASTER,备份节点为BACKUP
    interface eno16777736 ## 绑定虚拟IP的网络接口(网卡),与本机IP地址所在的网络接口相同(我这里是eno16777736)
    virtual_router_id 79  ## 虚拟路由ID号(主备节点一定要相同)
    mcast_src_ip 192.168.11.80  ## 本机ip地址
    priority 90  ##优先级配置(0-254的值)
    nopreempt
    advert_int 1  ## 组播信息发送间隔,俩个节点必须配置一致,默认1s
authentication {  ## 认证匹配
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.1.70  ## 虚拟ip,可以指定多个
    }
}
执行脚本编写

主节点和备份节点脚本相同。

/etc/keepalived/haproxy_check.sh

#!/bin/bash
COUNT=`ps -C haproxy --no-header |wc -l`
if [ $COUNT -eq 0 ];then
    /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
    sleep 2
    if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

赋予执行权限
chmod +x /etc/keepalived/haproxy_check.sh

启动

先启动好 HaProxy 之后在启动 KeepAlived

service keepalived start | stop | status | restart

//查看状态
ps -ef | grep haproxy
ps -ef | grep keepalived
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容