故障模式
在大规模机器部署中,故障是常见现象。当硬件或软件发生故障时,机器会失效。若出现断电或网络问题,多台机器可能同时失效。多种类型的故障也可能同时发生;几乎无法穷举所有可能的故障场景。
本节列举各类故障,并讨论 etcd 的设计如何容忍这些故障。大多数用户(若非全部)均可将特定故障归入某一类故障。为应对罕见或 不可恢复的故障 ,务必 备份 etcd 集群。
次要跟随者故障
当少于一半的跟随者发生故障时,etcd 集群仍可接受请求并持续进展,不会出现重大中断。例如,五个成员的 etcd 集群中发生两个跟随者故障,不会影响集群的正常运行。然而,客户端将与故障成员失去连接。客户端库应通过自动重连至其他成员,隐藏读请求的中断对用户的影响。系统管理员应预期其他成员的系统负载因重连而增加。
领导者故障排查
当领导者发生故障时,etcd 集群会自动选举新的领导者。领导者故障后,选举不会立即发生。由于故障检测机制基于超时,因此需要大约一个选举超时时间才能完成新领导者的选举。
在选举领导者期间,集群无法处理任何写入操作。选举期间发送的写入请求将被暂存,直到新领导者被选出。
已发送至旧领导者但尚未提交的写入操作可能会丢失。新领导者有权重写前任领导者的所有未提交条目。从用户角度看,新领导者选举后,部分写入请求可能会超时。然而,已提交的写入操作绝不会丢失。
新领导者会自动延长所有租约的超时时间。此机制确保即使租约由旧领导者授予,其有效期也不会在授予的 TTL 到期前终止。
多数节点故障
当集群的多数成员发生故障时,etcd 集群将失效,无法接受更多写入操作。
etcd 集群仅在多数成员恢复可用后,方可完成恢复。若多数成员无法恢复上线,则操作员必须启动 灾难恢复 以恢复集群。
一旦多数成员正常工作,etcd 集群将自动选举出新的领导者,并恢复到健康状态。新的领导者会自动延长所有租约的超时时间。该机制确保因服务器端不可用而导致的租约过期问题不会发生。
网络分区
网络分区与少数跟随者故障或领导者故障类似。网络分区会将 etcd 集群划分为两部分:一部分拥有成员多数,另一部分拥有成员少数。多数侧成为可用集群,少数侧则不可用。etcd 中不存在“脑裂”现象,因为集群成员的增删均需显式操作,且每次变更必须获得当前多数成员的批准。
如果领导者位于多数方,那么从多数方的视角来看,此次故障属于少数跟随者故障。如果领导者位于少数方,则属于领导者故障。位于少数方的领导者将主动降级,多数方将选举出新的领导者。
网络分区解除后,少数方会自动识别多数方的领导者,并恢复其状态。
启动过程中失败
集群引导仅在所有必需成员均成功启动时才能成功。若引导过程中发生任何故障,请删除所有成员上的数据目录,并使用新的集群令牌或新的发现令牌重新引导集群。
当然,可以像恢复运行中的集群一样恢复已启动失败的集群。然而,恢复该集群通常需要比启动新集群更多的时间和资源,因为无需恢复任何数据。