環境說明
假設我們有三台 CentOS Stream 9 Linux 主機,hostname 分別叫做:mq-master、mq-node01、mq-node02。
安裝 RabbitMQ
分別在三台主機上安裝 RabbitMQ:
首先安裝 erlang:
$ wget https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.1/erlang-26.2.1-1.el9.x86_64.rpm
$ dnf install -y ./erlang-26.2.1-1.el9.x86_64.rpm
安裝 rabbitmq-server:
$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.12.12/rabbitmq-server-3.12.12-1.el8.noarch.rpm
$ dnf install -y ./rabbitmq-server-3.12.12-1.el8.noarch.rpm
啟動 rabbitmq-server:
$ systemctl start rabbitmq-server.service
$ systemctl enable rabbitmq-server.service
設定開啟 Web 管理頁面:
$ rabbitmq-plugins enable rabbitmq_management
設定防火牆:
$ firewall-cmd --add-port={5672,15672}/tcp --permanent
$ firewall-cmd --reload
新增管理 User:帳號 admin、密碼 123456:
$ rabbitmqctl add_user admin 123456
$ rabbitmqctl set_user_tags admin administrator
$ rabbitmqctl set_permissions admin ".*" ".*" ".*"
三台Linux主機分別依照上述步驟安裝 RabbitMQ,安裝完後,使用 http://主機IP:15672 可看到 Web 管理頁面。
Cluster 設定
在三台主機上分別修改 /etc/hosts 檔案:
$ vi /etc/hosts
並加入三台主機的 IP 與 hostname:
在三台主機上,分別加入防火牆設定:
$ firewall-cmd --add-port={4369/tcp,25672/tcp} --permanent
$ firewall-cmd --reload
先分別停止 mq-ndoe01 跟 mq-node02 的 rabbitmq-server 服務:
$ systemctl stop rabbitmq-server.service
分別複製 mq-master 主機的 erlang.cookie 檔案到 mq-ndoe01 跟 mq-node02 上:
$ scp /var/lib/rabbitmq/.erlang.cookie root@mq-node01:/var/lib/rabbitmq/
$ scp /var/lib/rabbitmq/.erlang.cookie root@mq-node02:/var/lib/rabbitmq/
然後分別檢查三台主機上的 erlang.cookie 內容是否一致:
$ cat /var/lib/rabbitmq/.erlang.cookie
分別重新啟動 mq-ndoe01 跟 mq-node02 上的 rabbitmq-server 服務:
$ systemctl restart rabbitmq-server.service
然後,可以把 mq-node01 加入到 cluster 裡。在 mq-node01 主機上,輸入以下指令:
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster rabbit@mq-master
$ rabbitmqctl start_app
把 mq-node02 加入到 cluster 裡。在 mq-node02 主機上,輸入以下指令:
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster rabbit@mq-master
$ rabbitmqctl start_app
檢查 Cluster Status:
$ rabbitmqctl cluster_status
開啟三台主機的 Web 管理頁面,都可以看到有三個 Node 了 :