一、RabbitMQ集群模式
- 主備模式
- 遠(yuǎn)程模式
- 鏡像模式
其中主備模式如下:
遠(yuǎn)程模式如下:
鏡像模式如下:
鏡像的部署模式一般采用雙中心,即多活模式,各個(gè)集群除了需要提供正常的消息服務(wù)外,中心之間還需要實(shí)現(xiàn)部分隊(duì)列消息的共享,部署架構(gòu)如下:
集群之間共享消息的核心,是由Federation插件實(shí)現(xiàn)的,介紹如下:
二、鏡像模式集群搭建
實(shí)際生產(chǎn)上使用最多的還是鏡像模式,此篇就主要討論怎么搭建鏡像模式,因?yàn)樯婕暗郊捍罱?,下面的?nèi)容細(xì)節(jié)比較多,為了便于理解,我們首先把最終搭建后的結(jié)構(gòu)列出來,如下:
搭建步驟如下:
1.1 集群節(jié)點(diǎn)安裝
1、安裝依賴包
PS:安裝rabbitmq所需要的依賴包
yum install build-essential openssl openssl-devel unixODBC unixODBC-devel make gcc gcc-c++ kernel-devel m4 ncurses-devel tk tc xz
2、下載安裝包
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
3、安裝服務(wù)命令
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
4、修改集群用戶與連接心跳檢測(cè)
注意修改vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app文件
修改:loopback_users 中的 <<"guest">>,只保留guest
修改:heartbeat 為1
5、安裝管理插件
//首先啟動(dòng)服務(wù)
/etc/init.d/rabbitmq-server start stop status restart
//查看服務(wù)有沒有啟動(dòng): lsof -i:5672
rabbitmq-plugins enable rabbitmq_management
//可查看管理端口有沒有啟動(dòng): lsof -i:15672 或者 netstat -tnlp|grep 15672
6、服務(wù)指令
/etc/init.d/rabbitmq-server start stop status restart
驗(yàn)證單個(gè)節(jié)點(diǎn)是否安裝成功:http://192.168.11.71:15672/
1. Ps:以上操作三個(gè)節(jié)點(diǎn)(71、72、73)同時(shí)進(jìn)行操作
1.2 文件同步步驟
PS:選擇76、77、78任意一個(gè)節(jié)點(diǎn)為Master(這里選擇76為Master),也就是說我們需要把76的Cookie文件同步到77、78節(jié)點(diǎn)上去,進(jìn)入/var/lib/rabbitmq目錄下,把/var/lib/rabbitmq/.erlang.cookie文件的權(quán)限修改為777,原來是400;然后把.erlang.cookie文件copy到各個(gè)節(jié)點(diǎn)下;最后把所有cookie文件權(quán)限還原為400即可。
/etc/init.d/rabbitmq-server stop
//進(jìn)入目錄修改權(quán)限;遠(yuǎn)程copy77、78節(jié)點(diǎn),比如:
scp /var/lib/rabbitmq/.erlang.cookie 到192.168.11.77和192.168.11.78中
1.3 組成集群步驟
1、停止MQ服務(wù)
PS:我們首先停止3個(gè)節(jié)點(diǎn)的服務(wù)
rabbitmqctl stop
2、組成集群操作
PS:接下來我們就可以使用集群命令,配置76、77、78為集群模式,3個(gè)節(jié)點(diǎn)(76、77、78)執(zhí)行啟動(dòng)命令,后續(xù)啟動(dòng)集群使用此命令即可。
rabbitmq-server -detached
3、slave加入集群操作(重新加入集群也是如此,以最開始的主節(jié)點(diǎn)為加入節(jié)點(diǎn))
//注意做這個(gè)步驟的時(shí)候:需要配置/etc/hosts 必須相互能夠?qū)ぶ返?br>
bhz77:rabbitmqctl stop_app
bhz77:rabbitmqctl join_cluster --ram rabbit@bhz76
bhz77:rabbitmqctl start_app
bhz78:rabbitmqctl stop_app
bhz78:rabbitmqctl join_cluster rabbit@bhz76
bhz78:rabbitmqctl start_app
//在另外其他節(jié)點(diǎn)上操作要移除的集群節(jié)點(diǎn)
rabbitmqctl forget_cluster_node rabbit@bhz24
4、修改集群名稱
PS:修改集群名稱(默認(rèn)為第一個(gè)node名稱):
rabbitmqctl set_cluster_name rabbitmq_cluster1
5、查看集群狀態(tài)
PS:最后在集群的任意一個(gè)節(jié)點(diǎn)執(zhí)行命令:查看集群狀態(tài)
rabbitmqctl cluster_status

