返回

深入剖析 RocketMQ 5.0 主备自动切换模式下的 Broker 选主过程

后端





## 1. RocketMQ 主备自动切换模式简介

RocketMQ 5.0 新增了主备自动切换模式,该模式基于 Dledger Controller 和 Raft 组件,实现了 Broker 的自动切换。在主备自动切换模式下,当主 Broker 出现故障时,备 Broker 将自动切换为主 Broker,从而保证消息服务的连续性和高可用性。

## 2. Broker 选主过程

在主备自动切换模式下,Broker 的选主过程分为以下几个步骤:

1. **Dledger Controller 收集 Broker 状态信息** 

Dledger Controller 定期向各个 Broker 发送心跳请求,以收集 Broker 的状态信息。当 Dledger Controller 收到某个 Broker 的心跳请求后,会更新该 Broker 的状态信息,包括 Broker 的 ID、地址、角色(主/备)等。

2. **Dledger Controller 检测 Broker 故障** 

Dledger Controller 会持续监控各个 Broker 的状态信息。当 Dledger Controller 发现某个 Broker 的心跳请求超时,或者 Broker 的状态变更为异常时,会认为该 Broker 发生了故障。

3. **Dledger Controller 发起选主请求** 

当 Dledger Controller 检测到某个 Broker 故障后,会立即发起选主请求。选主请求包含故障 Broker 的 ID 和地址,以及当前集群中所有备 Broker 的 ID 和地址。

4. **备 Broker 接收选主请求** 

备 Broker 在收到选主请求后,会首先验证请求的合法性。如果请求合法,备 Broker 会将自己标记为候选 Broker,并向其他备 Broker 发送投票请求。

5. **备 Broker 投票** 

每个备 Broker 在收到投票请求后,会根据自己的状态和集群中的其他 Broker 的状态,决定是否投票给候选 Broker。如果备 Broker 认为候选 Broker 是最合适的,则会投一票给候选 Broker。

6. **Dledger Controller 收集投票结果** 

Dledger Controller 在收到所有备 Broker 的投票结果后,会计算每个候选 Broker 的得票数。得票数最高的候选 Broker 将成为新的主 Broker。

7. **Dledger Controller 更新 Broker 状态** 

Dledger Controller 将新的主 Broker 的 ID 和地址更新到集群中所有 Broker 的状态信息中,并向所有 Broker 发送通知消息,告知新的主 Broker 的信息。

8. **备 Broker 切换为主 Broker** 

备 Broker 在收到 Dledger Controller 的通知消息后,会将自己切换为主 Broker。

## 3. 总结

RocketMQ 5.0 主备自动切换模式通过 Dledger Controller 和 Raft 组件实现了 Broker 的自动切换。该模式保证了消息服务的连续性和高可用性,使得 RocketMQ 更加适合于生产环境的使用。