Kubernetes 上的 TiDB 集群常见异常

    正常情况下,当 TiKV Pod 处于健康状态时(Pod 状态为 ),对应的 TiKV Store 状态也是健康的(Store 状态为 UP)。但并发进行 TiKV 组件的扩容和缩容可能会导致部分 TiKV Store 异常并进入 Tombstone 状态。此时,可以按照以下步骤进行修复:

    1. 查看 TiKV Store 状态:

    2. 查看 TiKV Pod 运行状态:

      1. kubectl get -n ${namespace} po -l app.kubernetes.io/component=tikv
    3. 对比 Store 状态与 Pod 运行状态。假如某个 TiKV Pod 所对应的 Store 处于 Offline 状态,则表明该 Pod 的 Store 正在异常下线中。此时,可以通过下面的命令取消下线进程,进行恢复:

      1. 打开到 PD 服务的连接:

        1. 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:

      1. tidb:
      2. ...
      3. podSecurityContext:
      4. value: "300"
    • 如果 Kubernetes 集群内的 kubelet 不允许配置 --allowed-unsafe-sysctls=net.*,请按如下方式配置 TiDB:

      1. tidb:
      2. annotations:
      3. tidb.pingcap.com/sysctl-init: "true"
      4. podSecurityContext:
      5. sysctls:
      6. - name: net.ipv4.tcp_keepalive_time

    注意

    进行以上配置要求 TiDB Operator 1.1 及以上版本。