一、背景
搭建高可用的Rabbitmq叢集
二、過程
1、安裝erlang
安裝erlang的前置條件
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum -y install erlang
該命令會安裝最新版本
2、安裝rabbitmq
rpm命令直接安裝
3、設定各個節點機器的host(參考問題2)
4、設定erlang.cookie(參考問題1)
5、啓動主節點(./rabbitmqctl start_app)
6、從節點加入叢集(主節點host名稱爲a)
./rabbitmqctl stop_app
./rabbitmqctl join_cluster rabbit@a
./rabbitmqctl start_app
./rabbitmqctl cluster_status (檢視叢集狀態,如有問題參考問題2)
7、管理工具檢視叢集節點
8、設定映象佇列
- 叢集搭建完成後,通過主節點設定映象佇列
- 映象佇列其中一個節點被消費,其它節點訊息也會刪除(一條訊息只會被消費一次)
- 設定方式:通過設定Policies方式
- 設定vhost下所有以a開頭的交換機和佇列爲映象模式,作用於所有叢集節點
三、問題
1、.erlang.cookie
- 該檔案爲隱藏檔案,定位到相應路徑用cat .erlang.cookie命令檢視內容
- 所有位置內容需保持一致,一般包括預設位置和使用者所在目錄
- var/lib/rabbitmq(預設位置)
- /root (root使用者在這個路徑,其它使用者在對應路徑)
- 所有加入叢集的節點在上面兩個位置檔案的值都要一致
2、叢集啓動命令報錯(rabbitmqctl join_cluster)
- TCP connection succeeded but Erlang distribution failed
https://blog.csdn.net/u013492463/article/details/81032505
- Node name (or hostname) mismatch
- host不能隨意命名,要和rabbitmq中node的命名一致。比如nodes名稱爲rabbit@a(管理工具檢視)
- 加入叢集的命令:假設有兩個節點a、b,在節點b上加入叢集的命令爲:
./rabbitmqctl join_cluster rabbit@a
3、使用rpm -i 安裝erlang報錯:error: Failed dependencies
- 不要嘗試去安裝缺失的包,很可能做無用功。建議使用yum安裝erlang
- yum常用命令
- yum install(安裝包最新版本)
- yum provides(檢視缺失依賴在哪些包可以找到)
- yum remove(刪除包,可以加星號批次刪除)
- yum list(包已安裝列表,可以檢視版本)
4、rabbitmq無法啓動,提示已經在執行
- 使用ps命令找出rabbitmq進程,一個個kill掉
四、參考資料
1、官網rpm格式安裝文件
https://www.rabbitmq.com/install-rpm.html
2、參考官方中文安裝及搭建叢集文件
https://www.cnblogs.com/knowledgesea/p/6535766.html
3、Rabbitmq叢集高可用部署詳細
https://www.cnblogs.com/knowledgesea/p/6535766.html
4、.erlang.cookie檔案疑惑
https://www.cnblogs.com/crysmile/p/9471456.html
5、Error: unable to perform an operation on node
https://www.cnblogs.com/lucifer1997/p/9324130.html