使用 PD Recover 恢复 PD 集群

    1. 下载 TiDB 官方安装包:

      是 TiDB 集群版本,例如,v5.4.0

    2. 解压安装包:

      1. tar -xzf tidb-${version}-linux-amd64.tar.gz

      pd-recovertidb-${version}-linux-amd64/bin 目录下。

    使用 PD Recover 恢复 PD 集群

    本小节详细介绍如何使用 PD Recover 来恢复 PD 集群。

    使用以下命令获取 PD 集群的 Cluster ID:

      示例:

      1. kubectl get tc test -n test -o='go-template={{.status.clusterID}}{{"\n"}}'
      2. 6821434242797747735

      第 2 步:获取 Alloc ID

      使用 pd-recover 恢复 PD 集群时,需要指定 alloc-idalloc-id 的值是一个比当前已经分配的最大的 Alloc ID 更大的值。

      1. 参考访问 Prometheus 监控数据打开 TiDB 集群的 Prometheus 访问页面。

      2. 将查询结果中的最大值乘以 100,作为使用 pd-recover 时指定的 。

      1. 删除 PD 集群 Pod。

        通过如下命令设置 spec.pd.replicas0

        1. kubectl patch tc ${cluster_name} -n ${namespace} --type merge -p '{"spec":{"pd":{"replicas": 0}}}'

        由于此时 PD 集群异常,TiDB Operator 无法将上面的改动同步到 PD StatefulSet,所以需要通过如下命令设置 PD StatefulSet spec.replicas0

        1. kubectl patch sts ${cluster_name}-pd -n ${namespace} -p '{"spec":{"replicas": 0}}'

        通过如下命令确认 PD Pod 已经被删除:

      2. 确认所有 PD Pod 已经被删除后,通过如下命令删除 PD Pod 绑定的 PVC:

        1. kubectl delete pvc -l app.kubernetes.io/component=pd,app.kubernetes.io/instance=${cluster_name} -n ${namespace}
      3. PVC 删除完成后,扩容 PD 集群至一个 Pod。

        通过如下命令设置 spec.pd.replicas1

        1. kubectl patch tc ${cluster_name} -n ${namespace} --type merge -p '{"spec":{"pd":{"replicas": 1}}}'

        由于此时 PD 集群异常,TiDB Operator 无法将上面的改动同步到 PD StatefulSet,所以需要通过如下命令设置 PD StatefulSet spec.replicas1

          1. kubectl get pod -n ${namespace}

        第 4 步:使用 PD Recover 恢复 PD 集群

        1. 通过 port-forward 暴露 PD 服务:

        2. 打开一个终端标签或窗口,进入到 pd-recover 所在的目录,使用 pd-recover 恢复 PD 集群:

          ${cluster_id}获取 Cluster ID 步骤中获取的 Cluster ID,${alloc_id} 是 步骤中获取的 pd_cluster_id 的最大值再乘以 100

          pd-recover 命令执行成功后,会打印如下输出:

          1. recover success! please restart the PD cluster
        3. 回到 port-forward 命令所在窗口,按 Ctrl+C 停止并退出。

        1. 删除 PD Pod:

          1. kubectl delete pod ${cluster_name}-pd-0 -n ${namespace}
        2. Pod 正常启动后,通过 port-forward 暴露 PD 服务:

          1. kubectl port-forward -n ${namespace} svc/${cluster_name}-pd 2379:2379
        3. 打开一个终端标签或窗口,通过如下命令确认 Cluster ID 为获取 Cluster ID 步骤中获取的 Cluster ID:

          1. curl 127.0.0.1:2379/pd/api/v1/cluster

        第 6 步:扩容 PD 集群

        使用以下命令重启 TiDB 和 TiKV 实例: