中控机及中控机上的tikv节点整个文件系统出问题,如何恢复?

【TiDB 使用环境】生产环境
【TiDB 版本】v7.1.1
【操作系统】linux
【部署方式】 物理机 64c+250G
【集群数据量】8台服务器
【集群节点数】
【问题复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】中控机及中控机上的tikv节点整个文件系统出问题,如何恢复?
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【复制黏贴 ERROR 报错的日志】
【其他附件:截图/日志/监控】

1 个赞

机房第三方承包的,那边反馈没法恢复,最后选择了重装系统。数据全丢了,由于中控机在上面,无法操作扩缩容命令。有啥办法恢复?

参照这个操作一下。

仅供参考:

如何从PD恢复TiUP所需的拓扑文件

在TiDB集群中,PD(Placement Driver)作为集群的元数据管理和调度中心,存储了集群的拓扑信息。当您需要从现有集群恢复TiUP所需的拓扑文件(topology.yaml)时,可以通过以下步骤从PD中提取信息并重建拓扑文件。

PD与TiUP的关系

TiUP是TiDB的集群管理工具,负责部署、配置和维护TiDB集群。TiUP使用YAML格式的拓扑文件(topology.yaml)作为集群结构的权威配置蓝图,定义了集群中各组件的部署位置、配置和资源分配。而PD作为TiDB集群的调度中心,存储了集群的实时状态信息,包括各组件的地址、状态和配置。TiUP依赖PD提供的调度信息来确定组件(如TiKV和TiFlash)的运行状态。

从PD提取集群信息的步骤

1. 获取集群组件信息

首先,使用PD Control工具连接到PD并获取集群组件信息:

# 连接到PD
tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port>

# 在PD Control中执行以下命令
>> store
>> member
>> config show

这些命令将显示TiKV存储节点、PD成员节点以及当前的PD配置信息。

2. 获取TiDB节点信息

可以通过查询TiDB的系统表获取TiDB节点信息:

SELECT * FROM information_schema.CLUSTER_INFO;

或者通过PD的API获取:

curl http://<pd_ip>:<pd_port>/pd/api/v1/stores
curl http://<pd_ip>:<pd_port>/pd/api/v1/members

3. 收集配置文件信息

使用Diag Client工具收集各组件的配置文件:

tiup diag collect --include=config <cluster-name>

这将收集所有组件的配置文件,包括PD、TiDB、TiKV等。

4. 提取拓扑关系

通过PD的API获取集群的拓扑关系:

curl http://<pd_ip>:<pd_port>/pd/api/v1/config/replicate

这将显示复制配置,包括副本数量和位置标签等信息。

构建TiUP拓扑文件

1. 生成基础拓扑模板

首先生成一个基础的拓扑模板:

tiup cluster template > topology.yaml

2. 根据收集的信息填充拓扑文件

编辑生成的topology.yaml文件,根据从PD和其他组件收集的信息填充以下部分:

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"  # 从收集的配置中获取
  data_dir: "/tidb-data"      # 从收集的配置中获取

pd_servers:
  - host: 10.0.1.4  # PD节点IP,从member信息获取
  - host: 10.0.1.5
  - host: 10.0.1.6

tidb_servers:
  - host: 10.0.1.1  # TiDB节点IP,从CLUSTER_INFO获取
  - host: 10.0.1.2
  - host: 10.0.1.3

tikv_servers:
  - host: 10.0.1.7  # TiKV节点IP,从store信息获取
  - host: 10.0.1.8
  - host: 10.0.1.9

# 如果有TiFlash节点
tiflash_servers:
  - host: 10.0.1.10

# 监控相关配置
monitoring_servers:
  - host: 10.0.1.11

grafana_servers:
  - host: 10.0.1.11

alertmanager_servers:
  - host: 10.0.1.11

3. 添加组件特定配置

根据收集的配置信息,添加组件特定的配置:

server_configs:
  pd:
    replication.location-labels: ["zone","dc","rack","host"]  # 从PD配置获取
    replication.max-replicas: 3  # 从PD配置获取
  
  tikv:
    server.grpc-compression-type: "none"  # 从TiKV配置获取
    
  tidb:
    log.slow-threshold: 300  # 从TiDB配置获取

验证拓扑文件

使用TiUP验证拓扑文件的正确性:

tiup cluster check topology.yaml

官方工具支持

目前,TiDB官方没有提供直接从PD恢复拓扑文件的工具。PD Recover工具主要用于恢复PD集群本身,而不是重建TiUP拓扑文件。重建拓扑文件需要手动收集信息并构建。

最佳实践建议

  1. 定期备份拓扑文件:在部署或修改集群后,保存最新的拓扑文件。
  2. 使用版本控制:将拓扑文件纳入版本控制系统,记录每次变更。
  3. 记录集群变更:每次使用tiup cluster scale-outscale-in时,更新拓扑文件副本。
  4. 使用TiUP显示命令:通过tiup cluster display <cluster-name>查看当前集群状态,辅助重建拓扑文件。

注意事项

  1. 重建的拓扑文件可能无法包含所有原始部署时的自定义配置,特别是一些非默认参数。
  2. 对于PD微服务模式(如TSO、Scheduling服务),需要特别注意配置pd_mode: "ms"参数。
  3. 重建的拓扑文件主要用于集群管理,不应用于重新部署现有集群,以避免数据丢失。

多谢多谢

好的,多谢

搞定后做个定期备份到异地机房吧。

https://docs.pingcap.com/zh/tidb/stable/tiup-component-cluster-meta-backup/#tiup-cluster-meta-backup
或者
https://docs.pingcap.com/zh/tidb/stable/tiup-cluster/#迁移中控机与备份

好的好的

生产中控机最好装2个,装一个后tar到另外一个机器上

已经搞定,感谢各位指导!
感谢tidb售后朱文轩同学指导!
大致恢复过程我写一下。

  1. 手动安装同版本的tiup工具。
  2. 在/home/tidb/.tiup/storage/cluster/clusters/tidb集群名/路径下,生成一份meta.yaml文件,这个要和原来的配置文件保持一致。
  3. 将meta.yaml文件里对应有问题节点配置注释掉,不然会报端口冲突。
  4. 检查集群存在的潜在风险,执行tiup cluster check scale-out.yml --cluster --user tidb。
  5. 执行扩容命令:tiup cluster scale-out scale-out.yml
1 个赞

好的,吃一堑,长一智,多谢!

此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。