0
0
0
0
专栏/.../

TiDB 工具 | PD全部扩缩容替换注意事项

 Dora  发表于  2025-01-14

背景

PD通过扩缩容的方式全部替换

举例
原先三台PD(a,b,c)
经过扩缩容替换为(d,e,f)

PD缩容步骤

检查所有依赖 PD IP 地址和端口的脚本

比如:BR,dashboard 访问域名后的 PD ip和端口,Tiflash 中依赖的 PD ip和端口,以及其他任何可能写死的旧的 PD 的 ip 和端口。

停止scatter

如果集群开启了表级别的scatter,建议先停止

pd leader切换时会对scatter运行有影响,也为了降低scatter对扩容的影响,操作之前先把scatter停止,pd,tikv扩缩容操作完成后再开启

关闭表打散命令
curl http://{TiDBIP}:10080/tables/{db}/{table}/stop-scatter
开启表打散命令
curl http://{TiDBIP}:10080/tables/{db}/{table}/scatter

扩容PD节点

  1. 编辑 pd 扩容的配置文件
  2. 检查集群存在的潜在风险:
tiup cluster check <cluster-name> pd_scale_out.yaml --cluster --user root -p
  1. 自动修复集群存在的潜在风险:
tiup cluster check <cluster-name> pd_scale_out.yaml --cluster --apply --user root -p
  1. 执行 scale-out 命令扩容 TiDB 集群:
tiup cluster scale-out <cluster-name> pd_scale_out.yaml -p
  1. 扩容结束后,检查集群状态
tiup cluster display <cluster-name>

PD transfer leader

  1. 查看当前 PD leader节点在哪个 pd 上
tiup ctl:v<CLUSTER_VERSION> pd -u http://pd_ip:2379 member
  1. 将 PD leader 从当前成员迁走,迁到指定的 pd 节点上
tiup ctl:v<CLUSTER_VERSION> pd -u http://pd_ip:2379 member leader transfer $pd_name

##备注:$pd_name 换成 a 步骤 show出来的新的节点的 pd_name 上。
  1. 查看 pd 节点的 leader 节点是否已经到新的节点上
tiup ctl:v<CLUSTER_VERSION> pd -u http://pd_ip:2379 member leader show
  1. 刷新集群配置
tiup cluster reload <cluster-name> --skip-restart

缩容PD节点

  1. 查看集群状态,列出旧的 3 台 PD 节点 ip 和端口
tiup cluster display <cluster-name>
  1. 执行缩容操作
tiup cluster scale-in <cluster-name> -N old_pd_1,old_pd_2,old_pd_3
  1. 查看集群状态,查看旧的 pd 节点是否缩容成功
tiup cluster display <cluster-name>
  1. 刷新集群配置
tiup cluster reload <cluster-name> --skip-restart

注意事项

PD通过扩缩容全部替换后,部分组件可能由于未及时更新PD Client或者还是获取进程中的旧PD列表导致发生各种问题

可能的问题

  • dumpling, lightning, br snapshot, sync-diff 这些不应该在操作期间扩缩容,暂时忽略

  • Binlog :

    • 某些版本 会导致pump/drainer出现问题,获取的还是旧的PD信息
    • issues:https://github.com/pingcap/tidb-binlog/issues/1236
    • 该issues 在 6.1.7,6.5.4,7.1.1以及7.3以后已修复,在之前的Binlog版本中PD全部替换后会出现问题
  • TICDC:

    • 某些版本会导致TICDC任务出现报错,获取的还是旧的PD信息
    • issues:https://github.com/pingcap/tiflow/issues/9584
    • 该issues 在 6.5.6,7.1.2 修复,但修复不全面,修复后对于新建的cdc任务会报错(获取进程中的pd列表),已存在的cdc任务不会报错
  • TIDB:

    • 某些版本 Fast DDL 会有问题,获取的还是进程中的PD列表
    • 相关issues:https://github.com/pingcap/tidb/pull/48687,在7.1.6和7.5.0后修复

建议

建议可以的话在PD全部扩缩容后可以跟上集群Relaod的操作,避免问题发生

对于较大集群无法直接Reload,可以先跳过重启Reload,再视具体情况分别重启

# 直接执行Reload
执行Reload操作会tikv 会先transfer leader,在tikv较多的情况下会比较慢
tiup cluster reload <cluster-name>

# 先跳过重启刷新配置
# 然后再单独重启组件
tiup cluster reload <cluster-name> --skip-restart
tiup cluster stop/start/restart <cluster-name> -R role

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论