6、管控臺(tái)界面
PS: 訪問任意一個(gè)管控臺(tái)節(jié)點(diǎn):http://192.168.11.71:15672 如圖所示

1.4 配置鏡像隊(duì)列
PS:設(shè)置鏡像隊(duì)列策略(在任意一個(gè)節(jié)點(diǎn)上執(zhí)行)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
PS:將所有隊(duì)列設(shè)置為鏡像隊(duì)列,即隊(duì)列會(huì)被復(fù)制到各個(gè)節(jié)點(diǎn),各個(gè)節(jié)點(diǎn)狀態(tài)一致,RabbitMQ高可用集群就已經(jīng)搭建好了,我們可以重啟服務(wù),查看其隊(duì)列是否在從節(jié)點(diǎn)同步。
1.5 安裝Ha-Proxy
1、Haproxy簡(jiǎn)介
HAProxy是一款提供高可用性、負(fù)載均衡以及基于TCP和HTTP應(yīng)用的代理軟件,HAProxy是完全免費(fèi)的、借助HAProxy可以快速并且可靠的提供基于TCP和HTTP應(yīng)用的代理解決方案。
HAProxy適用于那些負(fù)載較大的web站點(diǎn),這些站點(diǎn)通常又需要會(huì)話保持或七層處理。
HAProxy可以支持?jǐn)?shù)以萬計(jì)的并發(fā)連接,并且HAProxy的運(yùn)行模式使得它可以很簡(jiǎn)單安全的整合進(jìn)架構(gòu)中,同時(shí)可以保護(hù)web服務(wù)器不被暴露到網(wǎng)絡(luò)上。
2、Haproxy安裝
PS:79、80節(jié)點(diǎn)同時(shí)安裝Haproxy,下面步驟統(tǒng)一
//下載依賴包
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
//進(jìn)入目錄、進(jìn)行編譯、安裝
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配置文件
touch /etc/haproxy/haproxy.cfg
3、Haproxy配置
PS:haproxy 配置文件haproxy.cfg詳解
vim /etc/haproxy/haproxy.cfg
logging options
global
log 127.0.0.1 local0 info
maxconn 5120
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
** ##****客戶端空閑超時(shí)時(shí)間為 60秒 則HA 發(fā)起重連機(jī)制**
clitimeout 60s
** ##****服務(wù)器端鏈接超時(shí)時(shí)間為 15秒 則HA 發(fā)起重連機(jī)制**
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
簡(jiǎn)單的輪詢
balance roundrobin
rabbitmq集群節(jié)點(diǎn)配置 #inter 每隔五秒對(duì)mq集群做健康檢查, 2次正確證明服務(wù)器可用,2次失敗證明服務(wù)器不可用,并且配置主備機(jī)制
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)計(jì)信息
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
4、啟動(dòng)haproxy
/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
//查看haproxy進(jìn)程狀態(tài)
ps -ef | grep haproxy
5、訪問haproxy
PS:訪問如下地址可以對(duì)rmq節(jié)點(diǎn)進(jìn)行監(jiān)控:http://192.168.1.27:8100/rabbitmq-stats

