Kubernetes 上的 TiDB 集群常见异常
正常情况下,当 TiKV Pod 处于健康状态时(Pod 状态为 ),对应的 TiKV Store 状态也是健康的(Store 状态为 UP
)。但并发进行 TiKV 组件的扩容和缩容可能会导致部分 TiKV Store 异常并进入 Tombstone 状态。此时,可以按照以下步骤进行修复:
查看 TiKV Store 状态:
查看 TiKV Pod 运行状态:
kubectl get -n ${namespace} po -l app.kubernetes.io/component=tikv
对比 Store 状态与 Pod 运行状态。假如某个 TiKV Pod 所对应的 Store 处于
Offline
状态,则表明该 Pod 的 Store 正在异常下线中。此时,可以通过下面的命令取消下线进程,进行恢复:打开到 PD 服务的连接:
kubectl port-forward -n ${namespace} svc/${cluster_name}-pd ${local_port}:2379 &>/tmp/portforward-pd.log &
TiDB 长连接被异常中断
默认情况下,Linux 发送 keepalive 探测包的等待时间为 7200 秒。若需减少该时间,可通过 podSecurityContext
字段配置 sysctls
。
如果 Kubernetes 集群内的 允许配置
--allowed-unsafe-sysctls=net.*
,请为kubelet
配置该参数,并按如下方式配置 TiDB:tidb:
...
podSecurityContext:
value: "300"
如果 Kubernetes 集群内的 kubelet 不允许配置
--allowed-unsafe-sysctls=net.*
,请按如下方式配置 TiDB:tidb:
annotations:
tidb.pingcap.com/sysctl-init: "true"
podSecurityContext:
sysctls:
- name: net.ipv4.tcp_keepalive_time
注意
进行以上配置要求 TiDB Operator 1.1 及以上版本。