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