RabbitMQ叢集部署 RabbitMQ單機部署
服務規劃:
該部署以Red Hat 7為例
安裝RabbitMQ叢集
1.安裝RabbitMQ(所有裝置)
可以參考我之前編寫的RabbitMQ單機部署進行安裝
2.關閉防火牆和SELinux(所有裝置)
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vi /etc/selinux/config
SELINUX=enforcing改為SELINUX=disabled
3.配置IP地址和主機名之間的對映(所有裝置)
vi /etc/hosts
192.168.36.150 rabbit-node1 192.168.36.151 rabbit-node2
需重啟裝置生效
4.同步erlang cookies(150裝置)
#RabbitMQ是通過erlang編寫,erlang語言通過同步erlang叢集各個節點的cookie實現分散式
scp /root/.erlang.cookie [email protected]:/root/.erlang.cookie
#檢視兩臺裝置是否一致
cat /root/.erlang.cookie
5.RabbitMQ叢集新增節點(151裝置)
在此登入其他節點加入叢集,這裡我的只有151一個裝置
#關閉應用
rabbitmqctl stop_app
#將node2加入叢集
rabbitmqctl join_cluster --ram rabbit@rabbit-node1
#啟動應用
rabbitmqctl start_app
#檢視叢集狀態,任意節點都可以
rabbitmqctl cluster_status
完成後即可登入我們的RabbitMQ管理頁面進行檢視(ip:15672)
將某節點退出叢集
# 在退出的節點上執行 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app # 在主節點上執行(如去除rabbit-node2),offline引數代表允許離線刪除 rabbitmqctl forget_cluster_node rabbit-node2 [--offline]
6.配置映象佇列叢集(任意節點)
以上配置完成的叢集只是普通叢集,該叢集下不同節點資料不一定會一致,所以我們需要進行資料同步設定,兩種方式任選其一即可
方式一:命令列配置
#同步 virtual host 為"/"下名稱字首為"mirroring"的交換機和佇列,並且自動儲存到兩個節點上
rabbitmqctl set_policy -p / --priority 1 --apply-to all myPolicy "^mirroring" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
#ha-mode為匹配型別 all:表示在叢集中所有的節點上進行映象 exactly:表示在指定個數的節點上進行映象,節點的個數由ha-params指定 nodes:表示在指定的節點上進行映象,節點名稱通過ha-params指定
方式二:登入管理頁面配置
安裝HaProxy(所有裝置)
HaProxy包下載地址:https://src.fedoraproject.org/repo/pkgs/haproxy/
1.部署HaProxy
tar -xf haproxy-2.5.5.tar.gz
cd haproxy-2.5.5/
make TARGET=linux-glibc ARCH=x86_64 PREFIX=/usr/local/haproxy
TARGET:核心版本
ARCH:系統CUP(64位為 x86_64)
make install PREFIX=/usr/local/haproxy
2.配置配置HaProxy環境變數
Vi /etc/profile
export HAPROXY_HOME=/usr/local/haproxy
export PATH=$PATH:$JAVA_HOME/bin:$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin:/$HAPROXY_HOME/sbin #在path後加上該路徑即可
source /etc/profile
3.建立HaProxy使用者及使用者組
groupadd haproxy
#建立nginx執行賬戶haproxy並加入到haproxy組,不允許haproxy使用者直接登入系統
useradd -g haproxy haproxy -s /bin/false
4.建立相關檔案目錄
#建立haproxy錯誤日誌目錄
mkdir -p /usr/local/haproxy/errors
touch /usr/local/haproxy/errors/403.http
touch /usr/local/haproxy/errors/500.http
touch /usr/local/haproxy/errors/502.http
touch /usr/local/haproxy/errors/503.http
touch /usr/local/haproxy/errors/504.http
#建立日誌檔案
mkdir -p /usr/local/haproxy/logs
touch /usr/local/haproxy/logs/haproxy.log
#建立haproxy配置檔案
mkdir -p /usr/local/haproxy/conf
touch /usr/local/haproxy/conf/haproxy.cfg
touch /usr/local/haproxy/stats
5.修改配置檔案
vi /usr/local/haproxy/conf/haproxy.cfg
global log 127.0.0.1 local1 chroot /usr/local/haproxy #haproxy的pid存放路徑 pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon #需要建立該檔案 stats socket /usr/local/haproxy/stats defaults mode http #採用全域性定義的日誌 log global #日誌類別http日誌格式 option httplog #不記錄健康檢查的日誌資訊 option dontlognull #每次請求完畢後主動關閉http通道 option http-server-close option forwardfor except 127.0.0.0/8 #serverID對應的伺服器掛掉後,強制定向到其他健康的伺服器 option redispatch #3次連線失敗就認為服務不可用,也可以通過後面設定 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 3000 #開啟haproxy監控服務 listen rabbitmq_cluster #通過6672埠進行對映,對映的地址通過後面的server項進行配置 bind 0.0.0.0:6672 #記錄tcp連線的狀態和時間 option tcplog #四層協議代理,即對TCP協議轉發 mode tcp #開啟TCP的Keep Alive(長連線模式) option clitcpka #haproxy和rabbitmq建立連線的超時時間 timeout connect 1s #客戶端與haproxy最大空閒時間 timeout client 10s #伺服器與haproxy最大空閒時間 timeout server 10s #採用輪詢轉發訊息 balance roundrobin #每5秒傳送一次心跳包,如聯絡兩次有響應則代表狀態良好 #如連續三次沒有反應,則視為服務故障,該節點將被剔除 server rabbit-node1 192.168.36.150:15672 check inter 5s rise 2 fall 3 server rabbit-node2 192.168.36.151:15672 check inter 5s rise 2 fall 3 listen http_front #監聽埠-頁面訪問的埠 bind 0.0.0.0:6001 #統計頁面自動重新整理時間 stats refresh 30s #統計頁面url stats uri /haproxy_stats #指定haproxy訪問使用者名稱密碼 stats auth haproxy_admin:haproxy_pwd #設定haproxy錯誤頁面 errorfile 403 /usr/local/haproxy/errors/403.http errorfile 500 /usr/local/haproxy/errors/500.http errorfile 502 /usr/local/haproxy/errors/502.http errorfile 503 /usr/local/haproxy/errors/503.http errorfile 504 /usr/local/haproxy/errors/504.http
6.開啟日誌記錄
#Haproxy預設是沒有開啟日誌記錄的,需要根據rsyslog通過udp的方式獲取Haproxy日誌資訊
vi /etc/rsyslog.conf
# Provides UDP syslog reception #開啟以下兩行註解 $ModLoad imudp $UDPServerRun 514 #新增日誌目錄 (local1與haproxy.cfg中global log保持一致) local1.* /usr/local/haproxy/logs/haproxy.log
vi /etc/sysconfig/rsyslog
# Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details # 修改如下內容 SYSLOGD_OPTIONS="-r -m 0 -c 1"
#重啟生效
systemctl start rsyslog
7.啟動HaProxy
#檢查配置檔案語法
haproxy -c -f /usr/local/haproxy/conf/haproxy.cfg
#啟動
haproxy -f /usr/local/haproxy/conf/haproxy.cfg
#重啟命令
haproxy -f /usr/local/haproxy/conf/haproxy.cfg -st $(cat /var/run/haproxy.pid)
啟動完成後即可通過瀏覽器登入ip:6001/haproxy_stats訪問
賬號密碼為我們haproxy配置檔案中所配置的haproxy_admin:haproxy_pwd
安裝Keepalived(所有裝置)
Keepalived包下載地址:https://www.keepalived.org/download.html
1.部署Keepalived
tar -zxvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
./configure
make && make install
2.建立相關檔案目錄
mkdir /etc/keepalived
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
cp /etc/keepalived/keepalived.conf keepalived.conf.bak
3.修改配置檔案
vi /etc/keepalived/keepalived.conf
MASTER:(150裝置)
#注意黃色欄位即可
! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] #smtp_server 192.168.200.1 #smtp_connect_timeout 30 router_id LVS_01 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.36.199/24 } } #以下為LVS的配置,如果沒有使用LVS,則可以全部刪除掉
BACKUP:(151裝置)
#注意黃色欄位即可
! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] #smtp_server 192.168.200.1 #smtp_connect_timeout 30 router_id LVS_02 } vrrp_instance VI_1 { state BACKUP interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.36.199/24 } } #以下為LVS的配置,如果沒有使用LVS,則可以全部刪除掉
4.啟動Keepalived
啟動命令:/etc/init.d/keepalived start
關閉命令:/etc/init.d/keepalived stop
Keepalived啟動完成後,在Master節點上檢視IP即可看見我們的虛擬IP地址
ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:fd:87:72 brd ff:ff:ff:ff:ff:ff inet 192.168.36.150/24 brd 192.168.36.255 scope global noprefixroute ens33 valid_lft forever preferred_lft forever inet 192.168.36.199/24 scope global secondary ens33 valid_lft forever preferred_lft forever inet6 fe80::ac5d:4c27:f607:e8aa/64 scope link noprefixroute valid_lft forever preferred_lft forever
然後可以嘗試把Keeplived Master節點關閉看虛擬IP會不會漂移到另一個節點,成功漂移即可
5.Keepalived優化
至此,我們的Keepalived雖然部署成功了,但是此時只有當Master節點上的Keepalived down掉,我們的虛擬IP才會漂移,如果是Haproxy down掉,Keepalived程序是還會繼續執行的,所以我們要做以下配置,讓Haproxy down掉的時候,Keepalived也會自己down掉,這樣我們才能將虛擬IP進行漂移,從而保證服務的訪問正常(只需要在Master節點上做該配置即可,因為Master再次啟動時,虛擬IP是會漂移回來的)
方式一:
#編寫一個後臺執行的指令碼來監控Haproxy狀態
cd /etc/keepalived/
vi check_hap.sh
#!/bin/bash while true do hap=$(ps -ef|grep haproxy|grep -v 'grep'|awk '{print $2}'|wc -l) if [[ $hap -eq 0 ]];then /etc/init.d/keepalived stop else continue fi sleep 5 done
chmod +x check_hap.sh
#後臺執行該指令碼
nohup ./check_hap.sh 2>&1 &
方式2:
#同樣是需要編寫一個監控Haproxy的指令碼,但是是由Keepalived來呼叫該指令碼
cd /etc/keepalived/
vi check_hap.sh
#!/bin/bash hap=$(ps -ef|grep haproxy|grep -v 'grep'|awk '{print $2}'|wc -l) if [[ $hap -eq 0 ]];then /etc/init.d/keepalived stop else continue fi
chmod +x check_hap.sh
#修改keepalived配置檔案
vi keepalived.conf
#參考紅色部分即可
#配置完成後重啟Keepalived
/etc/init.d/keepalived restart
擴充套件:keepalived日誌預設是在系統日誌下的/var/log/messages,若想要做日誌分離,可參考Keepalived日誌分離配置
至此,我們RabbitMQ叢集高可用就部署完成了