1.4.1 基于 TiOps 的集群滚动更新

滚动升级功能借助 TiDB 的分布式能力,升级过程中尽量保证对前端业务透明、无感知。升级时会先检查各个组件的配置文件是否合理,如果配置有问题,则报错退出;如果配置没有问题,则工具会逐个节点升级。其中对不同节点有不同的操作。

1.4.1.1 不同节点的操作

  • 升级 PD
    • 优先升级非 Leader 节点
    • 所有非 Leader 节点升级完成后再升级 Leader 节点
      • 工具会向 PD 发送一条命令将 Leader 迁移到升级完成的节点上
      • 当 Leader 已经切换到其他节点之后,再对旧的 Leader 节点做升级操作
    • 同时升级过程中,若发现有不健康的节点时工具会中止本次升级并退出,此时需要由人工判断、修复后再执行升级。
  • 升级 TiKV
    • 先在 PD 中添加一个迁移对应 TiKV 上 region leader 的调度,通过迁移 Leader 确保升级过程中不影响前端业务。
    • 等待迁移 Leader 完成之后,再对该 TiKV 节点进行升级更新
    • 等更新后的 TiKV 正常启动之后再移除迁移 Leader 的调度
  • 升级其他服务
    • 正常停止服务更新

1.4.1.2 版本升级操作

上面提到的逻辑都是在工具中集成好的功能,以升级到 4.0.0-beta.1 版本为例,我们实际上只需要一条命令就可以实现整个集群的版本升级。

  1. $ tiops upgrade -c tidb-test -t 4.0.0-beta.1
  1. -c | --cluster-name 必选参数。用以标识需要扩容的集群
  2. -t | --tidb-version 必选参数。用于表示升级的目标版本
  3. --enable-check-config:可选参数。检查配置文件是否合法,默认:disable
  4. --local-pkg 可选参数。若无外网,可将安装包拷贝中控机本地,通过此参数指相关路径进行离线安装
  5. -f | --forks 可选参数。执行命令时的并发数,默认:5;当节点数比较多时,可以适当调大
  6. -r | --role 可选参数。对指定服务进行升级操作,role 按照 TiDB 服务的角色类型取值:"pd", "tikv", "pump", "tidb", "drainer", "monitoring", "monitored", "grafana", "alertmanager"
  7. -n | --node-id 可选参数。指定升级的节点 ID
  8. --force 可算参数。常规情况是滚动升级,设置此参数,升级时会强制停机、重启