1. 程式人生 > >RabbitMQ之映象模式及Haproxy的安裝使用

RabbitMQ之映象模式及Haproxy的安裝使用

接上一篇:Centos7 RabbitMQ叢集版安裝

前言:上一篇搭建的僅僅是普通叢集,雖然交換機、繫結關係、對列等可以複製到叢集的其他節點,但是佇列內容不會複製,如果佇列宕機將會導致佇列無法使用,不能保證佇列的高可用性。

詳情參考:http://next.rabbitmq.com/ha.html

叢集模式:

      對於queue來說,message data只存在於叢集中的一個節點上,而message metadata則存在於叢集中的所有節點。當message進入A節點的queue後,consumer從B節點拉去時,rabbitmq會臨時在A、B之間進行訊息傳輸,把A中的message data取出來傳送給連結在B上的consumer。這樣就存在A這個瓶頸,無論連結A還是B,出口總是在A。還有如果A節點故障後,在B節點無法取到A節點中還未消費的訊息,如果做了訊息持久化,則A節點恢復後,仍然可以被消費,但是如果沒做訊息持久化,即使A恢復了,訊息也丟失了。

映象模式:

      該模式和叢集模式的區別在於,message data會在映象節點間主動同步,而不是在consumer取資料時臨時拉取,當然由於在節點間主動同步資料,副作用也很明顯,降低系統性能,一但大量訊息進入,則同步的訊息非常多。

RabbitMQ的叢集節點包括記憶體節點、磁碟節點。顧名思義記憶體節點就是將所有資料放在記憶體,磁碟節點將資料放在磁碟。如果在投遞訊息時,打開了訊息的持久化,那麼即使是記憶體節點,資料還是安全的放在磁碟。

1.設定映象佇列策略

  1. 在任意一個節點上執行
  2. rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
  3. 將所有佇列設定為映象佇列,佇列會被複制到各個節點,狀態保持一致
  4. 在rabbitmq的web控制檯上可以看到
  5. 輸入rabbitmqctl檢視幫助
  6. set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>   //設定策略
  7. clear_policy [-p <vhost>] <name>    //清除策略
  8. list_policies [-p <vhost>]   //策略列表
  9. rabbitmqctl詳情檢視:https://blog.csdn.net/mlym521/article/details/81990265
  10. [-p <vhost>]: 可選引數,針對指定vhost下的queue進行設定

    [--priority <priority>]:可選引數,policy的優先順序

    [--apply-to <apply-to>]:應用到 exchanges或者queue或者 all

    <name>: policy的名稱

    <pattern>: 對列(queue)或者轉換器(exchange)的正則匹配模式

    <definition>:映象定義,包括三個部分ha-mode, ha-params, ha-sync-mode

        ha-mode:指明映象佇列的模式,有效值為 all/exactly/nodes

            all:表示在叢集中所有的節點上進行映象

            exactly:表示在指定個數的節點上進行映象,節點的個數由ha-params指定

            nodes:表示在指定的節點上進行映象,節點名稱通過ha-params指定

        ha-params:ha-mode模式需要用到的引數

        ha-sync-mode:進行佇列中訊息的同步方式,有效值為automatic和manual

  11. 具體用法參考:http://www.cnblogs.com/zhengchunyuan/p/9253722.html

2.Haproxy的安裝

  1. 上傳haproxy-1.7.8.tar.gz包到伺服器上
  2. tar -zxvf  haproxy-1.7.8.tar.gz -C /usr/local
  3. 將原始碼解壓之後,需要執行make來將HAProxy編譯為可執行程式。在執行make之前需要先選擇目標平臺,通常對於UNIX系的作業系統可以選擇TARGET=generic
  4. make TARGET=generic //編譯
  5. export PATH=$PATH:/usr/local/haproxy-1.7.8  //配置環境變數
  6. source /etc/profile //source一下就OK了

  7. mkdir conf   //在haproxy-1.7.8目錄下創鍵conf目錄

  8. 配置haproxy.cfg

  9. haproxy -f ./conf/haproxy.cfg -d   //啟動haproxy  -d表示debug模式

  10. 該圖顯示我的rabbitmq第二個節點沒有啟動DOWN,啟動之後顯示UP

  11. 兩個rabbitmq節點啟動完成之後

  12. 重新啟動haproxy顯示為

  13. 訪問haproxy的web端,繫結埠為8100

  14. 通過haproxy訪問rabbitmq的web管理控制檯,繫結埠為8004

  15. 客戶端連線haproy就OK了,這裡haproxy繫結的埠為5671