1. 程式人生 > 其它 >rabbitmq 建立叢集

rabbitmq 建立叢集

Rabbitmq的叢集是依賴於erlang的叢集來工作的,所以必須先構建起erlang的 叢集環境,而Erlang的叢集中各節點是通過一個magic cookie來實現的,這個 cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,檔案是 400 的許可權,所以必須 保證各節點cookie保持一致,否則節點之間就無法通訊。

各伺服器關閉rabbitmq
systemctl stop rabbitmq-server

在mq-serverl同步.erlang.cookie至碁他兩臺伺服器
scp /var/lib/rabbitmq/.erlang.cookie 172.31.0.106:/var/lib/rabbitmq/.erlang.cookie

chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie #需要重新加下許可權不然拷貝過去的檔案存在許可權問題會導致服務不能啟動

各伺服器啟動rabbitmq
systemctl start rabbitmq-server

査看當前叢集狀態

rabbitmqctl cluster_status

建立rabbitmq 叢集
root@mq-serverl:~# rabbitmqctl stop_app #停止 app 服務
root@mq-serverl:~# rabbitmqctl reset #*清空元資料
Resetting node rabbit@mq-serverl...

#將rabbitmq-serverl新增到叢集當中,併成為記憶體節點,不加-ram預設是磁碟節點
root@mq-serverl:~# rabbitmqctl join_cluster rabbit@mq-server3 -ram
Clustering node rabbit@mq-serverl with rabbit@mq-server3

root@mq-serverl:~# rabbitmqctl start_app #啟動 app 服務
Starting node rabbit@mq-serverl ...
completed with 3 plugins.

將叢集設定為映象模式
rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}' 一臺節點執行即可

驗證叢集狀態
[root@mq-server3 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@mq-server3' ...
[{nodes,[{disc,['rabbit@mq-server3']},{ram,['rabbit@mq-server1']}]},
{running_nodes,['rabbit@mq-server1','rabbit@mq-server3']},
{cluster_name,<<"rabbit@mq-server3">>},
{partitions,[]},
{alarms,[{'rabbit@mq-server1',[]},{'rabbit@mq-server3',[]}]}]