主/備架構圖:javascript
使用192.168.111.201:5672/5671訪問haproxy,由haproxy轉發請求,這是一對主/備獨立服務器,並前置一臺負載均衡器來處理故障轉移。這是真正的無共享架構,主服務器和備用服務器之間沒有協做,因此任何影響到主服務器的問題不會自動轉移到備用服務器上。分隔的足夠完全,能夠運行不一樣版本的RabbitMQ,運行在生產環境中引入新版RabbitMQ。css
當主節點發生故障時,讓備用節點擁有主節點的全部消息可以使用共享存儲架構(主服務器故障時,使用Pacemaker將RabbitMQ的IP地址轉移到備用節點上並啓動RabbiMQ服務器,採用共享存儲上的當前元數據、內容和狀態),但存在以下的問題:java
(1) 由於是共享的,因此若是因爲某些緣由致使主節點故障那麼一樣的事情會發生在備用節點上,從而RabbitMQ服務器沒法啓動。redis
(2) 須要確保兩臺服務器擁有相同的節點名稱和UID,當兩處有一處不一樣備用節點就沒法訪問主節點共享存儲的信息了。後端
官網給出了傳統的基於pacemaker的active/passive模式的集羣,因爲崩潰會在主備間複製的事實,而且在使用共享存儲方法時沒法在兩個節點上都運行RabbitMQ,所以選擇基於負載均衡器的主/備搭建。bash
RabbitMQ與HAProxy的搭建參考個人上一篇,固然使用主/備模式安裝RabbitMQ集羣時就不須要節點鏈接了。服務器
http://my.oschina.net/lzhaoqiang/blog/701618架構
接下來是配置haproxy:app
#--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global log 127.0.0.1 local2 #[err warning info debug] chroot /usr/local/haproxy pidfile /var/run/haproxy.pid #haproxy的pid存放路徑,啓動進程的用戶必須有權限訪問此文件 maxconn 4096 #最大鏈接數,默認4000 daemon #建立1個進程進入deamon模式運行。此參數要求將運行模式設置爲"daemon" nbproc 1 #後臺進程數,這個要求是 daemon ,需小於cpu內核數 #--------------------------------------------------------------------- # common defaults that all the 'listen' and 'backend' sections will # use if not designated in their block #--------------------------------------------------------------------- defaults mode http #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK log global #採用全局定義的日誌 option dontlognull #不記錄健康檢查的日誌信息 option httpclose #每次請求完畢後主動關閉http通道 option tcplog #option forwardfor #若是後端服務器須要得到客戶端真實ip須要配置的參數,能夠從Http Header中得到客戶端ip option redispatch #serverId對應的服務器掛掉後,強制定向到其餘健康的服務器 timeout connect 10s #default 10 second timeout if a backend is not found timeout client 30s #客戶端鏈接超時 timeout server 30s #服務器鏈接超時 timeout check 5s #設置對後端服務器的檢測超時時間,默認單位是毫秒 maxconn 60000 #最大鏈接數 retries 3 #3次鏈接失敗就認爲服務不可用,也能夠經過後面設置 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- #frontend main *:5000 # acl url_static path_beg -i /static /images /javascript /stylesheets # acl url_static path_end -i .jpg .gif .png .css .js # # use_backend static if url_static #知足策略要求,則響應策略定義的backend頁面 # default_backend app #不知足則響應backend的默認頁面 #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- #backend static # balance roundrobin #負載均衡模式輪詢 # server static 127.0.0.1:4331 check #後端服務器定義 #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- listen stats bind 0.0.0.0:8100 #監聽端口 mode http #http的7層模式 option tcplog #採用tcp日誌格式 #log 127.0.0.1 local0 err maxconn 5 stats refresh 30s #統計頁面自動刷新時間 stats uri /stats #統計頁面url stats realm welcome login\ Haproxy #統計頁面密碼框上提示文本 stats auth admin:admin #統計頁面用戶名和密碼設置 stats hide-version #隱藏統計頁面上HAProxy的版本信息 listen rabbitmq_master_backup_cluster bind 0.0.0.0:5672 mode tcp balance roundrobin server rqmaster 192.168.111.136:5672 check inter 2000 rise 2 fall 3 server rqbackup 192.168.111.137:5672 backup check inter 2000 rise 2 fall 3 listen rabbitmq_master_backup_cluster_ssl bind 0.0.0.0:5672 mode tcp balance roundrobin server rqmaster 192.168.111.136:5671 check inter 2000 rise 2 fall 3 server rqbackup 192.168.111.137:5671 backup check inter 2000 rise 2 fall 3
啓動:負載均衡
sudo /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
能夠看到rmqmaster與rmqbackup兩個節點顏色不一樣,主機爲active UP ,備機爲backup UP,當主機宕掉時,備機就會接管服務