Rabbitmq高可用集群方案(Windows環(huán)境下)

?Rabbitmq集群總體架構(gòu)


操作系統(tǒng):window 10

機器Ha-1(keepalived1):192.168.1.1

機器Ha-2(keepalived2):192.168.1.2

機器MQ node1 :192.168.200.1? (內(nèi)存節(jié)點)

機器MQ node2 :192.168.200.2? (內(nèi)存節(jié)點)

機器MQ node3 :192.168.200.3? (磁盤節(jié)點)

4 Rabbitmq集群模式

4.1 普通模式

默認的集群模式芳肌。對于Queue來說,消息實體只存在于其中一個節(jié)點兑障,A非洲、B兩個節(jié)點僅有相同的元數(shù)據(jù),即隊列結(jié)構(gòu)。當消息進入A節(jié)點的Queue中后拐纱,consumer從B節(jié)點拉取時,RabbitMQ會臨時在A地来、B間進行消息傳輸戳玫,把A中的消息實體取出并經(jīng)過B發(fā)送給consumer。所以未斑,consumer應盡量連接每一個節(jié)點咕宿,從中取消息。即對于同一個邏輯隊列蜡秽,要在多個節(jié)點建立物理Queue府阀。否則無論consumer連A或B,出口總在A芽突,會產(chǎn)生瓶頸试浙。該模式存在一個問題就是當A節(jié)點故障后,B節(jié)點無法取到A節(jié)點中還未消費的消息實體寞蚌。如果做了消息持久化田巴,那么得等A節(jié)點恢復,然后才可被消費挟秤;如果沒有持久化的話壹哺,消息會丟失。

4.2 鏡像模式

該模式解決了上述問題艘刚,其實它和普通模式不同之處在于管宵,消息實體會主動在鏡像節(jié)點間同步,而不是在consumer取數(shù)據(jù)時臨時拉取。 該模式帶來的副作用也很明顯箩朴,除了降低系統(tǒng)性能外岗喉,如果鏡像隊列數(shù)量過多,加之大量的消息進入炸庞,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會被這種同步通訊大大消耗掉钱床。所以在對可靠性要求較高的場合中適用。

5 Rabbitmq集群的基本概念

集群中有兩種節(jié)點:

內(nèi)存節(jié)點:只保存狀態(tài)到內(nèi)存(一個例外的情況是:持久的queue的持久內(nèi)容將被保存到disk)

磁盤節(jié)點:保存狀態(tài)到內(nèi)存和磁盤

顧名思義內(nèi)存節(jié)點就是將所有數(shù)據(jù)放在內(nèi)存燕雁,磁盤節(jié)點將數(shù)據(jù)放在磁盤诞丽。不過,如果在投遞消息時拐格,打開了消息的持久化僧免,那即使是內(nèi)存節(jié)點,數(shù)據(jù)還是安全的放在磁盤捏浊。

一個RabbitMQ集群中可以共享user懂衩、vhost、queue金踪、exchange等浊洞,所有的數(shù)據(jù)和狀態(tài)都是必須在所有節(jié)點上復制的,一個例外是那些當前只屬于創(chuàng)建它的節(jié)點的消息隊列胡岔,盡管它們可見且可被所有節(jié)點讀取法希。RabbitMQ節(jié)點可以動態(tài)地加入到集群中,一個節(jié)點它可以加入到集群中靶瘸,也可以從集群環(huán)集群進行一個基本的負載均衡苫亦。

6 Haproxy(反向代理)

Haproxy提供高可用性、負載均衡以及基于TCP和HTTP應用的代理怨咪,支持虛擬主機屋剑,它是免費、快速并且可靠的一種解決方案诗眨。Haproxy特別適用于那些負載特大的web站點唉匾,這些站點通常又需要會保持或七層處理。Haproxy運行在當前的硬件上匠楚,完全可以支持數(shù)以萬計的并發(fā)連接巍膘。并且它的運行模式使得它可以很簡單安全的整合進您當前的架構(gòu)中,同時可以保護你的web服務器不被暴露到網(wǎng)絡(luò)上芋簿。

HAProxy優(yōu)點:

1峡懈、HAProxy是支持虛擬主機的,可以工作在4益咬、7層(支持多網(wǎng)段);

2、能夠補充Nginx的一些缺點比如Session的保持幽告,Cookie的引導等工作梅鹦;

3、支持url檢測后端的服務器冗锁;

4齐唆、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件冻河;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度箍邮,在并發(fā)處理上也是優(yōu)于Nginx的;

