Rabbitmq群集部署
- 2020 年 4 月 2 日
- 筆記
一、部署Rabbitmq集群
Rabbitmq集群大概分為兩種方式: 1、普通模式:默認的集群模式,消息的屍體只存在一個節點上; 2、鏡像模式:把需要的隊列做成鏡像,存在於多個節點。 ha-mode:
- all:列隊到所有節點;
- exatly:隨機鏡像到其他節點上;
- nodes:鏡像到指定節點上。 集群節點模式: 1、記憶體節點:工作在記憶體上; 2、磁碟節點:工作在磁碟上; 例外:記憶體節點和磁碟節點共同存在,提高訪問速度的同時增加數據持久化。
相比記憶體節點雖然不寫入磁碟,但是它執行比磁碟節點要好,集群中,只需要一個磁碟來保存狀態就足夠了,如果集群中只有記憶體節點,那麼節點一旦宕機,所有的狀態、消息都會丟失,無法實現數據的持久化。 rpm包(提取碼:rv8g) 1、環境如下

2、安裝rabbitmq服務 在192.168.171.134/135/140節點上進行如下操作,部署rabbitmq服務:
[root@localhost ~]# mkdir rabbitmq [root@localhost ~]# cd rabbitmq/ [root@localhost rabbitmq]# ls erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm #安裝rabbitmq [root@localhost rabbitmq]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm [root@localhost rabbitmq]# chkconfig rabbitmq-server on [root@localhost rabbitmq]# /etc/init.d/rabbitmq-server start Starting rabbitmq-server (via systemctl): [ OK ]
3、配置主機192.168.171.134
[root@localhost ~]# tail -4 /etc/hosts #配置本地解析(主機名可自定義) 192.168.171.134 rabbitmq01 192.168.171.135 rabbitmq02 192.168.171.140 rabbitmq03 192.168.171.143 rabbitmq04 #將hosts文件複製到其他節點 [root@localhost ~]# scp /etc/hosts [email protected]:/etc/ [root@localhost ~]# scp /etc/hosts [email protected]:/etc/ [root@localhost ~]# scp /etc/hosts [email protected]:/etc/ #將rabbitmq01的cookie節點資訊複製到其他需要加入群集的節點 #部署群集的時候需要節點cookie資訊一致 [root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/ [root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/ [root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
4、重啟所有要加入群集的節點伺服器 在所有要加入群集的伺服器上執行以下命令進行重啟(包括rabbitmq01)
[root@localhost ~]# init 6
若重啟的時後被卡在某個介面,那麼需要強制重啟
[root@rabbitmq01 ~]# ps -ef | grep rabbitmq # 確定已經啟動,可以看到重啟後主機名已經變更為hosts解析中所配置的
5、在rabbitmq01上配置群集
[root@rabbitmq01 ~]# rabbitmqctl stop_app # 停止節點服務 Stopping node rabbit@rabbitmq01 ... [root@rabbitmq01 ~]# rabbitmqctl reset # 重置節點 Resetting node rabbit@rabbitmq01 ... [root@rabbitmq01 ~]# rabbitmqctl start_app # 啟動節點服務 Starting node rabbit@rabbitmq01 ... # 複製所返回的節點名稱
6、配置rabbitmq02、03加入rabbitmq01群集
[root@rabbitmq02 ~]# rabbitmqctl stop_app [root@rabbitmq02 ~]# rabbitmqctl reset [root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01 #以記憶體方式加入群集,後面是複製的rabbitmq01的節點名 [root@rabbitmq02 ~]# rabbitmqctl start_app [root@rabbitmq02 ~]# rabbitmq-plugins enable rabbitmq_management # 開啟網頁插件
7、在rabbitmq01上查看節點狀態
[root@rabbitmq01 ~]# rabbitmqctl cluster_status Cluster status of node rabbit@rabbitmq01 ... [{nodes,[{disc,[rabbit@rabbitmq01]}, {ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]}, {running_nodes,[rabbit@rabbitmq03,rabbit@rabbitmq02,rabbit@rabbitmq01]}, {cluster_name,<<"rabbit@rabbitmq01">>}, {partitions,[]}, {alarms,[{rabbit@rabbitmq03,[]}, {rabbit@rabbitmq02,[]}, {rabbit@rabbitmq01,[]}]}] # rabbit01工作模式為磁碟節點;rabbit02和03為記憶體節點模式 # running_nodes:正在運行的節點 # cluster_name:節點名稱 # alarms:發生問題時rabbit01、02、03會進行報警
8、在rabbitmq創建管理用戶並加入管理組 由於節點被reset重置了,所以用戶也需要重新創建
[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com Creating user "admin" ... [root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator Setting tags for user "admin" to [administrator] ...
9、登錄web介面訪問 群集內任意節點的IP+15672埠都可以進行登錄:
可以在下面的頁面看到群集節點的資訊:

10、配置web介面添加Vhost

進入創建的虛擬主機:

然後配置如下:

設置完成後再次查看虛擬主機:

設置匹配策略:

發布消息:

設置發布消息內容:



然後刷新當前頁面,即可看到在當前虛擬主機中的隊列總數:

四、單台節點加入或退出群集配置 1、節點加入群集 由於我在上面部署群集時,hosts文件已經可以解析群集內的節點,所以這裡就省略解析了
#在節點192.168.171.143伺服器上安裝rabbitmq並配置 [root@localhost src]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm [root@localhost src]# chkconfig rabbitmq-server on [root@localhost src]# /etc/init.d/rabbitmq-server start #將群集中的cookie資訊複製到本地 [root@localhost src]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/ [root@localhost src]# init 6 #重啟本機 #加入群集 [root@rabbitmq04 ~]# rabbitmqctl stop_app [root@rabbitmq04 ~]# rabbitmqctl reset [root@rabbitmq04 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01 #以記憶體運行的方式加入群集,若要以磁碟的方式加入,省略「--ram」選項即可 [root@rabbitmq04 ~]# rabbitmqctl start_app #開啟web管理頁面 [root@rabbitmq04 ~]# rabbitmq-plugins enable rabbitmq_management
查看web介面,確認rabbitmq04加入到群集:

2、單節點退出群集 1)先在rabbitmq04上面停止節點
[root@rabbitmq04 ~]# rabbitmqctl stop_app
2)回到主節點rabbitmq01上刪除節點
[root@rabbitmq04 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04 # -n:指定節點名稱 # forget_cluster_node:後面跟要刪除的節點名稱