Rocketmq broker 是主从架构还是集群架构,可以故障自动转移吗
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的这种设计既保证了水平扩展能力(集群架构),又提供了高可用性(主从架构),是分布式消息中间件的典型架构设计。