1.增加負載均衡器
關於負載均衡器,商業的比如F5的BIG-IP,Radware的AppDirector,是硬件架構的產品,可以實現很高的處理能力。但這些產品昂貴的價格會讓人止步,所以我們還有軟件負載均衡方案。互聯網公司常用的軟件LB一般有LVS、HAProxy、Nginx等。LVS是一個內核層的產品,主要在第四層負責數據包轉發,使用較復雜。HAProxy和Nginx是應用層的產品,但Nginx主要用於處理HTTP,所以這里選擇HAProxy作為RabbitMQ前端的LB。HAProxy的安裝使用非常簡單,在Centos下直接yum install haproxy,然后更改/etc/haproxy/haproxy.cfg 文件即可,文件內容大概如下:
- #---------------------------------------------------------------------
- # Global settings
- #---------------------------------------------------------------------
- global
- log 127.0.0.1 local2
- chroot /var/lib/haproxy
- pidfile /var/run/haproxy.pid
- maxconn 4000
- user haproxy
- group haproxy
- daemon
- # turn on stats unix socket
- stats socket /var/lib/haproxy/stats
- #---------------------------------------------------------------------
- # common defaults that all the 'listen' and 'backend' sections will
- # use if not designated in their block
- #---------------------------------------------------------------------
- defaults
- mode http
- log global
- option httplog
- option dontlognull
- option http-server-close
- option forwardfor except 127.0.0.0/8
- option redispatch
- 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
- listen rabbitmq_cluster 0.0.0.0:5672
- mode tcp
- balance roundrobin
- server rqslave1 192.168.36.102:5672 check inter 2000 rise 2 fall 3
- server rqslave2 192.168.36.136:5672 check inter 2000 rise 2 fall 3
- #server rqmaster 192.168.36.217:5672 check inter 2000 rise 2 fall 3
啟動:service haproxy start
負載均衡器會監聽5672端口,輪詢我們的兩個內存節點192.168.36.102、192.168.36.136的5672端口,192.168.36.217為磁盤節點,只做備份不提供給生產者、消費者使用,當然如果我們服務器資源充足情況也可以配置多個磁盤節點,這樣磁盤節點除了故障也不會影響,除非同時出故障。
2.配置策略
使用Rabbit鏡像功能,需要基於rabbitmq策略來實現,策策是用來控制和修改群集范圍的某個vhost隊列行為和Exchange行為在cluster中任意節點啟用策略,策略會自動同步到集群節點
# rabbitmqctl set_policy -p hrsystem ha-allqueue"^" '{"ha-mode":"all"}'
這行命令在vhost名稱為hrsystem創建了一個策略,策略名稱為ha-allqueue,策略模式為 all 即復制到所有節點,包含新增節點,
策略正則表達式為 “^” 表示所有匹配所有隊列名稱。
例如rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" '{"ha-mode":"all"}'
注意:"^message" 這個規則要根據自己修改,這個是指同步"message"開頭的隊列名稱,我們配置時使用的應用於所有隊列,所以表達式為"^"
set_policy說明參見
set_policy [-p vhostpath] {name} {pattern} {definition} [priority] #ha-mode:all、exactly、nodes
也可以通過rabbit控制台添加

下面我們來添加一個queues隊列來看看效果,這里只是測試結果,其它的先不填寫
在這里邊添加的時候你是可以指定Node選項也就是把這個queues放在哪個node節點上.
3.創建隊列時需要指定ha 參數,如果不指定x-ha-prolicy 的話將無法復制
4.客戶端使用負載服務器192.168.36.127發送消息,隊列會被復制到所有節點,當然策略也可以配置制定某幾個節點,這時任何節點故障 、或者重啟將不會影響我們正常使用某個隊列,到這里我們完成了高可用配置(所有節點都宕機那沒有辦法了)。
5.使用rabbitmq管理端可以看到集群鏡像模式中對列狀態