5叨叙、HAProxy可以對Mysql讀進行負載均衡锭弊,對后端的MySQL節(jié)點進行檢測和負載均衡,不過在后端的MySQL slaves數(shù)量超過10臺時性能不如LVS擂错;

6味滞、HAProxy的算法較多,達到8種钮呀;

HAProxy缺點:

1. 不支持POP/SMTP協(xié)議

2. 不支持SPDY協(xié)議

3. 不支持HTTP cache功能〗0埃現(xiàn)在不少開源的lb項目,都或多或少具備HTTP cache功能爽醋。

4. 重載配置的功能需要重啟進程蚁署,雖然也是soft restart,但沒有Nginx的reaload更為平滑和友好蚂四。

5. 多進程模式支持不夠好

?7.?Keepalived(熱備份)

7.1 KeepAlived主要有兩個功能:

(1).能夠?qū)ealServer進行健康狀況檢查光戈,支持4層、5層和7層協(xié)議進行健康檢查证杭;

(2).對負載均衡調(diào)度器實現(xiàn)高可用田度,防止Director單點故障。

?7.2 KeepAlived工作過程:

? ? ?keepalived實現(xiàn)故障轉(zhuǎn)移的功能是通過VRRP(virtual router redundancy protocol虛擬路由器冗余協(xié)議)協(xié)議來實現(xiàn)的解愤。 在keepalived正常工作的時候镇饺,主節(jié)點(master)會不斷的發(fā)送心跳信息給備節(jié)點(backup),當備節(jié)點不能在一定時間內(nèi)收到主節(jié)點的心跳信息時送讲,備節(jié)點會認為主節(jié)點宕了奸笤,然后會接管主節(jié)點上的資源,并繼續(xù)向外提供服務保證其可用性哼鬓。當主節(jié)點恢復的時候监右,備節(jié)點會自動讓出資源并再次自動成為備節(jié)點。

10 架構(gòu)部署

10.1安裝環(huán)境

準備安裝介質(zhì):

jdk1.8

rabbitmq_server-3.7.14

otp_win64_21.3

haproxy-1.7.5.tar

Keepalived 1.2.21(沒有window)

10.2 rabbitmq單機部署

安裝前檢查防火墻是否關(guān)閉异希,安裝rabbitmq需要關(guān)閉防火墻=『小!!

分別在192.168.200.1扣癣,192.168.200.2惰帽,192.168.200.3節(jié)點上安裝rabbitmq server。

安裝步驟:

1.安裝jdk以及配置Java運行環(huán)境

2.安裝erlang軟件父虑,一直默認下一步该酗,安裝完畢后配置erlang環(huán)境變量

3. 安裝rabbitmq,默認下一步

4. 安裝完成后士嚎,將C:\Users\Administrator\.erlang.cookie文件替換掉C:\Windows\System32\config\systemprofile\.erlang.cookie呜魄,即erlang.cookie文件保持一致

5.以管理員角色打開cmd操作框,安裝rabbitmq插件莱衩,執(zhí)行命令:

#"C:\Program Files\RabbitMQServer\rabbitmq_server-3.7.14\sbin\rabbitmq-plugins.bat" enable

rabbitmq_management

#cd C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\sbin

#net stop RabbitMQ && net start RabbitMQ

6. 查看用戶:

#rabbitmqctl.bat list_users

7.創(chuàng)建用戶

#rabbitmqctl.bat add_user bocon bocon#EDC

8. 賦予權(quán)限

#rabbitmqctl.bat set_user_tags bocon administrator

9.運行結(jié)果


?rabbitmq鏡像集群

1.將192.168.200.1上的C:\Users\Administrator\.erlang.cookie中的內(nèi)容分別替換機器192.168.200.2,192.168.200.3上的C:\Windows\System32\config\systemprofile文件(三臺機器必須具有相同的cookie爵嗅,如果不相同的話,無法搭建集群)

2. 在機器192.168.200.1膳殷,192.168.200.2,192.168.200.3上進行重啟

#net stop RabbitMQ && net start RabbitMQ

在機器192.168.200.1操骡,192.168.200.2,192.168.200.3操作:

a): 查看節(jié)點名稱,例如在192.168.200.1機器上:

#rabbitmqctl status


b): 分別在192.168.200.1赚窃,192.168.200.2,192.168.200.3機器上的C:\Users\Administrator\AppData\Roaming\RabbitMQ (AppData默認隱藏册招,需要設(shè)置顯示隱藏文件)下,創(chuàng)建并編輯rabbitmq.config文件勒极,編輯內(nèi)容如下(包括最后的 .):

