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
- 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