1. 程式人生 > >Rabbitmq叢集高可用部署詳細

Rabbitmq叢集高可用部署詳細

序言

清風萬里的季節,週末本該和親人朋友一起消遣這爛漫的花花草草,或是懶洋洋的晒個太陽聽聽風聲鳥鳴。無奈工作使然,理想使然,我回到啦公司,敲起啦鍵盤,擼起啦程式碼,程式狗的世界一片黯然,一片黯然,願天下所有努力的程式狗都夢想成真吧!!

回到正題,為什麼搭建rabbitmq叢集?rabbitmq叢集有那些模式?如何搭建Rabbitmq叢集?rabbitmq映象高可用策略有那些?

1、首先這款產品本身的優點眾多,大家最看好的便是他的非同步化提高系統抗峰值能力,然後便是系統及功能結構解耦,那麼照此兩點來說,他的在整個系統中的作用還是至關重要的,那麼如此重要,當然要考慮他的高可用性,那麼便有啦第一個問題的解答。

2、rabbitmq有3種模式,但叢集模式是2種。詳細如下:

  • 單一模式:即單機情況不做叢集,就單獨執行一個rabbitmq而已。
  • 普通模式:預設模式,以兩個節點(rabbit01、rabbit02)為例來進行說明。對於Queue來說,訊息實體只存在於其中一個節點rabbit01(或者rabbit02),rabbit01和rabbit02兩個節點僅有相同的元資料,即佇列的結構。當訊息進入rabbit01節點的Queue後,consumer從rabbit02節點消費時,RabbitMQ會臨時在rabbit01、rabbit02間進行訊息傳輸,把A中的訊息實體取出並經過B傳送給consumer。所以consumer應儘量連線每一個節點,從中取訊息。即對於同一個邏輯佇列,要在多個節點建立物理Queue。否則無論consumer連rabbit01或rabbit02,出口總在rabbit01,會產生瓶頸。當rabbit01節點故障後,rabbit02節點無法取到rabbit01節點中還未消費的訊息實體。如果做了訊息持久化,那麼得等rabbit01節點恢復,然後才可被消費;如果沒有持久化的話,就會產生訊息丟失的現象。
  • 映象模式:把需要的佇列做成映象佇列,存在與多個節點屬於RabbitMQ的HA方案。該模式解決了普通模式中的問題,其實質和普通模式不同之處在於,訊息實體會主動在映象節點間同步,而不是在客戶端取資料時臨時拉取。該模式帶來的副作用也很明顯,除了降低系統性能外,如果映象佇列數量過多,加之大量的訊息進入,叢集內部的網路頻寬將會被這種同步通訊大大消耗掉。所以在對可靠性要求較高的場合中適用。

準備叢集環境安裝RabbitMQ

我的環境如下:

1、兩臺Centos7的機器,hostname分別為:F , G .

2、IP地址分別為:F—172.18.8.229 , G—172.18.8.224。

3、修改hosts檔案如下,下面是G這臺機器的hosts檔案內容,F也需要如下配置:

[[email protected] bin]# cat /etc/hosts
127.0.0.1 G  localhost localhost.localdomain localhost4 localhost4.localdomain4 
::1       G  localhost localhost.localdomain localhost6 localhost6.localdomain6 

172.18.8.224 G
172.18.8.229 F

4、保證兩臺機器都能夠相互ping通,如下圖:

好啦,環境到此就就能滿足啦,接下來我們把rabbitmq裝在2臺機器上。

學習不看官方文件,那就別學啦,地址如下:http://www.rabbitmq.com/install-rpm.html

安裝rabbitmq依賴erlang環境,所以我們要先安裝erlang環境。

安裝完成之後,下載rabbitmq的rpm包ivh即可。如果實在不會安裝,Linux系統(二)軟體的安裝與解除安裝 裡面有安裝rabbitmq的例項,看官笑納,實在不會裝那加入左上方群,或者點選網頁右上方的X吧,一定要相信不是你的錯,是你與rabbitmq緣分不到。

安裝啟動過程中如果出現error,那可參考下面幾個方案試試:

  • vim /etc/rabbitmq/enable_plugins :刪除檔案中的內容。
  • 檢視hosts檔案是否配置完善,相互是否可以ping通
  • 檢視相關埠是否被佔用,如若佔用kill掉
  • 如果已經叢集,那麼要檢視所有叢集中的/var/lib/rabbitmq/.erlang.cookie是否一致。
  • 如果不存在上述檔案,echo $HOME ,開啟此資料夾,檢視cookie檔案是否一致。
  • 重啟電腦,防止快取資料配置未更新過來。

這裡安裝啟動成功之後,來幾個常用的操作。

[[email protected] bin]# ./rabbitmq-server -deched  --後臺啟動服務
[[email protected] bin]# ./rabbitmqctl start_app  --啟動服務
[[email protected] bin]# ./rabbitmqctl stop_app  --關閉服務
[[email protected] bin]# ./rabbitmq-plugins enable rabbitmq_management --啟動web管理外掛
[[email protected] bin]# ./rabbitmqctl add_user zlh zlh  --新增使用者,密碼
[[email protected] bin]# ./rabbitmqctl set_user_tags zlh administrator --設定zlh為administrator許可權

