1. 程式人生 > 其它 >RabbitMQ映象叢集配置

RabbitMQ映象叢集配置

原文:https://www.jianshu.com/p/a4e860dfbb8f

上面已經完成RabbitMQ預設叢集模式,但並不保證佇列的高可用性,佇列內容不會複製。如果佇列節點宕機直接導致該佇列無法應用,只能等待重啟,所以要想在佇列節點宕機或故障也能正常應用,就要複製佇列內容到叢集裡的每個節點,必須要建立映象佇列。
映象佇列是基於普通的叢集模式的。
普通叢集配置詳情
rabbitmq set_policy :設定策略

[root

再次檢視佇列已經同步到其他兩臺節點:

"^"匹配所有的佇列, ha-all 策略名稱為ha-all, '{"ha-mode":"all"}' 策略模式為 all 即複製到所有節點,包含新增節點。

設定策略介紹:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition
-p Vhost: 可選引數,針對指定vhost下的queue進行設定
Name: policy的名稱,可以定義
Pattern: queue的匹配模式(正則表示式),也就是說會匹配一組。
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
案例:
例如,對佇列名稱以hello開頭的所有佇列進行映象,並在叢集的兩個節點上完成映象,policy的設定命令為: 
rabbitmqctl set_policy hello-ha “^hello” ‘{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}’

則此時映象佇列設定成功。

已經部署完成

將所有佇列設定為映象佇列,即佇列會被複制到各個節點,各個節點狀態保持一致。
常見錯誤:
1、使用 rabbitmq-server -detached命令啟動rabbitmq時,出現以下提示Warning: PID file not written; -detached was passed,此時使用rabbitmqctl status提示服務已啟動,可知此問題不用解決。

2、由於更改hostname檔案,在每次rabbitmqctl stop或者rabbitmqctl cluster_status等,只要是rabbitmq的命令就報錯,提示大概如下

Cluster status of node rabbit

此時先ps aux | grep mq,然後kill -9 該程序,然後再rabbitmq-server -detached即可解決。(即先強殺,再重新啟動)
3、使用rabbitmqctl stoprabbitmq-server -detached重新啟動後,原先新增的使用者admin、虛擬主機coresystem等均丟失,還需要重新新增



作者:威廉彣茂
連結:https://www.jianshu.com/p/a4e860dfbb8f
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。