tidb 集群无法启动

【 TiDB 使用环境】生产环境
【 TiDB 版本】v5.2.2
【遇到的问题】tidb缩容之后无法启动集群
【复现路径】无
【问题现象及影响】
tidb缩容之后,报查询无法找到region,很多进程卡死,然后重启集群,无法启动成功。发现日志如下,一直在找已经下线的tikv。
2022/10/02 01:05:42.761 +08:00] [WARN] [client_batch.go:503] [“init create streaming fail”] [target=172.16.120.9:20160] [forwardedHost=] [error=“context deadline exceeded”]
[2022/10/02 01:05:42.762 +08:00] [INFO] [region_cache.go:2251] [“[health check] check health error”] [store=172.16.120.9:20160] [error=“rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.16.120.9:20160: connect: connection refused"”]
[2022/10/02 01:05:42.762 +08:00] [INFO] [region_request.go:344] [“mark store’s regions need be refill”] [id=15698413] [addr=172.16.120.9:20160] [error=“context deadline exceeded”]
[2022/10/02 01:05:43.470 +08:00] [INFO] [coprocessor.go:812] [“[TIME_COP_PROCESS] resp_time:10.925106589s txnStartTS:436376416354041867 region_id:15666413 store_addr:172.16.120.9:20160 backoff_ms:1165 backoff_types:[regionScheduling,tikvRPC,tikvRPC,regionMiss,regionScheduling,tikvRPC,tikvRPC]”]
[2022/10/02 01:05:48.485 +08:00] [WARN] [client_batch.go:503] [“init create streaming fail”] [target=172.16.120.10:20161] [forwardedHost=] [error=“context deadline exceeded”]
[2022/10/02 01:05:48.486 +08:00] [INFO] [region_cache.go:2251] [“[health check] check health error”] [store=172.16.120.10:20161] [error=“rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.16.120.10:20161: connect: connection refused"”]
[2022/10/02 01:05:48.486 +08:00] [INFO] [region_request.go:344] [“mark store’s regions need be refill”] [id=15698410] [addr=172.16.120.10:20161] [error=“context deadline exceeded”]
[2022/10/02 01:05:54.494 +08:00] [WARN] [client_batch.go:503] [“init create streaming fail”] [target=172.16.120.9:20160] [forwardedHost=] [error=“context deadline exceeded”]
[2022/10/02 01:05:54.495 +08:00] [INFO] [region_cache.go:2251] [“[health check] check health error”] [store=172.16.120.9:20160] [error=“rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.16.120.9:20160: connect: connection refused"”]
[2022/10/02 01:05:54.495 +08:00] [INFO] [region_request.go:344] [“mark store’s regions need be refill”] [id=15698413] [addr=172.16.120.9:20160] [error=“context deadline exceeded”]
[2022/10/02 01:05:56.012 +08:00] [INFO] [coprocessor.go:812] [“[TIME_COP_PROCESS] resp_time:12.53678461s txnStartTS:436376416354041867 region_id:15666413 store_addr:172.16.120.9:20160 backoff_ms:3700 backoff_types:[regionScheduling,tikvRPC,tikvRPC,regionMiss,regionScheduling,tikvRPC,tikvRPC,regionMiss,regionScheduling,tikvRPC,tikvRPC]”]
[2022/10/02 01:06:01.038 +08:00] [WARN] [client_batch.go:503] [“init create streaming fail”] [target=172.16.120.10:20161] [forwardedHost=] [error=“context deadline exceeded”]
[2022/10/02 01:06:01.039 +08:00] [INFO] [region_cache.go:2251] [“[health check] check health error”] [store=172.16.120.10:20161] [error=“rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 172.16.120.10:20161: connect: connection refused"”]

在store 里面发现信息


如何删除这些信息,让集群启动不会找已经下线的ip。我进入pd-ctl交互里面,手动store delete id ,显示成功,但是发现store里面还是有。没有删除掉

tikv下线后,状态是否变为 Tombstone

store delete id 只是把tikv变为offline状态,在此期间会转移region和leader ,之后变成tombestone状态执行tiup cluster prune就好了。 tidb报找不到region是因为 因为tikv下线 leader和region转移了,导致tidb 的region cache 失效,tidb会自动重试这是正常机制。从你的描述来看应该是之前有tikv下线没完成,现在又做了tidb server的缩容,tiup cluster display xx 先看下集群状态

tikv 现在是offine状态,没有正常下线,tidb都起不来,但是集群里没有下线的节点,因为我同事操作,加了force

有什么办法可以把这下线的ip剔除走,让集群起来吗,数据少了都没事。现在就是因为集群起不来,数据也没办法备份出来,用br备份,报找不到leader错误。

如果仅仅是强制下线了1个tikv节点,按理说不应该这样,他还有2个副本呢 ,你先手动添加remove peer命令,把下线节点上的peer移除。
参考下面脚本-
for i in {下线store_id}
do
for j in pd-ctl region store $i | jq ".regions[] | {id: .id}"|grep id|awk '{print $2}'
do
pd-ctl operator add remove-peer $j $i
done
pd-ctl store $i
done
然后pd-ctl 观察store的状态和region count数量是否减少。

Starting component ctl: /home/tidb/.tiup/components/ctl/v5.2.2/ctl pd -u http://172.16.120.125:2379 operator add remove-peer 17487007 15698411
Failed! [500] “cannot build operator for region with no leader”

当我尝试用这样的方式去peer时候,提示说找不到leader。
和我用br备份是一样的,报找不到leader.
但是集群状态pd是正常的。

你有几个tikv,几个正常的?
估计你这得做多副本失败恢复,把有问题的store 剔除
参考以下几个:

好的,正在试。感谢,我先试试

我已经安装文档的操作了,在没有启动的时候,发现pd上store是空的。但是tikv开启之后,pd的store还有数据。tidb也无法启动还是在找已经下线的ip。

已经下线的ip状态还是offline的,不会变

说下你的操作过程 ,还有tiup display的完整输出

我第一步停止tikv,第二步 关闭pd 调度, 第三步在正常的tikv一个节点,通过下面的命令转移
/opt/tidb-community-server-v5.2.2-linux-amd64/tikv-ctl --data-dir /data1/tidb-data/tikv-20160 unsafe-recover remove-fail-stores -s 15698412 --all-regions ,这里没有看到成功的字眼,

,但是看到有在转移。是不是需要每个tikv都要执行吗?第四步我重启了pd,此时发现store count是空的。第五步启动tikv,这个时候我再发现store有数据

第三步在每个正常的tikv执行

好的,我试下

没启动tikv之前


开启tikv之后就有数据了。我还开启调度呢

这怎么回事啊:innocent:,但是我和上一次做比较,数据量少了一点点

现在什么状态?做了哪些

还是没去掉,执行一次,少几条或者几百条数据

你现在看的store和前面的不一样啊,