[{rabbit,[{cluster_nodes, ['rabbit@USER-20190308IA','rabbit@lenovo-PC',…}]}].

c):編輯機器192.168.200.1是掰,192.168.200.2,192.168.200.3上的hosts文件如下:

192.168.200.1 rabbit@USER-20190308IA

192.168.200.2 rabbit@lenovo-PC

192.168.200.3 rabbit@USER20190307IA

d): 配置環(huán)境變量文件,分別在192.168.200.1辱匿,192.168.200.2,192.168.200.3機器上的C:\Users\Administrator\AppData\Roaming\RabbitMQ 路徑下键痛,創(chuàng)建并編輯rabbitmq-env.con文件,

在機器192.168.200.1編輯內(nèi)容為:

NODENAME=rabbit@USER-20190308IA

NODE_IP_ADDRESS=192.168.200.1

NODE_PORT=5672

RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db

RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

在機器192.168.200.2編輯內(nèi)容為:

NODENAME= rabbit@lenovo-PC

NODE_IP_ADDRESS=192.168.200.2

NODE_PORT=5672

RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db

RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log

在機器192.168.200.3編輯內(nèi)容為:

NODENAME= USER20190307IA

NODE_IP_ADDRESS=192.168.200.3

NODE_PORT=5672

RABBITMQ_MNESIA_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\db

RABBITMQ_LOG_BASE=C:\Users\Administrator\AppData\Roaming\RabbitMQ\log


1.? 重啟服務

在機器192.168.200.1設(shè)置為內(nèi)存節(jié)點:

#rabbitmqctl stop_app

#rabbitmqctl reset

#rabbitmqctl join_cluster --ram USER20190307IA

#rabbitmqctl

start_app

在機器192.168.200.2設(shè)置為內(nèi)存節(jié)點:

#rabbitmqctl stop_app

#rabbitmqctl reset

#rabbitmqctl join_cluster --ram USER20190307IA

#rabbitmqctl

start_app


在機器192.168.200.3,192.168.200.4(默認為磁盤節(jié)點):

#rabbitmqctl stop_app

#rabbitmqctl reset

#rabbitmqctl

start_app

3.Web頁面查看


設(shè)置隊列鏡像

#rabbitmqctl set_policy -p

hrsystem ha-all queue"^" '{"ha-mode":"all"}' //意思表示以ha.開頭的queue都會復制到各個節(jié)點 ["^"匹配所有]


集群重啟的順序是固定的匾七,并且是相反的絮短。如下所述:

?????? 啟動順序:磁盤節(jié)點 => 內(nèi)存節(jié)點

?????? 關(guān)閉順序:內(nèi)存節(jié)點 => 磁盤節(jié)點

10.4 Haproxy負載均衡

1. 在192.168.1.1和192.168.1.2節(jié)點上安裝haproxy,解壓內(nèi)容:


2. 修改haproxy目錄下的haproxy配置文件昨忆,追加以下內(nèi)容:

#rabbitmq集群web頁面

listenrabbitmq_admin

??? bind 0.0.0.0:8004

??? server node1 192.168.1.177:15672

??? server node2 192.168.1.188:15672

#監(jiān)聽消息發(fā)送端口

listen win_17

??????? bind 0.0.0.0:5671

??????? mode???tcp

??????? #balance source

??????? server rabbit1 192.168.1.177:5672weight 1 check inter 5000 check rise 2 fall 2

??????? server rabbit2 192.168.1.188:5672weight 1 check inter 5000 check rise 2 fall 2

#haproxy監(jiān)控頁面

listen monitor

??? bind 0.0.0.0:1188

??? mode http?????????????????

??? stats refresh 30s

??? option httplog

???????? stats enable

???????? stats uri /

???????? stats refresh 5s

它標識并且定義了后端RabbitMQ的服務丁频。主要含義如下:

(a)“server <name>”部分:定義HAProxy內(nèi)RabbitMQ服務的標識;

(b)“ip1:5672”部分:標識了后端RabbitMQ的服務地址邑贴;

(c)“check inter <value>”部分:表示每隔多少毫秒檢查RabbitMQ服務是否可用席里;

(d)“rise <value>”部分:表示RabbitMQ服務在發(fā)生故障之后,需要多少次健康檢查才能被再次確認可用拢驾;

(e)“fall <value>”部分:表示需要經(jīng)歷多少次失敗的健康檢查之后奖磁,HAProxy才會停止使用此RabbitMQ服務。

3.點擊“run.bat”,啟動服務繁疤,rabbitmq消息web頁面咖为,訪問http://<ip>:5671


haproxy管理頁面秕狰,訪問http://<ip>:1188

10.5 keepalived熱備份(待續(xù))

