按照上一篇已經搭好兩個rabbitmq單實例,下面把兩台單實例組成集群
RabbitMQ集群是一個或幾個節點的邏輯分組,每個節點共享用戶,虛擬主機,隊列,交換,綁定,運行時參數和其他分布式狀態
bg:
兩台實驗機
關閉防火牆和selinux
node1 172.16.1.130 mycentos7
node2 172.16.1.79 wikbackup79
標識符
節點名稱,集群中的唯一標識符,兩部分組成,例如rabbit@mycentos7,rabbit默認的,mycentos7主機名,並且要能解析
分別在兩台pc編輯hosts
Erlang Cookie
CLI工具如何對節點(以及彼此之間的節點)進行身份驗證:Erlang Cookie
所以集群要保證/var/lib/rabbitmq/.erlang.cookie(默認)一致,把130的復制到79
開始創建集群
假設兩個節點都已經啟動
把node1和node2加入集群,在node2上操作
停止node2上的rabbitmq
$ rabbitmqctl stop_app
重置node2rabbitmq
$ rabbitmqctl reset
加入node1集群
$ rabbitmqctl join_cluster rabbit@mycentos7
啟動node2上的rabbitmq
$ rabbitmqctl start_app
在任意節點查看集群
$ rabbitmqctl cluster_status
按照以上步驟可以隨時添加新節點
有時需要刪除節點,步驟很簡單,兩種方式
主動方式,在被刪除節點操作
先停rabbitmq
$ rabbitmqctl stop_app
重置reset
$ rabbitmqctl reset
啟動rabbitmq
$ rabbitmqctl start_app
此時就是一個干凈的單實例rabbitmq
被動方式,遠程操作,用於節點損壞無法響應
在活動節點,例如node1執行,前提是node2已經停止了rabbitmq(rabbitmqctl stop_app)
$ rabbitmqctl forget_cluster_node rabbit@wikbackup79
查看一下cluster status,發現去掉了node2
$ rabbitmqctl cluster_status
具有RAM節點的集群
RAM節點僅將元數據保留在內存中。由於RAM節點不必像磁盤節點那樣多地寫入磁盤,因此它們可以表現得更好。但是,請注意,由於持久隊列數據始終存儲在磁盤上,因此性能提高將僅影響資源管理(例如,添加/刪除隊列,交換或虛擬主機),而不會影響發布或消耗速度。
RAM節點是高級用例;在設置第一個集群時,您不應該使用它們。您應該有足夠的磁盤節點來滿足您的冗余要求,然后如有必要,添加其他RAM節點以進行擴展。
僅包含RAM節點的群集將非常易變。如果群集停止,您將無法再次啟動它,並且 將丟失所有數據。RabbitMQ在許多情況下會阻止創建僅RAM節點的群集,但不能絕對阻止。
這里的示例顯示了一個群集,其中包含一個磁盤和一個RAM節點,僅出於簡化目的。這樣的集群是一個糟糕的設計選擇。
之前創建集群的命令加入--ram參數就是創建內存節點的命令
我們先在node2重置rabbitmq
$ rabbitmqctl stop_app
$ rabbitmqctl reset
創建一個內存節點
$ rabbitmqctl --ram join_cluster rabbit@mycentos7
$ rabbitmqctl start_app
$ rabbitmqctl cluster_status
如果不加--ram參數默認是disc節點
通常我們使用默認即可,現在把剛剛創建的內存節點轉換成disc節點
$ rabbitmqctl stop_app (任何操作都要先停mq)
$ rabbitmqctl change_cluster_node_type disc
$ rabbitmqctl start_app
$ rabbitmqctl cluster_status
集群搭建完成
我們在node1和node2分新建一個隊列testQueue,testmq
此時,我們把node2停掉,發現在node2上建的隊列testmq丟失了
下一篇,測試一下高可用,鏡像模式