如果你看到如下操作,即表明啟動成功啦,並且web管理頁面的外掛也啟動成功,如果下面的6為0,則需要啟動web管理外掛

那具體rabbitmqctl 的命令詳細還要看官網文件:http://www.rabbitmq.com/man/rabbitmqctl.1.man.html

搭建rabbitmq的一般模式叢集

 在上述的兩臺機器上安裝rabbitmq完成之後,你可以看到你的機器中有如下1個檔案。路徑在$HOME中或者在/var/lib/rabbitmq中,檔名稱為.erlang.cookie,他是一個隱藏檔案。那麼這檔案儲存的內容是什麼,是做什麼用的呢?

這樣說吧:RabbitMQ的叢集是依賴erlang叢集,而erlang叢集是通過這個cookie進行通訊認證的,因此我們做叢集的第一步就是幹cookie。怎麼幹?

1、必須使叢集中也就是F,G這兩臺機器的.erlang.cookie檔案中cookie值一致,且許可權為owner只讀。

機器G中的Cookie: 機器F中的Cookie:

修改檔案許可權如下:

[[email protected] ~]# chmod 600 .erlang.cookie

2、檢視叢集狀態,我的是已經做好的。

[[email protected] bin]# ./rabbitmqctl cluster_status
Cluster status of node [email protected] ...
[{nodes,[{disc,[[email protected]]},{ram,[[email protected]]}]},
 {running_nodes,[[email protected],[email protected]]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]},
 {alarms,[{[email protected],[]},{[email protected],[]}]}]

3、停止當前機器中rabbitmq的服務

[[email protected] bin]# ./rabbitmqctl stop_app

4、把G中的rabbitmq加入到叢集中來

[[email protected] bin]# ./rabbitmqctl join_cluster --ram [email protected]

5、開啟當前機器的rabbitmq服務

[[email protected] bin]# ./rabbitmqctl start_app

6、開啟網頁管理頁面檢視nodes

如此便可以啦,你可以做下測試,驗證下我們序言中說的普通模式的說明,那必須是槓槓對的。

搭建rabbitmq的映象高可用模式叢集

寫到這裡,接下來,有朋友要請我吃飯啦,我就速戰速決赴會去啦,即便如此該有的也會都有的。go,go,go。

這一節要參考的文件是:http://www.rabbitmq.com/ha.html

首先映象模式要依賴policy模組,這個模組是做什麼用的呢?

policy中文來說是政策,策略的意思,那麼他就是要設定,那些Exchanges或者queue的資料需要複製,同步,如何複製同步?對就是做這些的。

這裡有點內容的,我先上例子慢慢說:

[[email protected] ~]# ./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

引數意思為:

ha-all:為策略名稱。

^:為匹配符,只有一個^代表匹配所有,^zlh為匹配名稱為zlh的exchanges或者queue。

ha-mode:為匹配型別,他分為3種模式:all-所有(所有的queue),exctly-部分(需配置ha-params引數,此引數為int型別比如3,眾多叢集中的隨機3臺機器),nodes-指定(需配置ha-params引數,此引數為陣列型別比如["[email protected]","[email protected]"]這樣指定為F與G這2臺機器。)。

參考示例如下

當然在web管理介面也能配置:

配置完看佇列如下,其中表示ha-haall的說明用我的ha-haall策略啦,屬於映象模式,沒有表示的就是普通模式:

 

總結

接下來是大家最喜歡的總結內容啦,內容有二,如下:

1、希望能關注我其他的文章。

2、部落格裡面有沒有很清楚的說明白,或者你有更好的方式,那麼歡迎加入左上方的2個交流群,我們一起學習探討。

相關推薦

Rabbitmq叢集可用部署詳細

序言 清風萬里的季節,週末本該和親人朋友一起消遣這爛漫的花花草草,或是懶洋洋的晒個太陽聽聽風聲鳥鳴。無奈工作使然,理想使然,我回到啦公司,敲起啦鍵盤,擼起啦程式碼,程式狗的世界一片黯然,一片黯然,願天下所有努力的程式狗都夢想成真吧!! 回到正題,為什麼搭建rabbitmq叢

RabbitMQ集群與可用部署

集群 高可用 rabbitmq 未完待續……本文出自 “藍色_風暴” 博客,請務必保留此出處http://270142877.blog.51cto.com/12869137/1984070RabbitMQ集群與高可用部署

rabbitmq+haproxy 叢集可用

