RabbitMQ集羣搭建

原文:http://www.javashuo.com/article/p-ojfaxggh-gb.htmljava

 

RabbiMQ簡介

RabbiMQ是用Erang開發的,集羣很是方便,由於Erlang天生就是一門分佈式語言,但其自己並不支持負載均衡。node

RabbiMQ模式

RabbitMQ模式大概分爲如下三種:
(1)單一模式。
(2)普通模式(默認的集羣模式)。
(3) 鏡像模式(把須要的隊列作成鏡像隊列,存在於多個節點,屬於RabbiMQ的HA方案,在對業務可靠性要求較高的場合中比較適用)。
要實現鏡像模式,須要先搭建一個普通集羣模式,在這個模式的基礎上再配置鏡像模式以實現高可用。nginx

RabbiMQ特色

RabbitMQ的集羣節點包括內存節點、磁盤節點。RabbitMQ支持消息的持久化
也就是數據寫在磁盤上,最合適的方案就是既有內存節點,又有磁盤節點。web

環境:

IP地址 主機名 操做系統 防火牆和SELinux 用途
192.168.100.143 mq01 CentOS7.4(64位) 關閉 磁盤節點
192.168.100.144 mq02 CentOS7.4(64位) 關閉 內存節點
192.168.100.145 mq03 CentOS7.4(64位) 關閉 內存節點

注意,這裏三臺服務器都鏈接上互聯網,另外RabbitMQ集羣節點必須在同一網段裏,若是是跨廣域網,效果會變差。sql

RabbitMQ普通集羣配置

1. 配置hosts文件

更改三臺MQ節點的計算機名分別爲mq0一、mq02 和mq03,而後修改hosts配置文件vim

vim /etc/hostname //其餘兩臺相同 mq01.localdomain vi /etc/hosts 192.168.100.143 mq01 //注意不能帶.注意-主機名稱也要更改 192.168.100.144 mq02 192.168.100.145 mq03

2.三個節點配置yum源,安裝rabbitmq軟件

yum install -y epel-release yum install -y rabbitmq-server

3.拷貝erlang.cookie

Rabbitmq的集羣是依附於erlang的集羣來工做的,因此必須先構建起erlang的集羣景象。Erlang的集羣中各節點是經由過程一個magic cookie來實現的,這個cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的權限。因此必須保證各節點cookie一致,否則節點之間就沒法通訊。瀏覽器

[root@mq01 ~]# cat /var/lib/rabbitmq/.erlang.cookie XAHPZVPYUQDWWJIOHUPQ

用scp的方式將mq01節點的.erlang.cookie的值複製到其餘兩個節點中。ruby

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.144:/var/lib/rabbitmq/.erlang.cookie scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.145:/var/lib/rabbitmq/.erlang.cookie

4.分別查看三個節點並添加管理服務,最後啓動rabbitmq服務

RabbitMQ提供了一個很是友好的圖形化監控頁面插件(rabbitmq_management),讓咱們能夠一目瞭然看見Rabbit的狀態或集羣狀態。服務器

/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安裝狀況 /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //啓用rabbitmq_management服務 service rabbitmq-server start

5.查看監聽端口(插件監控的端口是15672)

RabbitMQ集羣搭建

6.將mq0二、mq03做爲內存節點加入mq01節點集羣中

在mq0二、mq03執行以下命令:cookie

rabbitmqctl stop_app    //停掉rabbit應用 rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盤節點 rabbitmqctl start_app //啓動rabbit應用

RabbitMQ集羣搭建
RabbitMQ集羣搭建

(1)默認rabbitmq啓動後是磁盤節點,在這個cluster命令下,mq02和mq03是內存節點,mq01是磁盤節點。
(2)若是要使mq0二、mq03都是磁盤節點,去掉--ram參數便可。
(3)若是想要更改節點類型,可使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必須停掉rabbit應用

7.查看集羣狀態

RabbitMQ集羣搭建

8.登陸rabbitmq web管理控制檯,建立新的隊列

打開瀏覽器輸入http://192.168.100.143:15672, 輸入默認的Username:guest,輸入默認的Password:guest ,登陸後出現如圖所示的界面。
RabbitMQ集羣搭建
根據界面提示建立一條隊列
RabbitMQ集羣搭建
RabbitMQ集羣搭建

