RabbitMQ 集群架構(gòu)

主備模式(Warren)

概念:主節(jié)點提供服務(wù),當(dāng)主節(jié)點出現(xiàn)故障,備用節(jié)點立刻替補上去。備用節(jié)點可以不止一個。 在并發(fā)和數(shù)據(jù)量不高的情況下,這種模型好用且簡單。

示意圖

主備模式示意圖

Consumer,HaProxy,主節(jié)點,備份節(jié)點,數(shù)據(jù)存儲相互之間應(yīng)該是隔離的。假如把HaProxy 和主節(jié)點放在一臺服務(wù)器上,這臺服務(wù)器出現(xiàn)故障,主備模式不會起作用。

鏡像模式(Mirror)

概念:為了保證 MQ 數(shù)據(jù)高可靠,多個節(jié)點之間數(shù)據(jù)要同步。

示意圖

鏡像模式示意圖

鏡像模式搭建

MQ 節(jié)點

需要幾個就裝幾個。

安裝

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 的所有節(jié)點都要執(zhí)行

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

/首先啟動服務(wù)
/etc/init.d/rabbitmq-server start stop status restart
//查看服務(wù)有沒有啟動: lsof -i:5672
rabbitmq-plugins enable rabbitmq_management
//可查看管理端口有沒有啟動: lsof -i:15672 或者 netstat -tnlp|grep 15672

/etc/init.d/rabbitmq-server start stop status restart
驗證單個節(jié)點是否安裝成功:http://192.168.11.71:15672/

選擇一個節(jié)點為主節(jié)點,其他的作為備份節(jié)點。將主節(jié)點的 /var/lib/rabbitmq/.erlang.cookie 文件同步到備份節(jié)點上。復(fù)制之后修改備份節(jié)點文件權(quán)限和主節(jié)點相同。

節(jié)點組成集群
  1. 所有節(jié)點執(zhí)行 rabbitmq-server -detached
  2. 在所有備份節(jié)點上執(zhí)行
rabbitmqctl stop_app
rabbitmqctl join_cluster 主節(jié)點的名字
rabbitmqctl start_app
  1. 在任意一個節(jié)點上執(zhí)行鏡像策略
    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

//賦權(quán)
groupadd -r -g 149 haproxy
useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy
配置
//創(chuàng)建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 發(fā)起重連機制
     clitimeout 60s
     ##服務(wù)器端鏈接超時時間為 15秒 則HA 發(fā)起重連機制
     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集群節(jié)點配置 #inter 每隔五秒對mq集群做健康檢查, 2次正確證明服務(wù)器可用,2次失敗證明服務(wù)器不可用,并且配置主備機制
        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監(jiān)控,查看統(tǒng)計信息
listen stats
    bind 192.168.11.79:8100
    mode http
    option httplog
    stats enable
    #設(shè)置haproxy監(jiān)控地址為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
這一行的配置,這就是配置主備節(jié)點的。如果全是 check 則全是主節(jié)點,沒有備份節(jié)點。

有幾個 MQ 節(jié)點則配置幾個。

啟動
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

//查看haproxy進程狀態(tài)
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系統(tǒng)服務(wù),因為沒有使用keepalived的默認(rèn)安裝路徑(默認(rèn)路徑:/usr/local),安裝完成之后,需要做一些修改工作
//首先創(chuàng)建文件夾,將keepalived配置文件進行復(fù)制:
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

//然后復(fù)制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/

//可以設(shè)置開機啟動:chkconfig keepalived on,到此我們安裝完畢!
chkconfig keepalived on

vim /etc/keepalived/keepalived.conf

主節(jié)點的配置

! Configuration File for keepalived

global_defs {
   router_id bhz79  ##標(biāo)識節(jié)點的字符串,通常為hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##執(zhí)行腳本位置
    interval 2  ##檢測時間間隔
    weight -20  ##如果條件成立則權(quán)重減20
}

vrrp_instance VI_1 {
    state MASTER  ## 主節(jié)點為MASTER,備份節(jié)點為BACKUP
    interface eth0 ## 綁定虛擬IP的網(wǎng)絡(luò)接口(網(wǎng)卡),與本機IP地址所在的網(wǎng)絡(luò)接口相同(我這里是eth0)
    virtual_router_id 79  ## 虛擬路由ID號(主備節(jié)點一定要相同)
    mcast_src_ip 192.168.11.79 ## 本機ip地址
    priority 100  ##優(yōu)先級配置(0-254的值)
    nopreempt
    advert_int 1  ## 組播信息發(fā)送間隔,倆個節(jié)點必須配置一致,默認(rèn)1s
authentication {  ## 認(rèn)證匹配
        auth_type PASS
        auth_pass xxx ## 自定義的 keepalived 之間互相認(rèn)證密碼
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.11.70  ## 虛擬ip,可以指定多個
    }
}

備份節(jié)點的配置

! Configuration File for keepalived

global_defs {
   router_id bhz80  ##標(biāo)識節(jié)點的字符串,通常為hostname

}

vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh"  ##執(zhí)行腳本位置
    interval 2  ##檢測時間間隔
    weight -20  ##如果條件成立則權(quán)重減20
}

vrrp_instance VI_1 {
    state BACKUP  ## 主節(jié)點為MASTER,備份節(jié)點為BACKUP
    interface eno16777736 ## 綁定虛擬IP的網(wǎng)絡(luò)接口(網(wǎng)卡),與本機IP地址所在的網(wǎng)絡(luò)接口相同(我這里是eno16777736)
    virtual_router_id 79  ## 虛擬路由ID號(主備節(jié)點一定要相同)
    mcast_src_ip 192.168.11.80  ## 本機ip地址
    priority 90  ##優(yōu)先級配置(0-254的值)
    nopreempt
    advert_int 1  ## 組播信息發(fā)送間隔,倆個節(jié)點必須配置一致,默認(rèn)1s
authentication {  ## 認(rèn)證匹配
        auth_type PASS
        auth_pass bhz
    }

    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        192.168.1.70  ## 虛擬ip,可以指定多個
    }
}
執(zhí)行腳本編寫

主節(jié)點和備份節(jié)點腳本相同。

/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

賦予執(zhí)行權(quán)限
chmod +x /etc/keepalived/haproxy_check.sh

啟動

先啟動好 HaProxy 之后在啟動 KeepAlived

service keepalived start | stop | status | restart

//查看狀態(tài)
ps -ef | grep haproxy
ps -ef | grep keepalived
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容