[喵咪MQ(3)]RabbitMQ集羣安裝配置

在各項生產環境使用中,容災老是一個很重要的話題,若是單點故障會致使整個系統奔潰或者是丟失數據是否是好氣好氣的,領導會追着你問這是怎麼了?你只能說是咱們沒有經驗什麼什麼組件故障了,這個是低級玩法,高級玩法是配置好集羣容災,告訴老闆死一兩臺機器宕機了沒有事沒有影響,因此咱們今天就來說講RabbitMQ的集羣模式...node

附上:web

喵了個咪的博客:w-blog.cnvim

RabbitMQ官網 :http://www.rabbitmq.com/segmentfault

1.配置集羣

RabbitMQ經過ssh通道進行集羣直接的連接,這裏準備了兩臺服務器分別以下服務器

  • 192.168.0.1 主機名 RabbitMQ-1
  • 192.168.0.1 主機名 RabbitMQ-2

首先咱們須要在這兩臺機器上配置好互相的host能夠經過主機名進行訪問cookie

vim /etc/hosts
內網地址 RabbitMQ-1
內網地址 RabbitMQ-2
service network restart


#在 RabbitMQ-1 能通:
ping RabbitMQ-2
#在 RabbitMQ-2 能通:
ping RabbitMQ-1

1.1 配置 Erlang Cookie

當咱們能夠ping通以後咱們須要設置一下 Erlang Cookie 讓兩臺機器保持一樣的 Cookie 才能順利的創建集羣app

  1. 先啓動雙方的RabbitMQ
  2. 複製 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
  3. 粘貼到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
  4. 重啓RabbitMQ-2 RabbitMQ服務

1.2 join服務器創建關聯

Cookie咱們已經配置好了 接下來須要把兩個集羣關聯起來ssh

對 RabbitMQ-1 節點作以下操做性能

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

這個是用來在rabbitmq1上執行的,這個也能夠不執行,直接在節點服務器執行下邊的腳本,不過得保證這個rabbitmq服務是正常啓動的.學習

RabbitMQ-2 節點服務配置腳本

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@RabbitMQ-1
rabbitmqctl start_app

1.3 查看集羣狀態

能夠經過 rabbitmqctl cluster_status 查看到以下狀態證實集羣已經配置成功

[root@Sunmi-RabbitMQ-1 ~]# rabbitmqctl cluster_status
Cluster status of node ‘rabbit@Sunmi-RabbitMQ-1’ …
[{nodes,[{disc,[‘rabbit@Sunmi-RabbitMQ-1’]},
         {ram,[‘rabbit@Sunmi-RabbitMQ-2’]}]},
 {running_nodes,[‘rabbit@Sunmi-RabbitMQ-2’,’rabbit@Sunmi-RabbitMQ-1’]},
 {cluster_name,<<「rabbit@Sunmi-RabbitMQ-1」>>},
 {partitions,[]},
 {alarms,[{‘rabbit@Sunmi-RabbitMQ-2’,[]},{‘rabbit@Sunmi-RabbitMQ-1’,[]}]}]

注意:創建好集羣以後須要從新配置一下用戶 配置的用戶會影響整個集羣

2. 集羣的各項模式

關於RabbitMQ 集羣有兩大模式須要說明,一個是磁盤模式或內存模式,一個是普通模式和鏡像模式,咱們先說磁盤和內存模式

2.1 磁盤和內存模式

磁盤模式故名思議,磁盤模式就是把數據持久化到磁盤讓整個服務重啓時數據也不會丟,缺點是I/O吞吐依賴磁盤性能

內存模式也就是把數據存在內存空間中讀取寫入速度很是快,缺點是當重啓服務內存中的數據會丟失

能夠經過web管理界面看到各個節點的運行模式,也能夠經過命令來改變節點運行模式可是注意集羣中必須有一個磁盤節點才能運行

2.2 普通模式和鏡像模式

普通模式就是默認模式,咱們如今集羣有 A B 兩臺服務器,這個時候向A寫入了一條數據,而後鏈接B去讀取這條數據,B會先找到A去獲取這條數據而後返回給用戶,B並不存儲向A寫入的數據,反過來也是如此向B寫入數據不會再A存儲

這樣看起來並無什麼問題,集羣不就是這樣嗎?可是會產生兩個問題

  • A 節點會去找B節點獲取數據 ,若是B節點死了怎麼辦
  • 數據只在B節點存儲B節點是內存模式不就丟了嗎

第二點比較好解決,都用磁盤模式,寫都只寫磁盤模式的節點,雖然會下降性能可是無法解決第一個問題,B節點死了數據就沒有來源了,這個時候就須要鏡像模式出手了

鏡像模式會在全部節點之間同步數據,也就是集羣中有一個節點存活就能正常的使用下去,通常咱們會用磁盤節點專門作持久化,內存節點提供使用

配置鏡像模式只須要在主節點運行以下命令:

- p 以後加上你須要的Vhost
 rabbitmqctl set_policy -p / ha-all 「^」 ‘{「ha-mode」:」all」}’

在web管理界面隊列裏面也可以判斷出來數據存儲在幾個節點上

不要盲目追求鏡像模式,鏡像模式節點之間同步數據也會帶來開銷因此更具場景來作出合理的判斷

3 總結

關於RabbitMQ的介紹,單機模式,集羣模式的博文以及列舉完了,在以後又在使用RabbitMQ的心得以及一些有意思的地方,也會分享出啦和你們一塊兒學習討論,多謝你們的支持本小節就到這裏了....

注:筆者能力有限有說的不對的地方但願你們可以指出,也但願多多交流!

相關文章
相關標籤/搜索