Kongdom
(Kongdom)
2022 年11 月 2 日 02:05
1
【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.3.0
【遇到的问题】tikv节点无法启动
【复现路径】意外断电
【问题现象及影响】
集群是单节点混布,因意外停电,重启时tikv节点启动失败,报错信息如下:
[2022/11/02 09:30:41.786 +08:00] [ERROR] [server.rs:1052] [“failed to init io snooper”] [err_code=KV:Unknown] [err=“"IO snooper is not started due to not compiling with BCC"”]
[2022/11/02 09:30:42.475 +08:00] [FATAL] [server.rs:843] [“failed to start node: Engine(Other("[components/raftstore/src/store/fsm/store.rs:1004]: \"[components/raftstore/src/store/peer_storage.rs:480]: [region 9555] entry at apply index 7563240 doesn’t exist, may lose data.\""))”]
参照其他同学案例处理
为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】
TIDB4.0.0
【概述】场景+问题概述
TiKV3节点其中一个节点报错 [2021/08/09 20:45:31.019 +08:00] [FATAL] [server.rs:576] [“failed to start node: EngineTraits(Other("[components/r…
在使用命令operator add remove-peer清理pd中副本信息时,报错提示
Failed! [500] “cannot build operator for region with no leader”
检查region情况发现,处于投票阶段
参照官方文档 可以使用–force强制设置为 tombstone 状态,但是执行报错,感觉force没起作用
求助,现在应该如何处理?
1 个赞
就一个tikv?然后tikv还起不来了?
如果sync-log没改成false,按理说不应该丢数据的啊,都在wal中啊。
Kongdom
(Kongdom)
2022 年11 月 2 日 02:32
3
是改成false了。现在想通过删除报错region,启动集群。可以接受数据损失。
1 个赞
删region万一这个region 是表结构,你丢数据可不是丢一点点啊。
region信息写在rocksdb的raftcf中,不知道有没有工具可以删掉,如果没有,可以写个例子删一下。
Kongdom
(Kongdom)
2022 年11 月 2 日 02:58
8
找了几个报错的region,角色都是Voter,和这个有关么?
xfworld
(魔幻之翼)
2022 年11 月 2 日 03:01
9
角色voter代表能投票成为leader,但是leader实际上得等tikv启动以后才能选举,选举后上报给pd,然后才能继续。你现在都起不来。
Kongdom
(Kongdom)
2022 年11 月 2 日 03:10
12
哦哦,原来是这个意思。已经操作5个region,还是报相同的错误。那我再操作5个region,如果还不行,就准备重建集群了。
./target/debug/tikv-ctl ldb scan --db=./db/ --column_family=raft --key_hex
[2022/11/02 11:09:02.218 +08:00] [INFO] [mod.rs:118] ["encryption: none of key dictionary and file dictionary are found."]
[2022/11/02 11:09:02.218 +08:00] [INFO] [mod.rs:479] ["encryption is disabled."]
0x0102000000000000000203 :I I( D
// raft regionid applysurffix
0x0103000000000000000201 :5*
// meta regionid raftsurffix
这是rocksdb-kv中存的region2 的数据后一行是region的meta信息。入口是这里,删掉就是删掉了region
其中regionid是大端写入的从bit【2-10】
./target/debug/tikv-ctl ldb scan --db=./raft/ --column_family=default --key_hex --value_hex
[2022/11/02 11:20:25.103 +08:00] [INFO] [mod.rs:118] ["encryption: none of key dictionary and file dictionary are found."]
[2022/11/02 11:20:25.103 +08:00] [INFO] [mod.rs:479] ["encryption is disabled."]
0x01020000000000000002010000000000000045 : 0x08011009184522261002181822200A0E08021204080510042A04083110011A0E0801120A08021206081810011801320101
0x01020000000000000002010000000000000046 : 0x1009184622140A0808021204080510041A080803220408441009
0x01020000000000000002010000000000000047 : 0x08011009184722201818221C0A0E08021204080510042A04083210011A0A08011206120408181001320101
0x01020000000000000002010000000000000048 : 0x080110091848222410011818221E0A0E08021204080510042A04083310011A0C080112080801120408181001320101
0x01020000000000000002010000000000000049 : 0x08011009184922261002181922200A0E08021204080510042A04083410011A0E0801120A08021206081910011801320101
0x0102000000000000000202 : 0x0A060809100518481049
rocksdb-raft 中的 default cf中的数据,最后一行就是 region 2 在raft中记录的状态
删掉 rocksdb-kv 中 0x0103000000000000000201 这个key就相当于 region 2 删了,其他的如果报错就清理下。
[tidb-develop-zgc tikv]# ./target/debug/tikv-ctl ldb delete 0x0103000000000000000201 --db=./db/ --column_family=raft --key_hex
[2022/11/02 11:25:00.464 +08:00] [INFO] [mod.rs:118] ["encryption: none of key dictionary and file dictionary are found."]
[2022/11/02 11:25:00.465 +08:00] [INFO] [mod.rs:479] ["encryption is disabled."]
OK
[tidb-develop-zgc tikv]# ./target/debug/tikv-ctl ldb scan --db=./db/ --column_family=raft --key_hex
[2022/11/02 11:25:08.888 +08:00] [INFO] [mod.rs:118] ["encryption: none of key dictionary and file dictionary are found."]
[2022/11/02 11:25:08.888 +08:00] [INFO] [mod.rs:479] ["encryption is disabled."]
0x0102000000000000000203 :I I( D
tikv起来以后,region count是0了。
pd那里还能看到region信息,那是因为另一个节点没启动,启动的话上报一下心跳,这个reigon的peer就消失了。
纯试验,出错不负责
Kongdom
(Kongdom)
2022 年11 月 2 日 03:33
14
我现在操作的和这个差不多,但是已经将报错的10个region删除了,还在报错,查了一下有3w多个region,如果一个一个的试,不知道要到什么时候。如果报错一次全报出来就好了。
单副本如果开sync-log也是没问题的。你的写入太频繁,这个还关了,还断电了。wal里没及时记录进去。
如果说你开着sync-log,机器断电也没事儿,因为所有的写入都先wal落盘了。
Kongdom
(Kongdom)
2022 年11 月 2 日 03:59
18
因为我这边是机械盘,开着sync-log,系统直接运行不了。 这是一个艰难的决定