1. 程式人生 > 其它 >RabbitMQ叢集部署 RabbitMQ單機部署

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叢集高可用就部署完成了