【TiDB 4.0 PCTA 学习笔记】- 3.2.2 TiDB Cluster Operation(K8s 部署的 TiDB 集群运维)@3班+张近博

课程名称:课程版本(301)+ 3.2.2 TiDB Cluster Operation(K8s 部署的 TiDB 集群运维)

学习时长:40分钟

课程收获:学习了K8S部署的TiDB运维方式以及相关的操作命令

课程内容:

  1. 配置yaml
    配置TOML
  2. 滚动升级:
    1) 当用户有如下请求时,TiDB集群自动执行滚动更新:
    升级集群版本
    修改集群配置(spec.configUpdateStrategy: RollingUpdate)
    TIKV:停止前逐个迁移region leader
    PD:停止前逐个迁移leader
    通过设置StatefulSet的"partition"字段,tidb-controller-manager控制更新过程
    2) 组件排序:PD -> TiKV -> Pump -> TiDB -> TiFlash -> TiCDC
    Pod order:逆序
    错误处理:Pod升级失败,会停下来重试,而不会继续升级,影响整个集群
    3) 可能会影响客户端程序的访问,解决方案:客户端连接检查,例如testOnBorrow
  3. 扩缩容
    1) 水平扩展
    通过kubectl edit tidbcluster修改副本数
    TiDB Operator会管理好诸如leader transfer等一致性

有状态应用:缩容 不等于 删除Pod
通知PD集群拓扑改变
A) PD缩容(pd-controller):移除成员,删除Pod
B) TiKV缩容(tikv-controller):从PD删除store,等改PD驱逐leader,迁移数据,在store状态变为墓碑时,删除Pod
C) 注意点:由于leader发生转移或驱逐,可能比较耗时,TiKV副本数不应小于配置的max-replicas,TiDB缩容可能会影响客户端程序
2) 垂直扩展处置扩展 = 改变Pod的资源 = 滚动更新

  1. 大多数情况下都倾向于水平扩展
  2. TiKV/PD Pod是绑定到节点的(如果使用 Local PV),节点资源必须充足
  3. 自动failover
    1) 控制器从k8s和PD周期性地收集状态数据,从而发现故障
    2) TiDB Operator增加新的副本后,将其注册为新的TiKV store,然后TiKV自动转移region数据到新副本中(需要额外的资源)
    3) 对于PD和TiDB来说,所有Pods恢复后,新建的Pods会被移除
    4) 对TiKV和TiFlash来说,故障Pod恢复后,不会自动移除新建Pod,因为可能会影响新能,需要手动删除新建Po,比如TiKV,spec.tikv.recoverFailover:true( TiDB Operator >= v1.1.5)后,会自动删掉新建Pod
  4. 重启集群,通过kubectl edit tc ${cluster_name} -n ${namepsace}来添加annotation
  5. 检查TiDB集群状态
    1) 全局状态:kubectl get tc basic -n default
    2) tc event:kubectl describe tc basic -n default
    3) yaml:kubectl get tc basic -n default -o yaml
    4) StatefuleSet:kubectl get statefulset -n default
    5) event:kubectl describe sts -n default basic-pd
    6) kubectl get sts -n default basic-pd -o yaml
    7) Service:kubectl get svc,basic-tidb.default.svc.cluster.local,Pod域名:basic-tidb-0.basic-tidb-peer.default.svc.cluster.local
  6. 查看TiDB集群日志
    1) 查看单独Pod的日志
    kubectl logs -n ${namespace} ${pod_name}
    2) 如果 Pod包含多个容器,可以查看Pod中某个容器日志
    kubectl logs -n ${namespace} ${pod_name} -c ${container_name}
    3) 查看TiDB Operator组件的log
    kubectl get po -n tidb-admin
    然后即可查看对应组件的log
    4) 从3.0开始,slow log和application log分离
    从名称为slowlog的sidecar容器中查看slow log
  7. kubectl logs -n default basic-tidb-0 -c slowlog
    rocksdb log
  8. 进入容器:kubectl exec -it -n default basic-tikv-0 sh
  9. cat /var/lib/tikv/db/LOG
  10. 备份和恢复
    1) TiDB Operator支持以下两种备份方式
    全量备份:即席或周期性
    增量备份:当前是BR,将来用PiTR(任意时间点恢复)
    2) dumpling, lightning and BR
    dumpling:逻辑全量备份
    lightning:使用备份数据恢复TiDB集群
    BR:备份/恢复
    BR备份,BR恢复
    dumpling备份,lightning恢复
    3) TiDB Operator两种备份恢复方法,TiDB Operator < v1.1,用Helm charts>= v1.1,使用CRD
    4) 使用BR备份数据到S3
    创建RBAC资源
  11. wget https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/backup/backup-rbac.yaml
  12. kubectl apply -f backup-rback.yaml -n test1
    创建s3-secret
  13. kubectl create secret generic s3-secret --from-literal=access-key=xxx --from-literal=secret-key=yyy --namespace=test1
    创建backup-demo1-tidb-secret,保存TiDB集群的密码
  14. kubectl create secret generic backup-demo1-tidb-secret --from-literal=password=${password} --namespace=test1
    全量备份
  15. kubectl apply -f back-aws-s3.yaml
  16. 检查pod状态和S3结果
    a) kubectl get pods -n ${namespace}
    5) 使用dumpling备份到S3
    i. 全量备份
  17. kubectl apply -f backup-s3.yaml
    a) 先备份到PVC,在上传到S3
  18. 检查pod状态和S3结果
    a) kubectl get pods -n ${namespace}
    6) 使用BR从S3恢复
    全量恢复
  19. kubectl apply -f restore-aws-s3.yaml
  20. 检查pod状态和S3结果
    a) kubectl get pods -n ${namespace}
    7) 使用Lightning从S3恢复
    执行全量恢复
  21. kubectl apply -f restoe-s3.yaml,从S3拉数据到PVC,然后Lightning读取数据恢复
  22. 检查pod状态和S3结果,kubectl get pods -n ${namespace}
    8) 使用Lightning和Importer恢复tikv-importer安装
  23. 使用helm生成部署tikv-importer的yaml文件
    a) helm repo update
    b) helm search tikv-importer -l
    c) helm inspect values pingcap/tikv-importer --version=v1.1.4 > values.yaml
    d) vim values.yaml
  24. 安装tikv-importer
    a) helm install pingcap/tikv-importer --name=${cluster_name} --namespace=${namespace} --version=${chart_version} -f values.yaml
    b) Lightning安装
  25. helm inspect values pingcap/tidb-lightning --version=v1.1.4 > tidb-lightning-values.yaml
  26. edit yaml
  27. helm install pingcap/tidb-lightning --name=${release_name} --namespace=${namespace} --set FailFast=true --version=${chart_version} -f tidb-lightning-values.yaml
  28. 监控
    1) metadata.namespace要和TiDB集群一致
    2) spec.clusters.name要和TiDB集群一致
    3) 持久化监控数据
    4) 非TLS可以一个Monitor监控多个集群

同学你好,感谢参与 TiDB 4.0 课程的学习!

本篇笔记逻辑清晰、内容丰富,被评选为优质笔记,将额外获得 20 积分,并在 「TiDB 培训」分类下获得“置顶”权益,积分兑换规则将于近期开放,敬请关注!

期待您继续产出优质内容!

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。