1. etcd 在多活跨区域场景下如何保证强一致与故障切换?
etcd 在多活/跨区域场景下如何保证强一致与故障切换?
- etcd 的 Raft 一致性机制
- 跨区域多活的挑战
- 故障切换与仲裁
etcd 基于 Raft 协议实现强一致,所有写入需经 leader 并经多数节点(quorum)确认后才提交,因此数据强一致。但跨区域多活场景下,Raft 的多数投票机制与网络延迟和分区紧密相关:etcd 的节点应尽可能少地跨区域分布,通常把多数节点放在同一低延迟区域作为主,其余节点作为跨区域备份,以保证写入延迟与可用性;若节点跨越多个区域,网络分区可能导致 quorum 不可达、leader 无法当选,从而无法写入。故障切换方面,当 leader 故障,剩余节点通过选举新 leader 继续服务,但前提是存活节点仍能构成多数(quorum)。因此在跨区域多活中,etcd 通常"一个区域保 quorum,其他区域做读副本/备份",并配合 watch 与租约机制;若要跨区域强一致,需接受网络延迟对写入的拖累。etcd 不适合作为多活写入主,更适合作为"全局一致的状态/配置/选主基础"。
etcd 用 Raft 的 quorum 保证强一致,但也因此对网络分区敏感。跨区域多活中,etcd 的部署哲学是"多数节点集中在一个区域保证可用性,其余做备份",而非"多区域同时写"。故障切换依赖 quorum,失去多数则无法选主与写入。