背景
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节点
- 编辑 pd 扩容的配置文件
- 检查集群存在的潜在风险:
tiup cluster check <cluster-name> pd_scale_out.yaml --cluster --user root -p
- 自动修复集群存在的潜在风险:
tiup cluster check <cluster-name> pd_scale_out.yaml --cluster --apply --user root -p
- 执行 scale-out 命令扩容 TiDB 集群:
tiup cluster scale-out <cluster-name> pd_scale_out.yaml -p
- 扩容结束后,检查集群状态
tiup cluster display <cluster-name>
PD transfer leader
- 查看当前 PD leader节点在哪个 pd 上
tiup ctl:v<CLUSTER_VERSION> pd -u http://pd_ip:2379 member
- 将 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 上。
- 查看 pd 节点的 leader 节点是否已经到新的节点上
tiup ctl:v<CLUSTER_VERSION> pd -u http://pd_ip:2379 member leader show
- 刷新集群配置
tiup cluster reload <cluster-name> --skip-restart
缩容PD节点
- 查看集群状态,列出旧的 3 台 PD 节点 ip 和端口
tiup cluster display <cluster-name>
- 执行缩容操作
tiup cluster scale-in <cluster-name> -N old_pd_1,old_pd_2,old_pd_3
- 查看集群状态,查看旧的 pd 节点是否缩容成功
tiup cluster display <cluster-name>
- 刷新集群配置
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