RabbitMQ高可用配置(Haproxy + Keepalived)

網絡結構以下圖:
 web

共有10四、10五、106三臺RabbitMQ Server,互爲集羣
其中104和105安裝了Haproxy,每一個Haproxy承擔三臺RabbitMQ server的負載均衡
兩臺Harpoxy採用Keepalived互爲主備,VIP是172.16.0.108
操做系統爲Ubuntu

如下介紹操做步驟:redis

一、三臺主機安裝RabbitMQbash

     apt-get install rabbitmq-server    cookie

     開啓RabbitMQ management,激活控制檯以方便MQ的管理與監控
     sudo rabbitmq-plugins enable rabbitmq_management 
     開啓監控後能夠輸入http://ip:15672能夠登陸管理界面,默認帳戶guest/guest
 
二、配置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
 
     對備節點(10五、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"}' //["^"匹配全部]
 
三、安裝配置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的運行狀態及一些統計信息
 
四、安裝配置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共存,在這種狀況下,必須注意幾點:
1、VIP必須各實例不一樣
2、virtual_router_id必須各實例不一樣
3、腳本文件中不容許出現kill keepalived進程的操做
 
運行keepalived -D 啓動keepalived
相關文章
相關標籤/搜索