恢复误删的 TiDB 集群:从 Kubernetes 全毁情况下恢复
作者: Kassadar 原文来源:https://tidb.net/blog/2695b456
概述
在 Kubernetes 环境中管理 TiDB 集群时,意外情况可能会导致整个 K8S 环境的破坏。然而,如果存储卷(挂载卷)仍然存在,我们可以通过恢复这些存储卷来重新建立 TiDB 集群。本文档将指导您在这种情况下的恢复过程。
前提条件
所有 TiDB 的存储卷(PV)未丢失。
已知每个 PV 与原 TiDB 组件(如 TiKV, PD 等)的对应关系。
无备份的 etcd 数据。
原 tc(tidb-cluster.yaml)文件未丢失
恢复步骤
预备或确认 PV 和 PVC 的配置
手动创建或确认 PV:
确保每个 PV 的配置与之前的集群设置相匹配,特别是存储大小、访问模式和任何特定的存储类别(StorageClass)。
由于原有的 PV 配置已丢失,需根据现有存储和记忆或文档中的信息重新创建 PV 对象。这要求你精确地指定存储路径、容量、访问模式等。
手动创建 PVC:
PVC 的名称应与原集群中的名称一致,以便在重新部署 TiDB Cluster 时可以正确地绑定到指定的 PV。
通常情况下,会由 TiDB-Operator 动态分配 PVC,其格式如下:
各部分含义如下:
{component}: 指 TiDB 集群的核心组件名,如
pd
、tikv
。{clusterName}: 用户在部署集群时定义的 TiDB 集群名称。
{ordinal}: 由 Kubernetes StatefulSet 管理的 Pod 序号,从 0 开始计数。
示例
假设有一个名为
example
的 TiDB 集群,包括三个 PD 实例和三个 TiKV 实例,PVCs 将命名为:PD 组件:
pd-example-pd-0
pd-example-pd-1
pd-example-pd-2
TiKV 组件:
tikv-example-tikv-0
tikv-example-tikv-1
tikv-example-tikv-2
解决 PV 与 PVC 的绑定问题
检查和调整绑定:
在部署 TiDB Cluster 之前,需要确保每个 PV 和 PVC 的配对是正确的。
可以使用 claimRef 的形势绑定 PVC,例如:
使用命令行工具(如 kubectl)检查状态:
可以使用
kubectl get pv
和kubectl get pvc
来查看它们的状态,确认是否已正确绑定。
应用原 TiDB Cluster 的配置文件
部署 TiDB Cluster:
使用之前保存的 TiDB Cluster 配置文件,通过 Kubernetes 命令行工具
kubectl
应用配置。命令示例:
kubectl apply -f tidb-cluster.yaml
。
调整确认 PV 和 PVC 的配置
尝试 PV 和 PVC 的组合
调整 PV,进行多次尝试,直到成功为止。
当 PV 和 PVC 与原集群不一致时,TiDB on K8S 将运行异常,并产生冲突的日志,例如:
TiKV 无限重启
PD 长时间卡住
可通过表格的形式尝试各种组合
恢复完成
经过多次的尝试,观察所有 pod 运行正常后
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/647797db0304ffd1539420c9b】。文章转载请联系作者。
评论