RocketMQ Broker的架構與故障轉移機制
RocketMQ的Broker架構同時采用了主從架構和集群架構,并且支持故障自動轉移。下面詳細說明:
一、架構類型
1. 集群架構
-
RocketMQ天然支持分布式集群部署
-
一個RocketMQ集群包含多個Broker組(每組有主從)
-
不同Broker組之間是集群關系,共同提供服務
2. 主從架構(每組Broker內部)
-
每個Broker組內部采用主從架構
-
包含1個Master Broker和1個或多個Slave Broker
-
主從之間數據同步方式:
-
同步復制(強一致性)
-
異步復制(更高性能)
-
二、故障自動轉移能力
1. 主從切換(自動故障轉移)
-
當Master宕機時,Slave可以自動或手動提升為新的Master
-
自動切換條件:
-
配置了
brokerRole=SYNC_MASTER
(同步復制模式) -
Slave與Master數據同步狀態良好
-
NameServer檢測到Master不可用
-
2. 消費者自動重試
-
消費者會自動檢測Broker故障
-
自動連接到可用的Broker(Slave或其他Master)繼續消費
3. 生產者自動發現
-
生產者定期從NameServer獲取最新的路由信息
-
自動發現可用的Broker節點
三、典型部署架構示例
復制
下載
+-------------------+ +-------------------+ | Broker Group 1 | | Broker Group 2 | | +-----+ +-----+ | | +-----+ +-----+ | | |Master| |Slave| |<--->| |Master| |Slave| | | +-----+ +-----+ | | +-----+ +-----+ | +-------------------+ +-------------------+^ ^ ^ ^| | | |v v v v +-------------------+ +-------------------+ | NameServer | | NameServer | | (集群部署) | | (集群部署) | +-------------------+ +-------------------+
四、故障轉移流程
-
故障檢測:
-
NameServer定期(默認10秒)檢測Broker存活狀態
-
Slave會檢測Master的心跳
-
-
主從切換:
-
當Master不可達超過一定時間(默認30秒)
-
Slave自動或手動(取決于配置)接管成為新Master
-
-
路由更新:
-
NameServer更新路由信息
-
生產者和消費者從NameServer獲取新路由
-
五、配置要點
-
啟用高可用:
properties
復制
下載
brokerRole=SYNC_MASTER # 同步復制模式才能自動故障轉移
-
建議配置:
-
至少部署2個Broker組(每組1主1從)
-
部署3個及以上NameServer節點
-
使用同步復制模式保證數據安全性
六、注意事項
-
異步復制模式下自動故障轉移可能丟失少量數據
-
自動切換后需要人工介入修復原Master
-
跨機房部署時需要考慮網絡分區問題
RocketMQ的這種設計既保證了水平擴展能力(集群架構),又提供了高可用性(主從架構),是分布式消息中間件的典型架構設計。