首页 > 其他分享 >TIKV节点数据文件误删后不更换服务器快速恢复

TIKV节点数据文件误删后不更换服务器快速恢复

时间:2023-08-23 12:38:38浏览次数:34  
标签:10.20 10.138 数据文件 TIKV 误删 tikv pd tidb store


社区里很多大佬总结了多副本丢失的灾难恢复方法,但是平时遇到最多的单节点故障快速恢复还没有人总结,本文为亲身实践后总结的问题处理过程,此过程保持集群可用无需停止其他节点服务。



背景

故事发生在炎炎夏日的某一天,通过一系列磁盘的iops的测试后,发了个工单质疑阿里云的ESSD磁盘性能不达标,阿里云的客服给我发了一份他们的测试文档,我在某个tidb集群上就开始测试,等我测试完后发现vdb的分区没了。



测试文档中提示,有可能会造成文件系统损坏。

TIKV节点数据文件误删后不更换服务器快速恢复_服务器

TIKV节点数据文件误删后不更换服务器快速恢复_2d_02

tidb、pd、tikv是混合部署在一起的,TIDB集群变成了如下状态,得益于TIDB强大可用性设计,这个时候集群还是可用状态。



修复

最快速的修复办法是直接增加一台服务器扩容down掉的节点然后缩掉有问题的节点、回收服务器,但是为了节约资源,决定在原服务器上缩容扩容节点。

首先强制缩掉三个down掉节点:

tiup cluster scale-in tsp-prod-taos-cluster --node 10.20.10.138:4000 --force

tiup cluster scale-in tsp-prod-taos-cluster --node 10.20.10.138:2379 --force

tiup cluster scale-in tsp-prod-taos-cluster --node 10.20.10.138:20160 --force

TIKV节点数据文件误删后不更换服务器快速恢复_f5_03

TIKV节点数据文件误删后不更换服务器快速恢复_服务器_04

TIKV节点数据文件误删后不更换服务器快速恢复_2d_05

集群变成如下状态:

TIKV节点数据文件误删后不更换服务器快速恢复_2d_06

重新给138服务器格式化vdb分区

TIKV节点数据文件误删后不更换服务器快速恢复_f5_07

在138服务器上扩容tidb、pd、tikv节点

tiup cluster scale-out tsp-prod-taos-cluster ./topo-kv02-tidb02-pd02.yaml --user root -p

global:
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/data/tidb-deploy"
  data_dir: "/data/tidb-data"

server_configs:
tikv_servers:
 - host: 10.20.10.138
   port: 20160
   status_port: 20180
pd_servers:
 - host: 10.20.10.138
tidb_servers:
 - host: 10.20.10.138

tidb和pd启动成功,kv启动失败

以下是报错日志:

Error: failed to start tikv: failed to start: 10.20.10.138 tikv-20160.service, please check the instance's log(/data/tidb-deploy/tikv-20160/log) for more detail.: timed out waiting for port 20160 to be started after 2m0s
[2023/08/09 10:37:25.985 +08:00] [ERROR] [util.rs:475] ["request failed"] [err_code=KV:PD:gRPC] [err="Grpc(RpcFailure(RpcStatus { code: 2-UNKNOWN, message: \"duplicated store address: id:406981 address:\\\"10.20.10.138:2
0160\\\" version:\\\"5.4.3\\\" status_address:\\\"10.20.10.138:20180\\\" git_hash:\\\"deb149e42d97743349277ff8741f5cb9ae1c027d\\\" start_timestamp:1691548641 deploy_path:\\\"/data/tidb-deploy/tikv-20160/bin\\\" , already
 registered by id:4 address:\\\"10.20.10.138:20160\\\" state:Offline version:\\\"5.4.3\\\" status_address:\\\"10.20.10.138:20180\\\" git_hash:\\\"deb149e42d97743349277ff8741f5cb9ae1c027d\\\" start_timestamp:1679983970 de
ploy_path:\\\"/data/tidb-deploy/tikv-20160/bin\\\" last_heartbeat:1689209409692065070 \", details: [] }))"]

通过pd-ctl查看store 4处于offline状态,新的kv节点无法在pd中注册。

TIKV节点数据文件误删后不更换服务器快速恢复_2d_08

尝试删除store 4,虽然显示成功了,实际上并没有删除。

原因是:delete 成功,触发整个store下线(offline)、开始region迁移,在正常情况下,这个store所有region迁走后会变成tombstone状态。但是实际上这个store上region没有发生迁移(有效tikv数小于replica数)。

TIKV节点数据文件误删后不更换服务器快速恢复_服务器_09

尝试设置该store状态为Tombstone,设置失败。

curl -X POST http://0.0.0.0:2379/pd/api/v1/store/4/state?state=Tombstone

TIKV节点数据文件误删后不更换服务器快速恢复_服务器_10

原因是在 5.0 及以上版本中,该接口只支持更改 state 为 Up 或者 Offline,废弃了直接更改为 Tombstone 这个功能。这是由于直接更改为 Tombstone 总是引起操作者意料之外的结果。

把store 4的physically_destroyed设置成ture

curl -X DELETE http://0.0.0.0:2379/pd/api/v1/store/4?force=true

再看store状态

TIKV节点数据文件误删后不更换服务器快速恢复_服务器_11

138新的kv节点也自动注册上来了

TIKV节点数据文件误删后不更换服务器快速恢复_2d_12

