rabbitmq集群部署

原理:
img

Rabbitmq的鏡像集群實際上是在普通集群的基礎(chǔ)上增加了策略,它需要先按照普通集群的方式進行部署,部署完成之后再通過創(chuàng)建鏡像隊列的策略實現(xiàn)主備節(jié)點消息同步。也就是說,每個備用節(jié)點都有和主節(jié)點一樣的隊列,這個隊列是由主節(jié)點通過創(chuàng)建鏡像隊列所產(chǎn)生的,且這些備用節(jié)點能及時的同步主節(jié)點中隊列的入隊消息。當(dāng)消息設(shè)置了持久化時,每個節(jié)點都有屬于自己的本地消息持久化存儲機制。當(dāng)消息入隊和出隊時,所有關(guān)于對主節(jié)點的操作都會同步給備用節(jié)點用來更新。此集群模式在主節(jié)點宕機之后備用節(jié)點所保留的消息與主節(jié)點完全一致,即可實現(xiàn)高可用。

一、 普通集群 (主從集群)部署
1.修改三臺機器主機名和ip映射

更改三臺MQ節(jié)點的計算機名分別為mq0、mq1 和mq2,然后修改hosts配置文件

vi /etc/hosts

192.168.233.101 mq01 
192.168.233.102 mq02
192.168.233.103 mq03
2.安裝rabbitmq

命令行安裝:

yum install -y rabbitmq-server
3.同步cookie文件

將mq01機器的.erlang.cookie文件復(fù)制到mq02和mq03機器(此文件在rabbitmq服務(wù)啟動時自動生成),因為節(jié)點之間需要通過此文件來判斷是否允許交流(判斷是否屬于集群內(nèi)部節(jié)點),如果三臺機器的此文件內(nèi)容不一致則集群無法啟動成功。此文件內(nèi)容一般是由不超過255個數(shù)字或字母組成的字符串構(gòu)成。

在mq01上執(zhí)行:

scp /var/lib/rabbitmq/.erlang.cookie root@mq02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@mq03:/var/lib/rabbitmq/
4.啟動rabbitmq

在三個節(jié)點分別執(zhí)行rabbitmq啟動命令:

systemctl start rabbitmq-server

5.在從節(jié)點(mq02和mq03)執(zhí)行加入集群命令:

在mq02、mq03分別執(zhí)行命令:

rabbitmqctl stop_app
#先停止服務(wù)(注:這里的參數(shù)stop_app和stop是不一樣的,stop是停掉服務(wù),stop_app是停掉這個節(jié)點,但是并沒有停止rabbitmq依賴的erlang進程
rabbitmqctl reset
# 重置狀態(tài)(注:這里重置節(jié)點將會把此節(jié)點下的所有數(shù)據(jù)全部清除,包括隊列、交換器、虛擬主機和用戶等)
rabbitmqctl join_cluster rabbit@mq01
# 節(jié)點加入集群, 初次加入集群必須通過這種加入基準(zhǔn)節(jié)點的方式。
rabbitmqctl start_app
# 啟動服務(wù)
6.查看集群狀態(tài)

任一節(jié)點執(zhí)行:
rabbitmqctl cluster_status

# rabbitmqctl cluster_status
Cluster status of node 'rabbit@mq03'
[{nodes,[{disc,['rabbit@mq01','rabbit@mq02','rabbit@mq03']}]},
 {running_nodes,['rabbit@mq01','rabbit@mq02','rabbit@mq03']},
 {cluster_name,<<"rabbit@mq01">>},
 {partitions,[]},
 {alarms,[{'rabbit@mq01',[]},
 {'rabbit@mq02',[]},
 {'rabbit@mq03',[]}]}]

看到這些信息,說明集群已成功

7.登錄管理頁面,查看狀態(tài)

任一節(jié)點ip:15672 如無法訪問查看防火墻 ; 默認(rèn)用戶/密碼:guest/guest

可以看到三個節(jié)點的數(shù)據(jù)就表示成功了

8.集群命令
# 修改集群的名稱為rabbitmq_cluster
rabbitmqctl set_cluster_name rabbitmq_cluster 

#停止rabbitmq2 rabbitmq3服務(wù)或者rabbitmqctl stop_app停止應(yīng)用后
#在rabbitmq1上 從集群中 移除節(jié)點
rabbitmqctl forget_cluster_node rabbit@mq02
rabbitmqctl forget_cluster_node rabbit@mq03

#重置數(shù)據(jù), 用戶名密碼都會要重新設(shè)置
rabbitmqctl stop_app
rabbitmqctl reset 

#修改成磁盤(內(nèi)存)節(jié)點
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc(ram)
rabbitmqctl start_app
二、鏡像集群部署

鏡像集群是基于普通主從集群的,

1.設(shè)置策略

在mq01執(zhí)行:

rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all"}'

說明:策略正則表達式為'^'表示所有匹配所有隊列名稱 ^hello:匹配hello開頭隊列

策略說明
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
 -p Vhost: 可選參數(shù),針對指定vhost下的queue進行設(shè)置
 Name:     policy的名稱
 Pattern: queue的匹配模式(正則表達式)
 Definition:鏡像定義,包括三個部分ha-mode, ha-params, ha-sync-mode
 ha-mode:指明鏡像隊列的模式,有效值為 all/exactly/nodes
 all:表示在集群中所有的節(jié)點上進行鏡像
 exactly:表示在指定個數(shù)的節(jié)點上進行鏡像,節(jié)點的個數(shù)由ha-params指定
 nodes:表示在指定的節(jié)點上進行鏡像,節(jié)點名稱通過ha-params指定
 ha-params:ha-mode模式需要用到的參數(shù)
 ha-sync-mode:進行隊列中消息的同步方式,有效值為automatic和manual
 priority:可選參數(shù),policy的優(yōu)先級


1.查看當(dāng)前策略
rabbitmqctl list_policies
2.添加策略
rabbitmqctl set_policy ha-all '^hei' '{"ha-mode":"all","ha-sync-mode":"automatic"}' 
3.刪除策略
rabbitmqctl clear_policy ha-all
rabbitmq命令
# 創(chuàng)建賬號
$ rabbitmqctl add_user admin admin
# 設(shè)置用戶角色
$ rabbitmqctl set_user_tags admin administrator
# 設(shè)置用戶權(quán)限
# 該命令使用戶 admin 具有 / 這個 virtual host 中所有資源的配置、寫、讀權(quán)限以便管理其中的資源
$ rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
三、配置haproxy
1.安裝haproxy

yum install haproxy

2.配置代理負(fù)載
# 監(jiān)聽RabbitMQ管理頁面
listen rabbitmq_admin
 bind 0.0.0.0:15671
 server rabbitmq01 192.168.233.101:15672
 server rabbitmq02 192.168.233.102:15672
 server rabbitmq03 192.168.233.103:15672

# 監(jiān)聽HAProxy的管理頁面
listen private_monitoring
 bind 0.0.0.0:1080               # 監(jiān)聽端口
 mode http
 option httplog
 stats enable
 stats refresh 30s               # 統(tǒng)計頁面自動刷新時間
 stats uri /haproxy?stats        # 統(tǒng)計頁面url
 stats realm Haproxy Manager     # 統(tǒng)計頁面密碼框上提示文本
 stats auth admin:passw0rd       # 統(tǒng)計頁面用戶名和密碼設(shè)置
 # states hide-version           # 隱藏統(tǒng)計頁面上HAProxy的版本信息

# HAProxy監(jiān)聽RabbitMQ集群
listen rabbitmq_cluster
 bind 0.0.0.0:5671
 mode tcp                # 配置TCP模式
 timeout client 3h
 timeout server 3h
 timeout connect 3h
 option tcplog
 balance roundrobin      # 簡單輪詢

 # check inter 5000 是檢測心跳,rise 2 是2次正確認(rèn)為服務(wù)器可用,fall 3 是3次失敗認(rèn)為服務(wù)器不可用
 server rabbitmq01 192.168.233.101:5672 check inter 5000 rise 2 fall 2
 server rabbitmq02 192.168.233.102:5672 check inter 5000 rise 2 fall 2
 server rabbitmq03 192.168.233.103:5672 check inter 5000 rise 2 fall 2

3.啟動haproxy

systemctl start proxy

打完收工??!

2023.7.14補充:

收工太早了。。。
想想 如果haproxy服務(wù)掛了 或者所在的服務(wù)器斷電了怎么搞?
所以需要對ha做些工作,結(jié)合KeepAlived,架構(gòu)圖如下:


KeepAlived+ha+rabbitmq
部署結(jié)構(gòu):

rabbitmq01 服務(wù)器:部署 RabbitMQ + HAProxy + KeepAlived ;
rabbitmq02 服務(wù)器:部署 RabbitMQ + HAProxy + KeepAlived ;
rabbitmq03 服務(wù)器:部署 RabbitMQ

什么是KeepAlived?

KeepAlived 采用 VRRP (Virtual Router Redundancy Protocol,虛擬路由冗余協(xié)議) 來解決單點失效的問題,它通常由一組一備兩個節(jié)點組成,同一時間內(nèi)只有主節(jié)點會提供對外服務(wù),并同時提供一個虛擬的 IP 地址(Virtual Internet Protocol Address ,簡稱 VIP) 。 如果主節(jié)點故障,那么備份節(jié)點會自動接管 VIP 并成為新的主節(jié)點 ,直到原有的主節(jié)點恢復(fù)。

相關(guān)配置網(wǎng)上一大堆,自己找吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容