87
社区成员




本文介绍 TiDB 集群运行过程中常见异常以及处理办法。
正常情况下,当 TiKV Pod 处于健康状态时(Pod 状态为 Running
),对应的 TiKV Store 状态也是健康的(Store 状态为 UP
)。但并发进行 TiKV 组件的扩容和缩容可能会导致部分 TiKV Store 异常并进入 Tombstone 状态。此时,可以按照以下步骤进行修复:
查看 TiKV Store 状态:
Copy
kubectl get -n ${namespace} tidbcluster ${cluster_name} -ojson | jq '.status.tikv.stores'
查看 TiKV Pod 运行状态:
Copy
kubectl get -n ${namespace} po -l app.kubernetes.io/component=tikv
对比 Store 状态与 Pod 运行状态。假如某个 TiKV Pod 所对应的 Store 处于 Offline
状态,则表明该 Pod 的 Store 正在异常下线中。此时,可以通过下面的命令取消下线进程,进行恢复:
打开到 PD 服务的连接:
Copy
kubectl port-forward -n ${namespace} svc/${cluster_name}-pd ${local_port}:2379 &>/tmp/portforward-pd.log &
上线对应 Store:
Copy
curl -X POST http://127.0.0.1:2379/pd/api/v1/store/${store_id}/state?state=Up
假如某个 TiKV Pod 所对应的 lastHeartbeatTime
最新的 Store 处于 Tombstone
状态 ,则表明异常下线已经完成。此时,需要重建 Pod 并绑定新的 PV 进行恢复:
将该 Store 对应 PV 的 reclaimPolicy
调整为 Delete
:
kubectl patch $(kubectl get pv -l app.kubernetes.io/instance=${cluster_name},tidb.pingcap.com/store-id=${store_id} -o name) -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}
删除 Pod 使用的 PVC:
Copy
kubectl delete -n ${namespace} pvc tikv-${pod_name} --wait=false
删除 Pod,等待 Pod 重建:
Copy
kubectl delete -n ${namespace} pod ${pod_name}
Pod 重建后,会以在集群中注册一个新的 Store,恢复完成。
·····
关于正方面的内容,如果想了解更多的话,我整理了一下,大家可以看看这个:https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/exceptions