一、文档背景/目的
在日常运维 TiDB 集群的过程中,通常不建议对集群的 IP、port 和目录进行调整。但有时可能会遇到诸如机房搬迁、网络调整或者磁盘分配错误等原因,不得不调整现有的 tidb 集群。由于这上面三种 case 都需要停机(因为 PD 换了 IP 或端口之后 TiDB 和 TiKV 挂掉),并且涉及 PD 更换 IP / 端口需要销毁 PD 重建,属于高风险操作,因此在 TiUP 中未直接支持。
本文档提供了使用 TiUP 修改 TiDB 集群 IP、port 和目录的操作方法,供大家在无法通过扩缩容方式调整上述配置时使用,注意谨慎使用。
【注意事项】
-
线上环境操作,必须先备份数据,若操作过程导致数据丢失,则可能再也无法恢复集群,至少需要备份:
- 中控机的 ~/.tiup/storage/cluster/clusters/ 目录
- ~/.tiup/storage/cluster/clusters//meta.yaml 中显示的所有数据目录(data_dir)
-
IP、port 和目录调整都需要停止集群,线上系统请协调好停机窗口,并做好充分准备和验证工作。
-
由于调整 PD 的 ip 和 port 需要对整个 PD 集群进行重建,当原先部署了依赖于 PD 持久化数据的同步组件时(比如 TiCDC 的 changefeed 依赖于 PD),可能需要重新同步数据,因此需要权衡好调整的利弊;另外 pd 重建的方法可能跟 tiup cluster 版本有关,若最新版本不支持,可以考虑使用旧版本重建。
-
最后重要的事情再强调三遍:调整前一定要备份!一定要备份!!一定要备份!!!
二、TiUP 修改集群 IP
当前集群架构:
1.集群调整目标
2.停止集群
[tidb@localhost ~]$ tiup cluster stop tidb-test
3.修改配置文件 meta.yaml
注意:
- 修改前请提前做好配置文件和数据目录的备份
- 按照上述表格调整源 IP 至目标 IP,建议将 pd name 中包含的 IP 也调整为目标 IP
[tidb@localhost ~]$ vi ~/.tiup/storage/cluster/clusters/tidb-test/meta.yaml
4.调整服务器 IP 地址
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network
5.重建 PD 集群
请参考官方文档 PD Recover 中的步骤来重建 PD 集群:
-
获取 Cluster ID
从 PD 日志获取 Cluster ID(推荐)
[tidb@localhost ~]$ cat /tidb-deploy/pd-2379/log/pd.log | grep "init cluster id" [2020/10/10 11:13:22.794 +08:00] [INFO] [server.go:343] ["init cluster id"] [cluster-id=6881824393201874622] [2020/10/10 11:15:00.388 +08:00] [INFO] [server.go:343] ["init cluster id"] [cluster-id=6881548221407099619] [2020/10/10 11:22:31.005 +08:00] [INFO] [server.go:343] ["init cluster id"] [cluster-id=6881548221407099619]
-
获取已分配 ID
从 PD 日志获取已分配最大ID
[tidb@localhost ~]$ cat /tidb-deploy/pd-2379/log/pd*.log | grep "idAllocator allocates a new id" | awk -F'=' '{print $2}' | awk -F']' '{print $1}' | sort -r | head -n 1 1000
-
移除所有 PD 旧数据目录
[tidb@localhost data1]$ mv /data1/pd-2379 /data2
-
部署新的 PD 集群
[tidb@localhost ~]$ tiup cluster:v1.2.1 reload tidb-test -R pd --force
-
使用 pd-recover 恢复 PD 集群
注意使用调整后的新 PD IP 来进行 pd-recover,pd-recover 和集群版本保持一致
[tidb@localhost ~]$ tiup pd-recover:v4.0.7 -endpoints http://172.16.61.111:2379 -cluster-id 6881548221407099619 -alloc-id 10000 Starting component `pd-recover`: -endpoints http://172.16.61.111:2379 -cluster-id 6881489901460671898 -alloc-id 10000 recover success! please restart the PD cluster
6. reload 和 restart 集群
[tidb@localhost ~]$ tiup cluster reload tidb-test
[tidb@localhost ~]$ tiup cluster restart tidb-test
7.检查集群状态和数据
提示:集群恢复后,请做好业务数据的验证。
三、TiUP 修改集群 port
当前集群架构:
1.集群调整目标
2.停止集群
[tidb@localhost ~]$ tiup cluster stop tidb-test
3.修改配置文件 meta.yaml
说明:
- 修改前期提前做好配置文件和数据目录的备份
- 按照上述表格调整所有组件的端口,将 pd name 中的 port 也调整为目标 port
- 目录中包含的 port 信息不需要调整
[tidb@localhost ~]$ vi ~/.tiup/storage/cluster/clusters/tidb-test/meta.yaml
4.重建 PD 集群
请参考官方文档 PD Recover 中的步骤来重建 PD 集群:
-
获取 Cluster ID
从 PD 日志获取 Cluster ID(推荐)
[tidb@localhost ~]$ cat /tidb-deploy/pd-2379/log/pd.log | grep "init cluster id" [2020/10/10 11:48:40.048 +08:00] [INFO] [server.go:343] ["init cluster id"] [cluster-id=6881548221407099619]
-
获取已分配 ID
从 PD 日志获取已分配最大ID
[tidb@localhost ~]$ cat /tidb-deploy/pd-2379/log/pd*.log | grep "idAllocator allocates a new id" | awk -F'=' '{print $2}' | awk -F']' '{print $1}' | sort -r | head -n 1 1000
-
移除 PD 旧数据目录
[tidb@localhost data1]$ mv /data1/pd-2379 /data2
-
部署新的 PD 集群
[tidb@localhost ~]$ tiup cluster:v1.2.1 reload tidb-test -R pd --force
-
使用 pd-recover 恢复 PD 集群
注意使用调整后的新 PD Port 来进行 pd-recover,pd-recover 和集群版本保持一致
[tidb@localhost ~]$ tiup pd-recover:v4.0.7 -endpoints http://172.16.61.111:3379 -cluster-id 6881548221407099619 -alloc-id 10000 Starting component `pd-recover`: -endpoints http://172.16.61.111:3379 -cluster-id 6881548221407099619 -alloc-id 10000 recover success! please restart the PD cluster
5. reload 和 restart 集群
[tidb@localhost ~]$ tiup cluster reload tidb-test
[tidb@localhost ~]$ tiup cluster restart tidb-test
6.检查集群状态和数据
提示:集群恢复后,请做好业务数据的验证。
四、TiUP 修改目录
当前集群架构
1.集群调整目标
提示:目标部署目录需要提前规划好,并注意目录的权限和原目录保持一致
2.停止集群
[tidb@localhost ~]$ tiup cluster stop tidb-test
3.修改配置文件 meta.yaml
说明:
- 修改前请提前做好配置文件和数据目录的备份
- 建议将 meta.yaml 中 global 和各组件 deploy_dir、data_dir 和 log_dir 都调整掉
[tidb@localhost ~]$ vi ~/.tiup/storage/cluster/clusters/tidb-test/meta.yaml
--批量替换全部的目录:
:%s/data1/data2/g
:%s/tidb-deploy/tidb-deploy2/g
4.移动部署目录
-
严格按照步骤 3 中 meta.yaml 调整结果移动部署目录
[tidb@localhost ~]$ cp -r /data1/* /data2/ [tidb@localhost ~]$ cp -r /tidb-deploy/* /tidb-deploy2
提示:
- 为了防止疏忽漏掉 cp 目录的操作,推荐开两个窗口一个编辑 meta 一个同时 cp 目录。移动的时候注意文件权限
- 建议待集群验证正常后再删除掉原目录数据
-
删除 tikv 的数据目录中的 last_tikv.toml
[tidb@localhost ~]$ rm /data2/tikv-20160/last_tikv.toml
说明:last_tikv.toml 中会记录 tikv 上一次的启动参数,tikv 启动后会检查修改了哪些参数,但由于 tikv 是不允许修改数据目录,所以删掉该文件来达到“欺骗” tikv 的目的。
5. reload 和 restart 集群
[tidb@localhost ~]$ tiup cluster reload tidb-test
[tidb@localhost ~]$ tiup cluster restart tidb-test
6.检查集群状态和数据
提示:集群恢复后,请做好业务数据的验证。