rabbitmq叢集搭建及映象佇列

2020-08-13 20:31:15

一、背景

搭建高可用的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