【TiDB 4.0 PCTA 学习笔记】- K8s 部署的 TiDB 集群运维@1班 NULL

K8s 部署的 TiDB 集群运维

Part I: Manage TiDB cluster in Kubernetes

配置

  • 通过yaml文件
  • 通过 kubectl apply -f xxx.yaml 应用配置
  • 通过 kubectl edit tc ${cluster_name} -n ${namespace} 直接修改
  • 缺点:需要配置一个严格和TiDB集群中组件一致的结构体

滚动升级

  • 版本升级/修改集群配置
  • tidb-controller-manager 实际上是使用了 StatefulSet 中 partition的功能,但没有使用原生
    • 因为原生是删除pod再起一个,而TiKV/PD需要钱迁移leader
  • 而且TiDB组件间有启动顺序
  • 如果升级过程中某一个pod升级失败,升级步骤会终止,防止影响整个集群
  • 在Rolling update TiDB组件过程中,client连接会中断,因此需要client有自动重连的机制

扩缩容

  • 水平扩缩容

    • 修改replicas并执行kubectl edit tidbcluster
    • 扩容时需要注意原有的TiKV中是否有旧的数据,如果有需要清理掉
    • 缩容时需要先delete store再删除pod
      image
  • 垂直扩容

    • 需要有足够的资源去承担pod
    • 更建议水平扩容

故障转移

  • 如果底层StatefulSet 检测到某一个pod宕掉后,默认不会新启pod,因为需要保证pod name的唯一性
  • 因此需要自我实现 - 在TiDB cluster 的status中记下failureMember/failureStores,依据这个内容去新启pod去补足宕掉的pod造成的影响
  • 示意图 - 需要有足够的资源
    image

故障转移厚的恢复

  • TiDB / PD
    • 如果之前的pod恢复了,operator会自动恢复TiDB和PD,并自动将之前新建的pod移除
  • TiKV / TiFlash
    • 当故障pod恢复,由于其中存有数据,operator并不会去做自动的恢复
    • 需要手动的在业务低峰期去做恢复,将集群恢复至原有状态

Part II: Restarting, status and logs

重启集群组件

  • 通过编辑TiDB cluster的 customer resource对想要重启的组件配置上一个annotation
  • operator会将信息同步给各个StatefulSet,触发其rolling update

查看TiDB cluster 状态

  • kubectl get tc ${cluster_name} -n ${namespace} 获取集群全局状态

  • kubectl describe tc ${cluster_name} -n ${namespace} 获取集群所有的event

  • kubectl get tc ${cluster_name -n ${namespace} -oyaml 获取集群的yaml

  • kubectl describe sts -n {namespace} ${pod_name} 获取StatefulSet的状态

  • kubectl get sts -n ${namespace} ${pod_name} -oyaml 获取StatefulSet的yaml

  • kubectl get sve 获取集群中服务状态

查看TiDB 集群日志

  • kubectl logs -n ${namespace} ${pod_name} 单独查看某个pod的日志
  • kubectl logs -n ${namespace} ${pod_name} -c ${container_name} 单独查看这个pod对应的某个容器的日志
  • kubectl get po -n ${namespace} 查看TiDB operator的日志
  • rockdb的log目前需要进到容器中去查看(/var/lib/tikv/db/LOG)

Part III: Backup and Restore

operator支持的备份

  • 全量备份 ad-hoc / 周期性备份
  • 增量备份 通过BR来支持

通过BR来执行备份恢复

  • 创建RBAC规则
    • kubectl apply -f xxx.yaml -n ${namespace}
  • 创建s3-secret里面需要包含访问s3的key
    • kubectl create secret generic s3-secret --from-literal=access_key=xxx --from-literal=secret_key=yyy --namespace=${namespace}
  • 创建TiDB的secret (为了operator来访问TiDB自动生成GC)
    • kubectl create secret generic backup-demo1-tidb-secret --from-literal=password=${password} --namespace=${namespace}

通过dumpling/lightning/BR进行备份/恢复时,其核心是修改yaml配置文件以适用对应的场景

Part IV: Monitor

  • metadata.namespace参数需要与TiDBCluster保持一致
  • spec.clusters.name参数需要与TiDBCluster保持一致

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

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

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

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