RabbitMQ集群及負載均衡搭建

2021-08-08 15:38:14 字數 4666 閱讀 8763

通過 erlang 的分布式特性(通過 magic cookie 認證節點)進行 rabbitmq 集群,各 rabbitmq 服務為對等節點,即每個節點都提供服務給客戶端連線,進行訊息傳送與接收。

這些節點通過 rabbitmq ha 佇列(映象佇列)進行訊息佇列結構複製。本方案中搭建 2 個節點,並且都是磁碟節點(所有節點狀態保持一致,節點完全對等),只要有任何乙個節點能夠工作,rabbitmq 集群對外就能提供服務。

rabbitmq在linux下安裝再次不再贅述,回頭我會單起一篇講述rabbitmq安裝部署。

cd /etc/hosts 目錄修改host檔案

10.73.8.17 d5kl-slh1

10.72.8.17 d5kl-slh2

rabbitmq節點之間和命令列工具 (e.g. rabbitmqctl)是使用cookie互通的,cookie是一組隨機的數字+字母的字串。當rabbitmq伺服器啟動的時候,erlang vm會自動建立乙個隨機內容的cookie檔案。如果是通過源安裝rabbitmq的話,erlang cookie 檔案在/var/lib/rabbitmq/.erlang.cookie。如果是通過原始碼安裝的rabbitmq,erlang cookie檔案$home/.erlang.cookie。

.erlang.cookie預設許可權是400,所以需要先修改d5kl-slh1、d5kl-slh2中的該檔案許可權為 777 檢視d5kl-slh1中cookie檔案裡的內容:

chmod 777 .erlang.cookie

vi .erlang.cookie

然後將檔案複製到 d5kl-slh2節點的.erlang.cookie檔案中。修改完之後,將許可權還原為400

chmod 400 .erlang.cookie
要先停止現有的rabbitmq-server,再重新在後台支行

rabbitmqctl stop --停止rabbitmq-server

rabbitmq-server -detached --新增detached引數

rabbitmqctl cluster_status -- 檢視各節點狀態

如d5kl-slh1節點

rabbitmqctl cluster_status

cluster status of node rabbit@d5kl-slh1...

}, ,

, ,]}]

d5kl-slh2節點配置

rabbitmqctl join_cluster rabbit@d5kl-slh1 --將d5kl-slh2節點加入到d5kl-slh1集群

如果要使用記憶體節點,則可以使用以下命令:

將該命令rabbitmqctl join_cluster rabbit@d5kl-slh1修改為

rabbitmqctl join_cluster --ram rabbit@d5kl-slh1

集群配置好後,可以在 rabbitmq 任意節點上執行 rabbitmqctl cluster_status 來檢視是否集群配置成功。d5kl-slh1節點狀態

rabbitmqctl cluster_status

cluster status of node 'rabbit@d5kl-slh1' ...

}, ,

, ,,]}]

d5kl-slh2節點狀態

rabbitmqctl cluster_status

cluster status of node 'rabbit@d5kl-slh2' ...

}, ,

, ,,]}]

同時在web管理工具中也可以看到效果

使用rabbit映象功能,需要基於rabbitmq策略來實現,策略是用來控制和修改群集範圍的某個vhost佇列行為和exchange行為

rabbitmqctl set_policy -p hrsystem ha-allqueue"^" ''

這行命令在vhost名稱為hrsystem建立了乙個策略,策略名稱為ha-allqueue,策略模式為 all 即複製到所有節點,包含新增節點,策略正規表示式為 「^」 表示所有匹配所有佇列名稱。

例如下面的命令,^message 這個規則要根據自己修改,這個是指同步"message"開頭的佇列名稱,我們配置時使用的應用於所有佇列,所以表示式為"^"。

rabbitmqctl set_policy -p hrsystem ha-allqueue "^message" ''

haproxy提供高可用性、負載均衡以及基於tcp和http應用的**,支援虛擬主機,它是免費、快速並且可靠的一種解決方案。根據官方資料,其最高極限支援10g的併發。haproxy支援從4層至7層的網路交換,即覆蓋所有的tcp協議。就是說,haproxy 甚至還支援 mysql 的均衡負載。

haproxy的特點是:

現以10.74.8.17為例

maxconn 3000haproxy 監控頁面

#設定haproxy監控位址為http://localhost:8100/stats

stats uri /stats

stats refresh 30s

#新增使用者名稱密碼認證

stats auth admin:1234將rabbitmq的管理介面也放在haproxy

listen rabbitmq_admin  0.0.0.0:15672

server node1 10.73.8.17:15672

server node2 10.72.8.17:15672

在haproxy監聽rabbitmq5672埠

listen rabbitmq_cluster 0.0.0.0:5673 

mode tcp

option tcplog

#timeout client 3h

#timeout server 3h

option clitcpka

balance roundrobin --負載均衡演算法(#banlance roundrobin 輪詢,balance source 儲存session值,支援static-rr,leastconn,first,uri等引數)

server node1 10.73.8.17:5672 check inter 5s rise 2 fall 3 #check inter 2000 是檢測心跳頻率,rise 2是2次正確認為伺服器可用,fall 3是3次失敗認為伺服器不可用

server node2 10.72.8.17:5672 check inter 5s rise 2 fall 3

RabbitMQ 集群 負載均衡

集群的配置已經搭建好了,也成功跑通,成功做到了高可用,但是我們的程式連線節點並不會管哪個伺服器在忙 哪個伺服器空閒,完全看心情想連誰就連誰。而且 中要把每個ip的節點都手動的寫出來 既然是手動的就很有可能發現寫錯這種情況,同樣web ui 通常也不知道開啟哪個好,因為每個伺服器都有乙個 web ui...

rabbitmq 映象集群負載均衡 搭建過程

rabbitmq 映象集群配置 準備好幾臺伺服器 比如三颱 ip分別是 191,192,193 第一步 配置環境和主機名 分別設定三颱機器 設定主機名 191 命令 vim ect hostname rab191 192 命令 vim ect hostname rab192 193 命令 vim e...

Apache tomcat集群(負載均衡)

本次實踐我是在windows系統的環境下進行的,apache是2.2.21版本,tomcat是7.0.16和7.0.23兩個版本 集群中tomcat不能既有tomcat6又有tomcat7,否則雖能夠負載均衡,但不能進行session複製 2.配置tomcat 1 首先講講tomcat需要配置的檔案...