Config RabbitMQ for Cluster
- Clustering Guide — RabbitMQ
- RabbitMQ Learning III: RabbitMQ Clustering and Load Balancing
- How to Set Up the RabbitMQ Cluster on Ubuntu/Debian Linux
- Clustering Guide (vmware.com)
A few things to RabbitMQ Cluster
- Message queues 預設只會在 Cluster 其中一個 node,而訊息仍可以透過其他 node 發送或接收;如果 Message queues 要抄寫至所有 nodes,必須設定為 Quorum Queues。
- Cluster 裡每一個 node 都是視為一個 peer,彼此都是相同的,沒有主次的分別。
- Cluster 的每個 node 之間使用 cookie 認證方式,cookie 檔路徑是
/var/lib/rabbitmq/.erlang.cookie
。 - 一個 Cluster 組成 的 Node 數量,應該為奇數,例如 3、5、7等。原因是這樣的個數,才能在有 node 中斷服務時,讓 Cluster 有多數決的識別並形成共識。
- Cluster 的網路架構必須是 LAN,而不是 WAN。
實驗節點
- tpeeaprmq98 (node01)
- tpeeaprmq981 (node02)
- tpeeaprmq982 (node03)
/etc/hosts:
10.14.2.51 tpeeaprmq98
10.4.1.33 tpeeaprmq981
10.4.1.34 tpeeaprmq982
安裝 RabbitMQ
所有節點主機須完成 RabbitMQ 主程式安裝。
同步 Cookie 認證檔
scp /var/lib/rabbitmq/.erlang.cookie root@tpeeaprmq981:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@tpeeaprmq982:/var/lib/rabbitmq/
新增 Cluster
Detach the service of all nodes
# On Node01
rabbitmq-server -detached
# On Node02
rabbitmq-server -detached
# On Node03
rabbitmq-server -detached
Verify the cluster status
Creating a Cluster
將 node02 與 node03 加入到 node01。
# On Node02
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@tpeeaprmq98
rabbitmqctl start_app
# On Node03
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@tpeeaprmq98
rabbitmqctl start_app
Verify the cluster status
Node 管理
增加新 Node
# Copy Cookie from one node of the cluster
scp /var/lib/rabbitmq/.erlang.cookie root@<new-node>:/var/lib/rabbitmq/
# Join a new node into the cluster rabbit@tpeeaprmq98
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster <cluster-name>
rabbitmqctl start_app
# Alternatively, you can join it as RAM node by following command
rabbitmqctl join_cluster <cluster-name> --ram
移除 Node
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
# Force drop the node
rabbitmqctl forget_cluster_node <node-name>