網路分割槽出現的原因是集群節點之間通訊出現異常,導致各節點之間資料不同步,節點之間通訊異常恢復後集群會**成多個網路分割槽(小集群)各自為政。
配置檔案包含中cluster_partition_handling的配置為ignore
乙個正常執行的3節點集群,集群狀態如下
[root@test-192-168-1-41 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-41' ...
}, ,
, ,, ,
]}]
關閉41節點的25672埠(集群間通訊使用的埠),在41節點檢視集群狀態,發現集群不可用。
[root@test-192-168-1-41 ~]# iptables -i input -p tcp --dport 25672 -j reject
[root@test-192-168-1-41 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-41' ...
error: unable to connect to node 'rabbit@test-192-168-1-41': nodedown
diagnostics
**********=
attempted to contact: ['rabbit@test-192-168-1-41']
rabbit@test-192-168-1-41:
* connected to epmd (port 4369) on test-192-168-1-41
* epmd reports node 'rabbit' running on port 25672
* can't establish tcp connection, reason: econnrefused (connection refused)
* suggestion: blocked by firewall?
current node details:
- node name: 'rabbitmq-cli-80@test-192-168-1-41'
- home dir: /var/lib/rabbitmq
- cookie hash: 1kspxc9hxkazvthkao5b5q==
在47節點檢視集群狀態,發現alarms中顯示41節點為nodedown
[root@test-192-168-1-47 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-47' ...
}, ,
, ,, ,
]}]
在41節放開25672埠,在41檢視集群狀態,發現runnint_nodes和alarms中均只有41節點
[root@test-192-168-1-41 ~]# iptables -d input -p tcp --dport 25672 -j reject
[root@test-192-168-1-41 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-41' ...
}, ,
, ,]}]
在47節點檢視集群狀態,發現partitions中出現了資訊,說明此時集群出現了網路分割槽
[root@test-192-168-1-47 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-47' ...
}, ,
, ,]},
, ]}]
分別在47節點和48節點執行重新加入集群命令
stopping node 'rabbit@test-192-168-1-41' ...
starting node 'rabbit@test-192-168-1-41' ...
檢視集群狀態,已經恢復
[root@test-192-168-1-41 ~]# rabbitmqctl cluster_status
cluster status of node 'rabbit@test-192-168-1-41' ...
}, ,
, ,, ,
]}]
autoheal:此模式下,rabbitmq將在發生網路分割槽時,自動決定出乙個勝出分割槽(獲勝分割槽是獲得最多客戶端連線的那個分割槽;如果產生平局,則選擇擁有最多節點的分割槽;如果仍是平局,則隨機選擇),並重啟不在該分割槽中的所有節點。與pause_minority模式不同的是,autoheal 模式是在分割槽結束階段(已經形成穩定的分割槽)時起作用,而不是在分割槽開始階段(剛剛開始分割槽)。此模式適合更看重服務的可持續行勝於資料完整性的場景。
pause_minority:此模式下,如果發現有節點失效,rabbitmq將會自動停止少數派集群(即少於或等於半數節點數)中的所有節點。這種策略選擇了cap 理論中的分割槽容錯性(p),而放棄了可用性(a),保證了在發生網路分割槽時,最多只有乙個分割槽中的節點會繼續工作;而處於少數派集群中的節點將在分割槽發生的開始就被停止,在分割槽恢復後重新啟動(繼續執行但不監聽任何埠或做其他工作,其將每秒檢測一次集群中的其他節點是否可見,若可見則從pause狀態喚醒)。對於節點掛起引起的網路分割槽,此模式無效,因為掛起節點不能看到其餘節點是否恢復"可見",因而不能觸發從cluster中斷開。
pause_if_all_down:此模式下,rabbitmq會自動停止集群中的節點,只要某節點與列舉出來的任何節點之間無法通訊。這與pause-minority模式比較接近,但該模式允許管理員來決定採用哪些節點做判定;可能存在列舉出來的多個節點本身就處於無法通訊的不同分割槽中,此時不會有任何節點被停掉。
ignore:對分割槽不做任何處理。
這裡建議使用autohel模式,可以很好的保證集群的可用性,如果你的集群出現過3節點down了2節點以後,最後乙個正常的節點自動down掉,你可能使用了pause_minority模式。
rabbitmq集群配置
rabbitmq是乙個輕量級的訊息服務系統,切記它只是乙個類似信件郵遞員的功能,而不是快遞,不用把它當成redis在用。一 rabbitmq軟體安裝 1.erlang安裝 安裝erlang,載入官方提供的yum源,然後直接安裝。最新版本的rabbitmq直接依賴erlang,安裝esl erlang...
Rabbitmq 建立集群
更改host 兩台主機rabbit1 192.168.1.112,rabbit2 192.168.1.113 host配置如下 rabbit1 192.168.1.112 rabbit2 192.168.1.113 同步erlang.cookie 將rabbit1 c users erlang.co...
安裝rabbitmq集群
一.安裝 erlang rabbitmq 在10.0.0.45 10.0.0.57 10.0.0.58三個節點上安裝,然後開啟 rabbitmq 監控外掛程式 以下在root使用者操作 1.etc hosts增加 10.0.0.45 node1 10.0.0.57 node2 10.0.0.58 n...