pd开始调度region到138新加入的kv中。

TIKV节点数据文件误删后不更换服务器快速恢复_f5_13

这个时候在pd中查看还是有4个store,由于有效tikv数>=replica数,region在迁移减少了。

TIKV节点数据文件误删后不更换服务器快速恢复_2d_14

适当调大region调度速度

TIKV节点数据文件误删后不更换服务器快速恢复_服务器_15

TIKV节点数据文件误删后不更换服务器快速恢复_2d_16

region迁移结束,pd中sotre4消失

TIKV节点数据文件误删后不更换服务器快速恢复_2d_17

至此修复全部完成!


总结:

1 本文比较基础,提供了简单的处理流程,适合帮助对tidb理解不够深入的新手。

2 没事别瞎折腾服务器,另外需要吐槽下阿里云的ESSD磁盘性能是真的不行,测试下来大概只有nvme物理盘的五分之一。

3 遇到误删文件不要慌,无论是丢失少数副本无损修复还是丢失大多数副本有损修复,TIDB社区都有成熟案例和方案供大家选择。

标签:10.20,10.138,数据文件,TIKV,误删,tikv,pd,tidb,store
From: https://blog.51cto.com/u_15550868/7201146

相关文章

  • Linux文件误删恢复
    在Linux系统中,误删除的文件是可以恢复的。一般Linux桌面环境都有回收站功能,类似于Windows系统中的回收站。如果你使用的是图形化界面,可以尝试在桌面环境的回收站或垃圾桶中找回误删除的文件。如果使用了rm-rf命令删除的,可以使用lsof命令等工具来处理。本文将介绍如何使用命令行和......
  • 统计oracel表空间和用户的数据文件占物理磁盘空间大小
    selectbannerfromv$version;-----统计磁盘空间文件大小SELECT--B.file_name"文件名",A.TABLESPACE_NAME"表空间名",TOTAL"表空间大小",FREE"表空间剩余大小",(TOTAL-FREE)"表空间使用大小",TOTAL/(10......
  • TiKV占用内存超过的解决过程
    TiKV占用内存超过的解决过程背景为了后去TiDB的极限数据.晚上在每台服务器上面增加了多个TiKV的节点.主要方式为:每个NVME的硬盘增加两个TiKV的进程.这样每个服务器两个磁盘,共计4个TiKV的进程因为TiKV其实会使用尽可能多的缓存:storage.block-cache表示RocksDB多......
  • 若误删了系统某组件或注册表引起系统不稳定或杂疑问题的解决方法之一
    若误删了系统某组件或注册表引起系统不稳定或杂疑问题的解决方法:方法1:恢复到先前的系统还原点打开"控制面板-选择大图标-恢复-系统还原-上个还原点",它可以还原系统文件和设置,从而解决我们所遇到的问题方法2:使用 sfc/scannow 命令检查和修复系统文件的完整性。以下是在Win......
  • m3u8 流视频数据文件。
    #EXT-X-KEY:METHOD=AES-128,URI="https://edu.aliyun.com/hls/1109/clef/YnBGq7zAJf1Is7xIB5v8vI7AIORwwG9W",IV=0x0fe82567a6be41afda68d82d3724976a有URI中的信息为key,访问后得到有IV时使用IV,没有IV时,通常会在m3u8地址中提供,比如下面的最后一部分即iv:eb7ab5bb3cb1ae35f6d5......
  • 从另一电脑复制下来的MYSQL的数据文件(包括FRM IBD)快速恢复到另一MYSQL服务器过程
    从另一电脑复制下来的MYSQL的数据文件(包括FRMIBD)快速恢复到另一MYSQL服务器过程:1.安装mysql最好相同的版本,安装Navicateformysql,连接相应的服务器2.安装mysql-utilities,地址:https://downloads.mysql.com/archives/utilities/以恢复td_gov_company_abnormal.frm为例:3.C......
  • 使用BBED查看数据文件头(block# 1)的简单使用及查询DBID/DB_NAME等信息
    DBID及DB_NAME的查看在最后。进入BBED及初始设置如下:[oracle@bys3~]$catpar.bbdblocksize=8192listfile=bbedfile.txtmode=edit[oracle@bys3~]$catbbedfile.txt--可以通过selectfile#,namefromv$dbfile;selectfile#,namefromv$datafile;1......
  • Mysql 命令行方式导出数据文件
    概述Linux服务器上有一个数据库表包含大于50亿条的记录,通过Navicat等数据迁移工具,将数据迁移到另一个服务器相同表中,总是执行一段时间后卡死,故选择先导出数据文件,再去另一个服务器导入该文件。可以使用Navicat导出数据文件,也可以使用MySQL支持的命令导出数据文件。本文章介绍如何使......
  • Oracle表空间和数据文件
    表空间:tablespace表空间就是:存放数据库表、索引、等等对象的逻辑空间。oracle数据在安装并创建实例后,默认会自动创建多个表空间。ORACL默认表空间SYSTEM表空间存放oracle内部表和数据字典(各种视图、表),如表名、列名、用户名等。不要将自己的数据放到该表空间内。该表空间......
  • 误删除表,如何还原最新状态?
    前提:log_bin=ON1全备份mysqldump-A-F--single-transaction--master-data=2>/backup/full.sql210:00前修改数据insertstudents310:00删除表droptablestudents;410:00-10:10修改数据库insertteachers;还原5mysql>flushtableswithreadlock;6mysql>showma......