故障模式

故障类型及 etcd 对它们的容忍度

在大规模机器部署中,故障是很常见的。当硬件或软件出现故障时,机器就会发生故障。当出现电源故障或网络问题时,多台机器可能会同时发生故障。多种类型的故障也可能同时发生;几乎不可能列举出所有可能的故障情况。

在本节中,我们将列出各种类型的故障,并讨论 etcd 是如何设计以容忍这些故障的。大多数用户,如果不是全部,都可以将特定的故障归类为某种类型的故障。为了应对罕见或无法恢复的故障,始终要备份 etcd 集群。

少数从节点故障

当少于一半的从节点发生故障时,etcd 集群仍然可以接受请求并继续运行而不会受到重大影响。例如,在一个五成员的 etcd 集群中,两个从节点的故障不会影响集群的操作。但是,客户端将失去与故障成员的连接。客户端库应通过自动重新连接到其他成员来隐藏这些中断,以处理读取请求。操作员应预期其他成员上的系统负载会因重新连接而增加。

领导者故障

当领导者发生故障时,etcd 集群会自动选举出一个新的领导者。选举不会在领导者故障后立即发生。由于故障检测模型基于超时机制,因此需要大约一个选举超时的时间来选出新的领导者。

在领导者选举期间,集群不能处理任何写入操作。在选举期间发送的写入请求会被排队等待处理,直到新的领导者被选出来。

已经发送给旧领导者但尚未提交的写入可能会丢失。新的领导者有权重写之前领导者的任何未提交条目。从用户的角度来看,一些写入请求可能在新的领导者选举后超时。然而,已提交的写入永远不会丢失。

新的领导者会自动延长所有租约的超时时间。这种机制确保了租约不会在授予的 TTL 之前到期,即使它是由旧领导者授予的。

多数节点故障

当集群中的大多数成员发生故障时,etcd 集群将无法继续接受更多的写入。

只有当大多数成员再次可用时,etcd 集群才能从多数节点故障中恢复。如果大多数成员无法重新上线,则操作员必须开始灾难恢复以恢复集群。

一旦大多数成员恢复正常工作,etcd 集群将自动选举出一个新的领导者并返回健康状态。新的领导者会自动延长所有租约的超时时间。这种机制确保了由于服务器端不可用而导致的租约不会到期。

网络分区

网络分区类似于少数从节点故障或领导者故障。网络分区将 etcd 集群分为两部分:一部分是成员多数方,另一部分是成员少数方。多数方成为可用的集群,少数方则不可用。etcd 中不存在“脑裂”现象,因为集群成员的添加和移除是显式进行的,并且每次更改都需要当前多数成员的批准。

如果领导者在多数方一侧,那么从多数方的角度来看,故障就是少数从节点故障。如果领导者在少数方一侧,那么这就是领导者故障。少数方一侧的领导者会退位,多数方一侧会选举出新的领导者。

一旦网络分区解除,少数方会自动识别多数方的领导者并恢复其状态。

启动过程中发生故障

只有所有必需的成员都成功启动,集群引导才能成功。如果在引导过程中发生任何故障,请删除所有成员上的数据目录,并使用新的集群令牌或新的发现令牌重新引导集群。

当然,可以像恢复运行中的集群一样恢复失败的已引导集群。然而,由于没有数据需要恢复,恢复该集群几乎总是比引导一个新集群花费更多的时间和资源。


最后更新于 2025 年 6 月 3 日:递归地将 v3.6 的内容复制到 v3.7(a90b2a6)