【SOP 系列 12】TiUP 修改集群 IP 、Port 和目录

一、文档背景/目的

    在日常运维 TiDB 集群的过程中,通常不建议对集群的 IP、port 和目录进行调整。但有时可能会遇到诸如机房搬迁、网络调整或者磁盘分配错误等原因,不得不调整现有的 tidb 集群。由于这上面三种 case 都需要停机(因为 PD 换了 IP 或端口之后 TiDB 和 TiKV 挂掉),并且涉及 PD 更换 IP / 端口需要销毁 PD 重建,属于高风险操作,因此在 TiUP 中未直接支持。

    本文档提供了使用 TiUP 修改 TiDB 集群 IP、port 和目录的操作方法,供大家在无法通过扩缩容方式调整上述配置时使用,注意谨慎使用。

【注意事项】

  1. 线上环境操作,必须先备份数据,若操作过程导致数据丢失,则可能再也无法恢复集群,至少需要备份:

    • 中控机的 ~/.tiup/storage/cluster/clusters/ 目录
    • ~/.tiup/storage/cluster/clusters//meta.yaml 中显示的所有数据目录(data_dir)
  2. IP、port 和目录调整都需要停止集群,线上系统请协调好停机窗口,并做好充分准备和验证工作。

  3. 由于调整 PD 的 ip 和 port 需要对整个 PD 集群进行重建,当原先部署了依赖于 PD 持久化数据的同步组件时(比如 TiCDC 的 changefeed 依赖于 PD),可能需要重新同步数据,因此需要权衡好调整的利弊。

  4. 最后重要的事情再强调三遍:调整前一定要备份!一定要备份!!一定要备份!!!

二、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

image
4.调整服务器 IP 地址

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# systemctl restart network

5.重建 PD 集群
请参考官方文档 PD Recover 中的步骤来重建 PD 集群:

  1. 获取 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]
    
  2. 获取已分配 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
    
  3. 移除 PD 旧数据目录

    [tidb@localhost data1]$ mv /data1/pd-2379 /data2
    
  4. 部署新的 PD 集群

    [tidb@localhost ~]$ tiup cluster reload tidb-test -R pd --force
    
  5. 使用 pd-recover 恢复 PD 集群

    注意使用调整后的新 PD IP 来进行 pd-recover

    [tidb@localhost ~]$ tiup pd-recover -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

image

4.重建 PD 集群
请参考官方文档 PD Recover 中的步骤来重建 PD 集群:

  1. 获取 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]
    
  2. 获取已分配 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
    
  3. 移除 PD 旧数据目录

    [tidb@localhost data1]$ mv /data1/pd-2379 /data2
    
  4. 部署新的 PD 集群

    [tidb@localhost ~]$ tiup cluster reload tidb-test -R pd --force
    
  5. 使用 pd-recover 恢复 PD 集群

    注意使用调整后的新 PD Port 来进行 pd-recover

    [tidb@localhost ~]$ tiup pd-recover -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

image
4.移动部署目录

  1. 严格按照步骤 3 中 meta.yaml 调整结果移动部署目录

    [tidb@localhost ~]$ cp -r /data1/* /data2/
    [tidb@localhost ~]$ cp -r /tidb-deploy/* /tidb-deploy2
    

    提示

    • 为了防止疏忽漏掉 cp 目录的操作,推荐开两个窗口一个编辑 meta 一个同时 cp 目录。移动的时候注意文件权限
    • 建议待集群验证正常后再删除掉原目录数据
  2. 删除 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.检查集群状态和数据


提示:集群恢复后,请做好业务数据的验证。