環境 主機 192.168.2.47      hidden1(主機名) 主機 192.168.2.48      hidden2 (主機名) 介紹:1, 先兩臺主機更改好主機名 2,部署單機rabbitmq   3,然後再加入 叢集 一,rabbitmq 單機安裝(兩臺主

mq系列rabbitmq-02叢集+可用配置

一。 rabbitmq 叢集高可用介紹    rabbitmq的broker是由一個或者多個物理節點組成 rabbtmq程式之間共享使用者 虛擬主機 佇列 交換機,繫結和引數,也可以將多個節點 組合成一個叢集,所有的資料都會被拷貝到叢集中不同的節點 除了佇列資料  佇列資料

rabbitMQ可用方面的叢集方案

下面介紹rabbitMQ的兩個高可用方面的叢集方案 1、普通的叢集 rabbitMQ中的exchange和queue都包含meta、contents、state等資訊,exchange在叢集中的每個節點都儲存一份資料, 但是queue不一樣,queue在叢集中對於cont

Redis 可用部署

Redis 高可用 Redis 高可用原理:Redis使用sentinel機制來實現高可用,sentinel是另外一個集群,主要是用來監控所有的Redis服務器,所以主節點和從節點,監控方式仍然使用的是ping指令,sentinel每隔1秒向master發送【ping】,如果在一段時間內沒有收到【pong】或

Exchange2010可用部署及配置

Exchange2010高可用部署及配置一般企業用戶比較註重以下三個角色的高可用(容錯)方案。對於UM(統一消息)角色和邊緣傳輸角色一般不做容錯。A:Mailbox(郵箱角色)---DAGB:HUB(集線器傳輸角色)---NBLC:CAS(客戶端訪問角色)---CAS Array Exchange DAG部署

Rancher Server HA的可用部署實驗-學習筆記

mysql數據庫 haproxy配置 基礎 cal XA red cor 服務器 學習筆記 轉載於https://blog.csdn.net/csdn_duomaomao/article/details/78771731 Rancher Server HA的高可用部署實驗-

MySQL可用部署MHA

運行 code relay rontab form inter 二進制 for 簡單記錄 MHA簡介 MHA 由兩部分組成: MHA Manager(管理節點)和 MHA Node(數據節點)。 MHA Manager可以單獨部署在一臺獨立的機器上管理多個 master-

Windows Admin Center 可用部署

下一代 可用 引擎 server1 步驟 關註 orm ins 客戶端 本文老王將為大家實作Windows Admin Center的高可用部署,相信有了高可用的架構支持將更進一步推進該產品的落地環境介紹08dc2lan 10.0.0.2 255.0.0.016server

corosync+pacemaker可用部署

entos 結構圖 {} ESS 狀態 null rep download verbose OpenAIS:是實現高可用集群的一種完備解決方案;Corosync是集群管理套件的一部分,通常會與其他資源管理器一起組合使用它在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳

nginx,keepalived可用部署

環境 172.16.91.218  主 172.16.91.219   安裝包版本 nginx-1.14.0.tar.gz keepalived-2.0.7.tar.gz   把 nginx,keepalived 壓縮包 上傳到 /usr

CDH 可用部署

前期準備 配置hosts 192.168.245.105  scm-node1 192.168.245.106  scm-node2 192.168.245.107  scm-node3 設

nginx實現叢集可用

   大家知道NGINX作為反向代理伺服器可以實現負載均衡,同時也可以作為靜態檔案伺服器,它的特點就是併發支援大,單機可同時支援3萬併發,現在很多網站都把NGINX作為閘道器入口來統一排程分配後端資源。但是如果NGINX宕機了,就會導致整個後臺服務無法使用;或者當併發量真的非常大時,達到十

hadoop2.7x可用部署方案(+zookeeper)

hadoop高可用的部署,需要有2個namenode,一個是active的,一個是standby的,兩個namenode需要有一個管理員來管理,來決定決定誰active,誰standby,如果處於active狀態的的namenode壞了,立即啟動standby狀態的namenode。這個管理員就是z

ZABBIX4.0.2監控歷史資料存放Elasticsearch及叢集可用方案

一、概述 Zabbix 4.0.2是一個長期支援版本(LTS),至少提供 5 年的技術支援;下面簡單看一下Zabbix 4.0.2 新特徵更具時效的監控項值檢查(Checking item value immediately)新的 HTTP 監控項型別(New HTTP item type)監控項原型可以依

Spark HA可用部署

1.說明:    Spark Standalone 叢集是Master--Slaves架構的叢集模式,和大部分的Master--Slaves 結構叢集一樣,存在著Master單點故障的問題。Spark提供了兩種解決方案去解決這個單點故障的問題; 方案一:基於檔案系統的單點恢復 &nb

hadoop叢集可用之常見問題分析

namenode-HA問題: 兩個或以上的namenode節點數啟動後都是standby狀態 解決辦法:1、先檢視namenode節點的狀態(nn1是namenode的節點名稱) bin/hdfs haadmin -getServiceState nn1 然後使

Redis3.0的主從、叢集可用

安裝Redis3.0 yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc+±devel tcl mkdir

Keepalived+Redis主從可用部署

機器 A:192.168.252.105 B:192.168.252.106 VIP:192.168.252.101 A|B安裝 keepalived-1.3.5.tar.gz tar -zxvf keepalived-1.3.5.tar.gz cd keepalived-1.