在RabbitMQ集羣集羣中,必須至少有一個磁盤節點,不然隊列元數據沒法寫入到集羣中,當磁盤節點宕掉時,集羣將沒法寫入新的隊列元數據信息。

RabbitMQ鏡像集羣配置

上面已經完成RabbitMQ默認集羣模式,但並不保證隊列的高可用性,儘管交換機、綁定這些能夠複製到集羣裏的任何一個節點,可是隊列內容不會複製。雖然該模式解決一項目組節點壓力,但隊列節點宕機直接致使該隊列沒法應用,只能等待重啓,因此要想在隊列節點宕機或故障也能正常應用,就要複製隊列內容到集羣裏的每一個節點,必需要建立鏡像隊列。

鏡像隊列是基於普通的集羣模式的,而後再添加一些策略,因此你仍是得先配置普通集羣,而後才能設置鏡像隊列,咱們就以上面的集羣接着作。

設置的鏡像隊列能夠經過開啓的網頁的管理端,也能夠經過命令,這裏說的是其中的網頁設置方式。

1.建立rabbitmq策略

在mq01節點的控制檯上建立策略

(1)點擊admin菜單–>右側的Policies選項–>左側最下下邊的Add/update a policy。

(2)按照圖中的內容根據本身的需求填寫。
RabbitMQ集羣搭建

  • Name:策略名稱
  • Pattern:匹配的規則,這裏表示匹配a開頭的隊列,若是是匹配全部的隊列,那就是^.
  • Definition:使用ha-mode模式中的all,也就是同步全部匹配的隊列。問號連接幫助文檔。

(3)點擊Add policy添加策略
RabbitMQ集羣搭建
此時分別登錄mq0二、mq03兩個節點的控制檯,能夠看到上面添加的這個策略,如圖所示:
RabbitMQ集羣搭建
RabbitMQ集羣搭建

2.添加隊列

在mq01節點的控制檯上添加隊列
(1)點擊Queues菜單–>左側下邊的Add a new queue
(2)輸入Name和Arguments參數的值,別的值默認便可
RabbitMQ集羣搭建

  • Name:隊列名稱
  • Durability:隊列是否持久化
  • Node:消息隊列的節點
  • Auto delete:自動刪除
  • Arguments:使用的策略類型

(3)點擊Add queue
RabbitMQ集羣搭建
將鼠標指向+2能夠顯示出另外兩臺消息節點。

3.建立消息

(1)點擊ab隊列按鈕
(2)拖動滾動條,點擊publish message
(3)填寫相關內容
RabbitMQ集羣搭建

  • 2-Persistent:表示持久化
  • Headers:隨便填寫便可
  • Properties:點擊問號,選擇一個消息ID號
  • Payload:消息內容

(4)點擊Publish message按鈕
RabbitMQ集羣搭建
點擊queue按鈕,發現ab隊列的Ready和Total中多了一條消息記錄。
RabbitMQ集羣搭建

4.作破壞性測試

(1)將mq01節點的服務關閉,再經過mq02和mq03查看消息記錄是否還存在。

rabbitmqctl stop_app  //停掉mq01的rabbit應用

RabbitMQ集羣搭建
RabbitMQ集羣搭建
從中能夠看到ab隊列已經從以前的+2顯示成+1了,並且消息記錄是存在的。

(2)再將mq02節點的服務關閉,經過mq03查看消息記錄是否還存在。

rabbitmqctl stop_app  //停掉mq02的rabbit應用

RabbitMQ集羣搭建
從中能夠看到ab隊列和消息記錄仍是存在的,只是變成了一個節點了。

(3)將mq01和mq02的服務再啓動起來

rabbitmqctl start_app   //啓動mq0一、mq02的rabbit應用

RabbitMQ集羣搭建
從中能夠看到ab隊列後面+2變成了粉色,鼠標指上去顯示鏡像沒法同步。若是這時候停掉mq03節點的服務,那麼隊列裏面的消息將會丟失。

採起的解決辦法是選擇在mq02節點上執行同步命令。

rabbitmqctl sync_queue ab  //同步ab隊列

RabbitMQ集羣搭建
同步完成後,+2又變成了藍色。

這樣,咱們就測試了rabbitmq集羣的破壞性測試,說明集羣配置成功。

相關文章
相關標籤/搜索