目前沒有window版開源的雙機熱部署可以替代,先可以參考一下linux下的安裝部署!!!

[if !supportLists]1.????[endif]在主機192.168.1.1上步驟如下:

下載keepalived-1.1.15.tar.gz躁染,然后解壓安裝

#tarzxvf keepalived-1.1.15.tar.gz

#cdkeepalived-1.1.15

#./configure

#make

#makeinstall

2,配置keepalived

配置中的state MASTER決定了節(jié)點為主節(jié)點

priority決定了優(yōu)先級封恰,比如在有多個備用節(jié)點的時候,主節(jié)點故障后優(yōu)先級值大的接管褐啡。

主節(jié)點的配置如下:

global_defs {

??? router_id NodeA

}

vrrp_instance VI_1 {

??? state MASTER??? #設(shè)置為主服務器

??? interface eth0? #監(jiān)測網(wǎng)絡(luò)接口

??? virtual_router_id 51? #主、備必須一樣

??? priority 100?? #(主鳖昌、備機取不同的優(yōu)先級备畦,主機值較大,備份機值較小,值越大優(yōu)先級越高)

??? advert_int 1?? #VRRP Multicast廣播周期秒數(shù)

??? authentication {

?????? ?? auth_type PASS? #VRRP認證方式许昨,主備必須一致

?????? ?? auth_pass 1111?? #(密碼)

??? }

??? virtual_ipaddress {

?????? ??? 192.168.8.100/24? #VRRP HA虛擬地址

??? }???

}

[if !supportLists]2.????[endif]在機器192.168.1.2重復機器192.168.1.1的操作懂盐,主節(jié)點的配置如下:

global_defs {

??? router_id NodeB

}

vrrp_instance VI_1 {

??? state BACKUP??? #設(shè)置為主服務器

??? interface eth0? #監(jiān)測網(wǎng)絡(luò)接口

??? virtual_router_id 51? #主、備必須一樣

?????? ?????? priority 90?? #(主糕档、備機取不同的優(yōu)先級莉恼,主機值較大,備份機值較小,值越大優(yōu)先級越高)

??? advert_int 1?? #VRRP Multicast廣播周期秒數(shù)

??? authentication {

?????? ????????????? auth_type PASS? #VRRP認證方式速那,主備必須一致

????????????? ?????? auth_pass 1111?? #(密碼)

???? }

???? virtual_ipaddress {

?????? ????? 192.168.8.100/24? #VRRP HA虛擬地址

????? }

??}?

啟動keepalived:

#keepalived -D -f /usr/local/etc/keepalived/keepalived.conf

查看log消息:

#tail -f /var/log/messages

5.? ? 通過ip a 命令可以看到192.168.8.100/24綁定到了eth0上


6.? ?測試驗證俐银,192.168.8.100是對外提供的統(tǒng)一地址。

通過192.168.8.100:5672就可以訪問rabbitmq服務端仰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捶惜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荔烧,更是在濱河造成了極大的恐慌吱七,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹤竭,死亡現(xiàn)場離奇詭異踊餐,居然都是意外死亡,警方通過查閱死者的電腦和手機臀稚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門吝岭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烁涌,你說我怎么就攤上這事苍碟。” “怎么了撮执?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵微峰,是天一觀的道長。 經(jīng)常有香客問我抒钱,道長蜓肆,這世上最難降的妖魔是什么颜凯? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮仗扬,結(jié)果婚禮上症概,老公的妹妹穿的比我還像新娘。我一直安慰自己早芭,他們只是感情好彼城,可當我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著退个,像睡著了一般募壕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上语盈,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天舱馅,我揣著相機與錄音,去河邊找鬼刀荒。 笑死代嗤,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缠借。 我是一名探鬼主播干毅,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼泼返!你這毒婦竟也來了溶锭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤符隙,失蹤者是張志新(化名)和其女友劉穎趴捅,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹疫,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拱绑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了丽蝎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猎拨。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖屠阻,靈堂內(nèi)的尸體忽然破棺而出红省,到底是詐尸還是另有隱情,我是刑警寧澤国觉,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布吧恃,位于F島的核電站,受9級特大地震影響麻诀,放射性物質(zhì)發(fā)生泄漏痕寓。R本人自食惡果不足惜傲醉,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呻率。 院中可真熱鬧硬毕,春花似錦、人聲如沸礼仗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽元践。三九已至挪丢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卢厂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工惠啄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留慎恒,地道東北人。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓撵渡,卻偏偏與公主長得像融柬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子趋距,可洞房花燭夜當晚...
    茶點故事閱讀 43,627評論 2 350