Kubernetes 上的 TiDB 集群故障自动转移

    由于 TiDB Operator 基于 StatefulSet 来管理 Pod,但 StatefulSet 在某些 Pod 发生故障时不会自动创建新节点来替换旧节点,所以,TiDB Operator 扩展了 StatefulSet 的这种行为,添加了 Auto Failover 功能。

    Auto Failover 功能在 TiDB Operator 中默认开启。部署 TiDB Operator 时,可通过设置 charts/tidb-operator/values.yaml 文件的 controllerManager.autoFailoverfalse 关闭该功能:

    TiDB 集群有 PD、TiKV 和 TiDB 三个组件,它们的故障转移策略有所不同,本节将详细介绍这三种策略。

    假设 PD 集群有 3 个节点,如果一个 PD 节点挂掉超过 5 分钟(pdFailoverPeriod 可配置),TiDB Operator 首先会将这个 PD 节点下线,然后再添加一个新的 PD 节点。此时会有 4 个 Pod 同时存在,待挂掉的 PD 节点恢复后,TiDB Operator 会将新启动的节点删除掉,恢复成原来的 3 个节点。

    cluster1-tikv-0 节点恢复后,将其删除后变为:

    假设 TiDB 集群有 3 个节点,TiDB 的故障转移策略跟 Kubernetes 中的 Deployment 的是一致的。如果一个 TiDB 节点挂掉超过 5 分钟( 可配置),TiDB Operator 会添加一个新的 TiDB 节点。此时会有 4 个 Pod 同时存在,待挂掉的 TiDB 节点恢复后,TiDB Operator 会将新启动的节点删除掉,恢复成原来的 3 个节点。