TiDB 集群跨平台在线迁移方案(离线环境下从 x86 节点迁移到 arm64 节点)

背景

TiDB 集群具备跨平台架构的部署和扩缩容能力,能实现在业务在线的情况下完成整个集群的跨平台架构迁移。本文将详细介绍如何实现,以及如何在离线环境下从 x86 节点迁移到 arm64 节点。

迁移步骤

1、数据备份

进行集群的数据备份。

2、下载 & 合并镜像目录

官网下载页面(https://pingcap.com/zh/product-community/)下载后合并镜像目录。Arm 64 架构包需要额外下载。

$tar xf tidb-community-server-v5.1.1-linux-arm64.tar.gz
$tar xf tidb-community-server-v5.1.1-linux-amd64.tar.gz
$cd  tidb-community-server-v5.1.1-linux-amd64
$cp -rp keys ~/.tiup/
$tiup mirror merge ../tidb-community-server-v5.1.1-linux-arm64

3、迁移 TiUP 节点

a. 目录 tiup 节点已经添加 tidb 用户
b. 复制镜像目录(x86 和 arm64 离线合体目录)到目标节点。因为涉及到跨平台,只迁移集群元数据,打包管理用户的 .tiup 下的 clusters 目录到目标节点。同构节点间 tiup 迁移可以复制整个 .tiup 目录。

$tiup mirror show
$scp -rp tidb-community-xxx tidb@tiup-IP:/home/tidb/
$cd .tiup/storage/cluster/
$tar cvf clusters.tar clusters
$scp clusters.tar tidb@tiup-IP:/home/tidb/

c. 在目标节点安装 tiup

$cd tidb-community-xxx
$ls tiup-*-linux-arm64.tar.gz
$./local_install.sh

d. 目标节点解压集群配置

$cd ~
$tar -C .tiup/storage/cluster/ -xvf clusters.tar

e. 目标节点使用 tiup cluster display 验证管理能力。

$tiup cluster list
$tiup cluster display <cluster-name>

f. 原有节点备份后删除 .tiup 目录,防止后期的误操作。

$tar cvf tiup.tar .tiup
$rm -rf .tiup

4、迁移 prometheus 监控节点

a. 使用扩容方式添加新的 arm64 prometheus 监控节点。

$vi monitor.yaml
$tiup cluster scale-out monitor.yaml
monitoring_servers:
- host: 172.16.6.177
  ssh_port: 22
  port: 9090
  deploy_dir: /tidb-deploy/prometheus-9090
  data_dir: /tidb-data/prometheus-9090
  log_dir: /tidb-deploy/prometheus-9090/log
  arch: aarch64
  os: linux

b. 将原来的监控数据目录复制到新的监控节点。

# ps -ef |grep tsdb.path #找到 storage.tsdb.path
tidb     12804     1  3 Oct23 ?        03:27:15 bin/prometheus/prometheus --config.file=/tidb-deploy/prometheus-9090/conf/prometheus.yml --web.listen-address=:9090 --web.external-url=http://172.16.6.177:9090/ --web.enable-admin-api --log.level=info --storage.tsdb.path=/tidb-data/prometheus-9090 --storage.tsdb.retention=30d
$cd /tidb-data/prometheus-9090
$ls -l #选择需要的天数目录(默认按天创建的目录,可以通过目录内的文件修改时间来确定时期范围)
$tar -cvzf prometheus9090.tar.gz 01E1VVCJDV9F6MVW1XQ0NB0KRA 01E1SXK95Y7TC24KMQGFCE789J
$scp prometheus9090.tar.gz tidb@prometheus-IP:/tidb-data/prometheus-9090

c. 在新的监控节点内解压。

$cd /tidb-data/prometheus-9090 
$tar xvf prometheus9090.tar.gz

d. 使用浏览器验证监控数据的时间长度后,使用缩容方式销毁原来的 prometheus 节点。

$tiup cluster edit-config <cluster-name> #调整 prometheus 的顺序,把 aarch64 的新节点放到第一个
$tiup cluster reload <cluster-name> -R grafana # 访问 grafana 确认历史数据可用后进行缩容操作
$tiup cluster scale-in <cluster-name> -N prometheus-IP:port

5、添加监控节点

使用缩容和扩容方式添加新的 arm64 grafana alertmanager 监控节点。

$vi grafana.yaml
$tiup cluster scale-out <cluster-name>  grafana.yaml
grafana_servers:
- host: 172.16.6.177
  ssh_port: 22
  port: 3000
  deploy_dir: /tidb-deploy/grafana-3000
  arch: aarch64
  os: linux
alertmanager_servers:
- host: 172.16.6.177
  ssh_port: 22
  web_port: 9093
  cluster_port: 9094
  deploy_dir: /tidb-deploy/alertmanager-9093
  data_dir: /tidb-data/alertmanager-9093
  log_dir: /tidb-deploy/alertmanager-9093/log
  arch: aarch64
  os: linux

6、迁移 PD 节点

$vi pd.yaml
$tiup cluster scale-out <cluster-name>  pd.yaml
$tiup ctl:v5.1.1 pd -u pd-IP1:2379 -i
>member show # 确认节点已经添加
>member leader transfer ARM的<pd-name> 
>member leader show # 确认 Leader 已经切换到 ARM 节点
$tiup cluster scale-in <cluster-name> -N pd-IP1:2379 #逐步下线 PD,一次只操作一个。
$tiup cluster scale-in <cluster-name> -N pd-IP2:2379
$tiup cluster scale-in <cluster-name> -N pd-IP3:2379
$tiup cluster display
$tiup ctl:v5.1.1 pd -u pd-IP1:2379 -i
>member show # 确认节点状态正确

7、迁移 TIKV 节点

$vi tikv.yaml
$tiup cluster scale-out <cluster-name> tikv.yaml
查看监控面板的 region 变化,业务已经停止,可以调大调度参数加快速度
$tiup ctl:v5.1.1 pd -u pd-IP1:2379 store limit all 1000
$tiup cluster scale-in <cluster-name> -N tikv-IP1:20160,tikv-IP2:20160,tikv-IP3:20160
完成后恢复调度参数
$tiup ctl:v5.1.1 pd store limit all 20

8、扩展 TiDB 节点

完全调整完成后再缩容,减少协调业务的次数

$vi tidb.yaml
$tiup cluster scale-out <cluster-name> tidb.yaml

9、缩容 TiDB 节点

确认所有组件都迁移完成后,配合负载均衡设备调整,将原 tidb-server 下线。

$tiup cluster scale-in <cluster-name> -N tidb-IP1:4000,tidb-IP2:4000

注意事项

  1. 跨平台架构仅建议在扩缩容期间运行,不建议长期运行。
  2. 需要注意对有状态组件的操作保护。
    • 操作前应该使用 br 完成全量数据备份。
    • tiup 的元数据目录和监控数据的备份还原。
    • 操作 pd 节点时,单次只操作一个。
  3. 节点操作的 yaml 文件需要对各节点标明 arch,如:amd64 或 arm64,aarch64 与 arm64 等同。
  4. 建议每个收缩节点的步骤完成后,都手工操作 tiup cluster prune 真正地清除节点。
  5. 在离线场景下,由于离线下载包分平台的设计,需要准备离线包的目录合并。
4赞