3.2.2 TiDB Cluster Operation(K8s 部署的 TiDB 集群运维)@2班+陈墨

3.2.2 TiDB Cluster Operation(K8s 部署的 TiDB 集群运维)

配置更改:

方式一:修改 tidb.cluster.yaml 文件或tidb.cluster.toml,并执行 kubectl apply -f tidb.cluster.yaml/tidb.cluster.toml 应用

方式二:使用 kubectl edit tc <cluster-name> -n <namespace> 直接修改

滚动升级:

operator 通过 tidb-controller-manager,利用 StatefulSet 中的 partition ,逐个迁移 TiKV 或 PD 的 leader 并升级。
operator 也会自动按照组件停启的顺序完成滚动升级。
滚动升级的过程中,如果遇到了错误,operator 会直接停止在发生错误的 Pod,不会继续升级导致错误影响整个集群。
对于 TiDB 的滚动升级可能影响到 Client 端请求,尤其是长连接,需要 Client 有失败重试的机制,尽可能减小影响。

扩缩容:

水平扩缩容:

  • 扩缩容前需要注意目标节点状态,例如:扩容TiKV时需要保证目标节点没有老的TiKV数据,有就必须要清理掉;缩容 PD 时一定要先把原先的 PD remove member,才能 delete pod。
  • 使用 kubectl edit tidbcluster 修改副本数,operator 会自动把副本配置更新到 StatefulSet 完成集群的扩缩容。

垂直扩缩容:

  • 垂直扩缩容 = 调整 Pod 的资源 = 滚动升级
  • 水平扩缩容对集群影响更小,应优先考虑水平扩缩容。
  • 需要确保 Pod 资源充足

Failover

imageimage.jpg924×519 106 KB

  • StatefulSet 检查到 Pod 挂掉时,由于要保证 Pod name 的唯一性,因此并不会新建 Pod。
  • TiDB 在 status 中记录了 failure member 或 failure store,然后根据状态,新建 Pod 来消除影响。
  • 如图,TiDB Operator 并不会试图修复挂掉的 TiKV-1,而是新建了 TiKV-3。
  • 需要确保资源充足,发生 fail 时要有足够的资源新建 Pod。
  • 等挂掉的 PD 或 TiDB 恢复后,TiDB Operator 会自动把新建的组件删除掉;而对于TiKV 或 TiFlash,TiDB Operator 考虑到数据迁移带来的性能影响,并不会自动删除新建的组件,需要人为在业务低峰期设置 spec.tikv.recoveryFailover: true,这样 TiDB Operator 才会开始数据迁移并删除新建的组件。

TiDB Cluster 重启

使用

kubectl edit tc ${cluster_name} -n ${namespace}

来在 TiDB Cluster 中添加 annotation,TiDB Operator 会把 annotation 同步到各个 StatefulSet,触发 StatefulSet 的滚动升级。

TiDB Cluster 状态获取

  • kubectl get tc <name> -n <namespace>:查看集群整体状态。
  • kubectl describe tc <name> -n <namespace>:查看集群所有 EVENT。
  • kubectl get tc <name> -n <namespace> -o yaml:查看集群 yaml。
  • kubectl describe sts <name> -n <namespace>:查看 StatefulSet 状态。
  • kubectl get sts <name> -n <namespace> -o yaml:查看 StatefulSet 所有 EVENT。
  • kubectl get svc:查看集群所有service