RabbitMQ高可用配置(Haproxy + Keepalived)


網絡結構如下圖:
 

共有104、105、106三台RabbitMQ Server,互為集群
其中104和105安裝了Haproxy,每個Haproxy承擔三台RabbitMQ server的負載均衡
兩台Harpoxy采用Keepalived互為主備,VIP是172.16.0.108
操作系統為Ubuntu

以下介紹操作步驟:

1、三台主機安裝RabbitMQ

     apt-get install rabbitmq-server    

     開啟RabbitMQ management,激活控制台以方便MQ的管理與監控
     sudo rabbitmq-plugins enable rabbitmq_management 
     開啟監控后可以輸入http://ip:15672可以登錄管理界面,默認賬戶guest/guest
 
2、配置MQ集群
     2.1 cookie文件
     因為RabbitMQ的集群是通過Erlang的集群來實現的,所以,要求三台機器的
     /var/lib/rabbitmq/.erlang.cookie 文件內容一致,用VI等工具將它的內容修改為 zHDCGETPYWOWREASJUAB
    
     由於RabbitMQ在啟動Booker時會檢查該文件的權限,必須為400,否則會報錯,所以要修改文件的權限
     chmod 400 .erlang.cookie
 
     2.2 修改各機器hosts
     172.16.0.104    pzs-test-1
     172.16.0.105    pzs-test-2
     172.16.0.106    pzs-test-3
       保證三台機器可以互相訪問對方   
 
   2.3 加入集群
     對主節點(104):
     #啟動Broker
     rabbitmq-server –detached > nohup.out&
     #啟動集群
     rabbitmqctl start_app
      #查看集群狀態
     rabbitmqctl cluster_status
 
     對備節點(105、106):
     rabbitmq-server –detached > nohup.out&
     rabbitmqctl start_app
     rabbitmqctl stop_app
     #加入集群
     rabbitmqctl join_cluster --ram rabbit@pzs-test-1
     rabbitmqctl start_app
     #查看集群狀態
     rabbitmqctl cluster_status
 
     在三台機器運行以下命令:
   設置成鏡像隊列
  # rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' //["^"匹配所有]
 
3、安裝配置HaProxy
     安裝過程省略
     修改/etc/haproxy/haproxy.cfg,在文件后面添加以下內容
listen rabbitmq_local_cluster 0.0.0.0:25672
#配置TCP模式
mode tcp
option tcplog
#簡單的輪詢
balance roundrobin
#rabbitmq集群節點配置
server rabbit1 172.16.0.104:5672 check inter 5000 rise 2 fall 2
server rabbit2 172.16.0.105:5672 check inter 5000 rise 2 fall 2
server rabbit3 172.16.0.106:5672 check inter 5000 rise 2 fall 2
   
#配置haproxy web監控,查看統計信息
listen private_monitoring :8100
mode http
option httplog
stats enable
#設置haproxy監控地址為http://localhost:8100/stats
stats uri /stats
stats refresh 30s
#添加用戶名密碼認證
stats auth admin:1234
    
啟動haproxy: haproxy -f haproxy.cfg
訪問http://172.16.0.104:8100/stats和http://172.16.0.105:8100/stats
可以查看haproxy的運行狀態及一些統計信息
 
4、安裝配置Keepalived
  安裝過程省略
 【haproxy_check.sh文件內容】
     #!/bin/bash
     LOGFILE="/var/log/keepalived-haproxy-state.log"
     date >> $LOGFILE
     if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
     echo "fail: check_haproxy status" >> $LOGFILE
     exit 1
     else
     echo "success: check_haproxy status" >> $LOGFILE
     exit 0
     fi
 
【haproxy_master.sh文件內容】
     LOGFILE="/var/log/keepalived-haproxy-state.log"
     echo "Being Master ..." >> $LOGFILE
 
然后修改/etc/keepalived/keepalived.conf文件
主機(104)
global_defs {
   router_id test
}
vrrp_script chk_haproxy
{
     script "/etc/keepalived/scripts/haproxy_check.sh"
     interval 2
     timeout 2
     fall 3
}
vrrp_instance haproxy {
    state MASTER # 主也配置為SLAVE
    interface eth0 
    virtual_router_id 61
    priority  150       
    virtual_ipaddress { 
    172.16.0.108
    }
    track_script {
         chk_haproxy
    }
    notify_master "/etc/keepalived/scripts/haproxy_master.sh"
}
 
備機(105)
global_defs {
    router_id redis
}

vrrp_script chk_haproxy
{
     script "/etc/keepalived/scripts/haproxy_check.sh"
     interval 2
     timeout 2
     fall 3
}
vrrp_instance haproxy {
    state BACKUP # 主也配置為SLAVE
    interface eth0 
    virtual_router_id 61
    priority  100       
    virtual_ipaddress { 
    172.16.0.108
    }
    track_script {
         chk_haproxy
    }
    notify_master "/etc/keepalived/scripts/haproxy_master.sh"
}
 
注意:keepalived可能運行多個實例,比如redis和haproxy共存,在這種情況下,必須注意幾點:
一、VIP必須各實例不同
二、virtual_router_id必須各實例不同
三、腳本文件中不允許出現kill keepalived進程的操作
 
運行keepalived -D 啟動keepalived


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM