Rabbitmq群集部署

一、部署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:後面跟要刪除的節點名稱