MQ 集群高可用

2021-09-29 23:50:32 字數 3102 閱讀 4290

transaction

即事務機制,手動提交和回滾;

confirm

機制提供了

confirmlistener

和waitforconfirms

兩種方式。

confirm

機制效率明顯會高於

transaction

機制,但後者的優勢在於強一致性。如果沒有特別的要求,建議使用

conrim

機制。2.1

、從實驗來看,訊息的確認機制只是確認

publisher

傳送訊息到

broker

,由broker

進行應答,不能確認訊息是否有

效消費。

2.2、而為了確認訊息是否被傳送給

queue

,應該在傳送訊息中啟用引數

mandatory=true

,使用returnlistener接收

未被傳送成功的訊息。

2.3、接下來就需要確認訊息是否被有效消費。

publisher

端目前並沒有提供監聽事件,但提供了應答機制來保證訊息被成功消費,應答方式:

basicack:成功消費,訊息從佇列中刪除 

basicnack:requeue=true,訊息重新進入佇列,false被刪除 

basicreject:等同於basicnack 

basicrecover:訊息重入佇列,requeue=true,傳送給新的consumer,false傳送給相同的consumer 

3.1·  持久化

·  訊息確認

參考:

rabbitmq是 erlang開發的,集群 常 ,因為erlang天 就是 分布式語 ,但其本身並 持負載均衡

1.集群中的基本概念:

rabbitmq的集群節點包括記憶體節點、磁碟節點。顧名思義記憶體節點就是將所有資料放在記憶體,磁碟節點將資料放在磁碟。 過,如前 所述,如果在投遞訊息時,開啟 訊息的持久化,那麼即使是記憶體節點,資料還是安全的放在磁碟。

個rabbitmq集 群中可以共享 user,vhost,queue,exchange等,所有的資料和狀態都是必須在所有節點上覆制的, 個 外是,那些 當前只屬於建立它的節點的訊息隊 ,儘管它們可 且可被所有節點讀取。rabbitmq節點可以動態的加 到集群中, 個節點它可以加 到集群中,也可以從集群環集群會進 個基本的負載均衡。

集群中有兩種節點:

a.記憶體節點:只儲存狀態到記憶體( 個 外的情況是:持久的queue的持久內容將被儲存到disk)

b . 磁碟節點:儲存狀態到記憶體和磁碟。 記憶體節點雖然 寫 磁碟,但是它執 磁碟節點要好。集群中,只需要 個磁碟節點來儲存狀態 就 夠 如果集群中只有記憶體節點,那麼 能停 它們,否則所有的狀態,訊息等都會丟失。

那麼具體如何實現rabbitmq 可 ,我們先搭建 個普通集群模式,在這個模式基礎上再配置映象模式實現 可 ,rabbit集群前增加 個反向代 , 產者、消費者通過反向代 訪問rabbitmq集群。

架構圖如下:圖 來 上述圖 是3個rabbitmq運 在同 主機上,分別 同的服務端 。當然我們的 產實際 ,多個rabbitmq肯定是運 在 不同的物理服務上,否則就失去 高可用的意義。

集群模式配置

設計架構可以如下:在 個集群 ,有4台機 ,其中1臺使 磁碟模式,另2臺使 記憶體模式。2臺記憶體模式的節點, 疑速度 快,因此客戶端(consumer、producer)連線訪問它們。 磁碟模式的節點,由於磁碟io相對較慢,因此僅作資料備份使 ,另外 臺作為反向代 。

四台服務 hostname分別為:queue 、panyuntao1、panyuntao2、panyuntao3(ip:172.16.3.110) 配置rabbitmq集群 常簡單,只需要 個命令,配置步驟如下

:172.16.3.32 queue 172.16.3.107 panyuntao1 172.16.3.108 panyuntao2

還有hostname 件也要正確,分別是queue、panyuntao1、panyuntao2,如果修改hostname建議安裝rabbitmq前修改。 請注意rabbitmq集群節點必須在同 個 段 ,如果是跨 域 效果就差。

rabbitmq的集群是依賴於erlang的集群來 作的,所以必須先構建起erlang的集群環境。erlang的集群中各節點是通過 個 magic cookie來實現的,這個cookie存放在 /var/lib/rabbitmq/.erlang.cookie 中, 件是400的許可權。所以必須保證各節點 cookie保持 致,否則節點之間就 法通訊。

-r--------. 1 rabbitmq rabbitmq 20 3 5 00:00 /var/lib/rabbitmq/.erlang.cookie 將其中 臺節點上的.erlang.cookie值複製下來儲存到其他節點上。或者使 scp的 法也可,但是要注意 件的許可權和屬主屬 組。

我們這 將queue中的cookie 複製到 panyuntao1、panyuntao2中,先修改下panyuntao1、panyuntao2中的.erlang.cookie許可權 #chmod 777 /var/lib/rabbitmq/.erlang.cookie 將queue的/var/lib/rabbitmq/.erlang.cookie這個 件,拷 到panyuntao1、panyuntao2的同 位置(反過來亦可),該 件是 集群節點進 通訊的驗證金鑰,所有節點必須 致。拷完後重啟下rabbitmq。 複製好後別忘記還原.erlang.cookie的許可權,否則可能會遇到錯誤

#chmod 400 /var/lib/rabbitmq/.erlang.cookie

設定好cookie後先將三個節點的rabbitmq重啟 # rabbitmqctl stop

# rabbitmq-server start

queue# rabbitmqctl stop panyuntao1# rabbitmqctl stop panyuntao2# rabbitmqctl stop

queue# rabbitmq-server -detached panyuntao1# rabbitmq-server -detached panyuntao2# rabbitmq-server -detached

分別檢視下每個節點

queue# rabbitmqctl cluster_status

高可用集群

高可用集群主要實現自動偵測 auto detect 故障 自動切換 故障轉移 failover 和自動恢復 failback 簡單來說就是,用高可用集群軟體實現故障檢查和故障轉移 故障 備份主機切換 的自動化,當然像負載均衡 dns分發也可提供高可性。active passive 主備模型 acti...

Keepalived Nginx高可用集群

安裝環境 centos6.6 x64 nginx版本 1.9.3 keepalived版本 1.2.18 ipvip 主節點192.168.11.21 192.168.11.20 備節點192.168.11.22 192.168.11.20 1.1 安裝openssl tar zxvf openss...

高可用集群 fence

一 物理機安裝fence 開啟服務,並做相應設定 刪除生成的鑰匙,重新擷取 rm fr etc cluster fence xvm.key dd if dev urandom of etc cluster fence xvm.key bs 128 count 1 重啟服務 systemctl res...