6、關(guān)閉haproxy
killall haproxy
ps -ef | grep haproxy
1.6 安裝KeepAlived
1、Keepalived簡(jiǎn)介
Keepalived,它是一個(gè)高性能的服務(wù)器高可用或熱備解決方案,Keepalived主要來防止服務(wù)器單點(diǎn)故障的發(fā)生問題,可以通過其與Nginx、Haproxy等反向代理的負(fù)載均衡服務(wù)器配合實(shí)現(xiàn)web服務(wù)端的高可用。Keepalived以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ),用VRRP協(xié)議來實(shí)現(xiàn)高可用性(HA).VRRP(Virtual Router Redundancy Protocol)協(xié)議是用于實(shí)現(xiàn)路由器冗余的協(xié)議,VRRP協(xié)議將兩臺(tái)或多臺(tái)路由器設(shè)備虛擬成一個(gè)設(shè)備,對(duì)外提供虛擬路由器IP(一個(gè)或多個(gè))。
2、Keepalived安裝
PS:下載地址:http://www.keepalived.org/download.html
//安裝所需軟件包
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ù),因?yàn)闆]有使用keepalived的默認(rèn)安裝路徑(默認(rèn)路徑:/usr/local),安裝完成之后,需要做一些修改工作
//首先創(chuàng)建文件夾,將keepalived配置文件進(jìn)行復(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è)置開機(jī)啟動(dòng):chkconfig keepalived on,到此我們安裝完畢!
chkconfig keepalived on
3、Keepalived配置
PS:修改keepalived.conf配置文件
vim /etc/keepalived/keepalived.conf
PS: 79節(jié)點(diǎn)(Master)配置如下
! Configuration File for keepalived
global_defs {
router_id bhz79 ##標(biāo)識(shí)節(jié)點(diǎn)的字符串,通常為hostname
}
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh" ##執(zhí)行腳本位置
interval 2 ##檢測(cè)時(shí)間間隔
weight -20 ##如果條件成立則權(quán)重減20
}
vrrp_instance VI_1 {
state MASTER ## 主節(jié)點(diǎn)為MASTER,備份節(jié)點(diǎn)為BACKUP
interface eth0 ## 綁定虛擬IP的網(wǎng)絡(luò)接口(網(wǎng)卡),與本機(jī)IP地址所在的網(wǎng)絡(luò)接口相同(我這里是eth0)
virtual_router_id 79 ## 虛擬路由ID號(hào)(主備節(jié)點(diǎn)一定要相同)
mcast_src_ip 192.168.11.79 ## 本機(jī)ip地址
priority 100 ##優(yōu)先級(jí)配置(0-254的值)
nopreempt
advert_int 1 ## 組播信息發(fā)送間隔,倆個(gè)節(jié)點(diǎn)必須配置一致,默認(rèn)1s
authentication { ## 認(rèn)證匹配
auth_type PASS
auth_pass bhz
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.11.70 ## 虛擬ip,可以指定多個(gè)
}
}
PS: 80節(jié)點(diǎn)(backup)配置如下
! Configuration File for keepalived
global_defs {
router_id bhz80 ##標(biāo)識(shí)節(jié)點(diǎn)的字符串,通常為hostname
}
vrrp_script chk_haproxy {
script "/etc/keepalived/haproxy_check.sh" ##執(zhí)行腳本位置
interval 2 ##檢測(cè)時(shí)間間隔
weight -20 ##如果條件成立則權(quán)重減20
}
vrrp_instance VI_1 {
state BACKUP ## 主節(jié)點(diǎn)為MASTER,備份節(jié)點(diǎn)為BACKUP
interface eno16777736 ## 綁定虛擬IP的網(wǎng)絡(luò)接口(網(wǎng)卡),與本機(jī)IP地址所在的網(wǎng)絡(luò)接口相同(我這里是eno16777736)
virtual_router_id 79 ## 虛擬路由ID號(hào)(主備節(jié)點(diǎn)一定要相同)
mcast_src_ip 192.168.11.80 ## 本機(jī)ip地址
priority 90 ##優(yōu)先級(jí)配置(0-254的值)
nopreempt
advert_int 1 ## 組播信息發(fā)送間隔,倆個(gè)節(jié)點(diǎn)必須配置一致,默認(rèn)1s
authentication { ## 認(rèn)證匹配
auth_type PASS
auth_pass bhz
}
track_script {
chk_haproxy
}
virtual_ipaddress {
192.168.1.70 ## 虛擬ip,可以指定多個(gè)
}
}
4、執(zhí)行腳本編寫
PS:添加文件位置為/etc/keepalived/haproxy_check.sh(79、80兩個(gè)節(jié)點(diǎn)文件內(nèi)容一致即可)
!/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
5、執(zhí)行腳本賦權(quán)
PS:haproxy_check.sh腳本授權(quán),賦予可執(zhí)行權(quán)限.
chmod +x /etc/keepalived/haproxy_check.sh
6、啟動(dòng)keepalived
PS:當(dāng)我們啟動(dòng)倆個(gè)haproxy節(jié)點(diǎn)以后,我們可以啟動(dòng)keepalived服務(wù)程序:
//啟動(dòng)兩臺(tái)機(jī)器的keepalived
service keepalived start | stop | status | restart
//查看狀態(tài)
ps -ef | grep haproxy
ps -ef | grep keepalived
7、高可用測(cè)試
PS:vip在27節(jié)點(diǎn)上

PS:27節(jié)點(diǎn)宕機(jī)測(cè)試:停掉27的keepalived服務(wù)即可。

PS:查看28節(jié)點(diǎn)狀態(tài):我們發(fā)現(xiàn)VIP漂移到了28節(jié)點(diǎn)上,那么28節(jié)點(diǎn)的haproxy可以繼續(xù)對(duì)外提供服務(wù)!

至此,終于完成了,每步的操作很簡(jiǎn)單是不是。這就是最常用的RabbitMQ集群模式。