歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。 歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-management-of-cluster-management/
rabbitmqctl join_cluster {cluster_node} [–ram] 將節點加入指定集群中。在這個命令執行前需要停止RabbitMQ應用并重置節點。更多詳細內容請參考RabbitMQ安裝。
rabbitmqctl cluster_status 顯示集群的狀態。更多詳細內容請參考RabbitMQ安裝。
rabbitmqctl change_cluster_node_type {disc|ram} 修改集群節點的類型。在這個命令執行前需要停止RabbitMQ應用。更多詳細內容請參考RabbitMQ安裝。
rabbitmqctl forget_cluster_node [–offline] 將節點從集群中刪除,允許離線執行。更多詳細內容請參考RabbitMQ安裝。
rabbitmqctl update_cluster_nodes {clusternode} 在集群中的節點應用啟動前咨詢clusternode節點的最新信息,并更新相應的集群信息。這個和join_cluster不同,它不加入集群。考慮這樣一種情況,節點A和節點B都在集群中,當節點A離線了,節點C又和節點B組成了一個集群,然后節點B又離開了集群,當A醒來的時候,它會嘗試聯系節點B,但是這樣會失敗,因為節點B已經不在集群中了。rabbitmqctl update_cluster_nodes -n A C可以解決這種場景。 示例如下:
##假設已有node1和node組成的集群
##1.初始狀態
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{running_nodes,[rabbit@node2,rabbit@node1]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]
##2.關閉node1節點的應用
[root@node1 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@node1
##3.之后將node3加入到集群中(rabbitmqctl join_cluster rabbit@node2)
##4.再將node2節點的應用關閉
##5.最后啟動node1節點的應用,此時會報錯
[root@node1 ~]# rabbitmqctl start_app
Starting node rabbit@node1
BOOT FAILED
===========
Timeout contacting cluster nodes: [rabbit@node2].
....(省略)
##6.如果在啟動node1節點的應用之前咨詢node3并更新相關集群信息則可以解決這個問題
[root@node1 ~]# rabbitmqctl update_cluster_nodes rabbit@node3
Updating cluster nodes for rabbit@node1 from rabbit@node3
[root@node1 ~]# rabbitmqctl start_app
Starting node rabbit@node1
##7.最終集群狀態
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node3]}]},{running_nodes,[rabbit@node3,rabbit@node1]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node3,[]},{rabbit@node1,[]}]}]
rabbitmqctl force_boot 確保節點可以啟動,即使它不是最后一個關閉的節點。通常情況下,當關閉整個RabbitMQ集群時,重啟的第一個節點應該是最后關閉的節點,因為它可以看到其它節點所看不到的事情。但是有時會有一些異常情況出現,比如整個集群都掉電而所有節點都認為它不是最后一個關閉的。在這種情況下,可以調用rabbitmqctl force_boot命令,這就告訴節點可以無條件的啟動節點。在此節點關閉后,集群的任何變化,它都會丟失。如果最后一個關閉的節點永久丟失了,那么你需要優先使用rabbitmqctl forget_cluster_node --offline命令,因為它可以確保鏡像隊列的正常運轉。 示例如下:
[root@node2 ~]# rabbitmqctl force_boot
Forcing boot for Mnesia dir /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@node2
[root@node2 ~]# rabbitmq-server –detached
rabbitmqctl sync_queue [-p vhost] {queue} 指示未同步隊列queue的slave鏡像可以同步master鏡像行的內容。同步期間此隊列會被阻塞(所有此隊列的生產消費者都會被阻塞),直到同步完成。此條命令執行成功的前提是隊列queue配置了鏡像。注意,未同步隊列中的消息被耗盡后,最終也會變成同步,此命令主要用于未耗盡的隊列。 示例如下:
[root@node1 ~]# rabbitmqctl sync_queue queue
Synchronising queue 'queue' in vhost '/'
rabbitmqctl cancel_sync_queue [-p vhost] {queue} 取消隊列queue同步鏡像的操作。 示例如下:
[root@node1 ~]# rabbitmqctl cancel_sync_queue queue
Stopping synchronising queue 'queue' in vhost '/'
rabbitmqctl set_cluster_name {name} 設置集群名稱。集群名稱在客戶端連接時會通報給客戶端。Federation和Shovel插件也會有用到集群名稱的地方。集群名稱默認是集群中第一個節點的名稱,通過這個命令可以重新設置。 示例如下:
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{running_nodes,[rabbit@node2,rabbit@node1]},{cluster_name,<<"rabbit@node1">>},{partitions,[]},{alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]
[root@node1 ~]# rabbitmqctl set_cluster_name cluster_hidden
Setting cluster name to cluster_hidden
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]},{running_nodes,[rabbit@node2,rabbit@node1]},{cluster_name,<<"cluster_hidden">>},{partitions,[]},{alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]
歡迎跳轉到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-management-of-cluster-management/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
總結
以上是生活随笔 為你收集整理的RabbitMQ管理(5)——集群管理 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。