Br备份S3失败[BR:KV:ErrKVStorage]tikv storage occur I/O error

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.0.4
【复现路径】备份S3,备份失败。连续失败3次,同一s3路径备份多个库,部分库可以备份成功,部分失败。
失败的库都是比较大3-5TB的库。

[2023/08/23 00:21:29.453 +08:00] [ERROR] [main.go:58] ["br failed"] [error="[BR:KV:ErrKVStorage]tikv storage occur I/O error"] [errorVerbose="[BR:KV:ErrKVStorage]tikv storage occur I/O error\ngithub.com/pingcap/errors.AddStack\n\tgithub.com/pingcap/errors@v0.11.5-0.20201126102027-b0a155152ca3/errors.go:174\ngithub.com/pingcap/errors.Trace\n\tgithub.com/pingcap/errors@v0.11.5-0.20201126102027-b0a155152ca3/juju_adaptor.go:15\ngithub.com/pingcap/br/pkg/backup.(*Client).BackupRange\n\tgithub.com/pingcap/br@/pkg/backup/client.go:552\ngithub.com/pingcap/br/pkg/backup.(*Client).BackupRanges.func2.1\n\tgithub.com/pingcap/br@/pkg/backup/client.go:486\ngithub.com/pingcap/br/pkg/utils.(*WorkerPool).ApplyOnErrorGroup.func1\n\tgithub.com/pingcap/br@/pkg/utils/worker.go:63\ngolang.org/x/sync/errgroup.(*Group).Go.func1\n\tgolang.org/x/sync@v0.0.0-20201020160332-67f06af15bc9/errgroup/errgroup.go:57\nruntime.goexit\n\truntime/asm_amd64.s:1357"] [stack="main.main\n\tgithub.com/pingcap/br@/cmd/br/main.go:58\nruntime.main\n\truntime/proc.go:203"]

可以发一下完整日志么?导致这个报错的原因可能有多种

命令能发一下吗?用的什么S3,另外报错发全一点

aws的s3

  • 命令
tiup br:v5.0.4 backup db --pd "xxxxx:2379" --storage "s3://acc-hk-exchange-tidb-backups/tidb_backup/prod_datacenter_backups/prod_datacenter_broker_20230802" --db db --s3.region "ap-east-1" --send-credentials-to-tikv=true --ratelimit 128 --log-file backup_db_db.log

大佬,日志发到楼下了

找到一个类似的帖子
br 备份失败问题 [pd] failed updateMember - :ringer_planet: TiDB 技术问题 - TiDB 的问答社区 (asktug.com)
加了–send-credentials-to-tikv=true:表示将 S3 的访问权限传递给 TiKV 节点这个参数配置有时能成功,你可以尝试一下

我也觉得失败原因是failed updateMember引起的

命令已经加上这个参数

应该还是pd的问题,br备份的时候需要给pd发送请求获取leader,但是获取失败了,5.0是不是不会重试啊,
要不检查下172.16.25.123:2379这个节点是pd的leader吗?不是的话换成leader试一下,还有br备份的机器到172.16.25.123:2379这个节点的网络有问题吗?

不是leader,库比较大,历史报错到100%左右报错。总共备份了40多个库,有4个备份失败。

命令行写的pd节点是 172.16.25.151:2379

但是你日志里面是 [address=http://172.16.25.123:2379]

这是为撒嘞,要连接123 ?

不是你指定的,那应该是tikv自己去pd获取leader了,但是为啥招的是这个节点。。。

我这边之前遇到的问题是 S3(自建)与 br 工具的返回错误码不一致,所以频繁导致的失败,解决方案是

  1. 重新编译br 工具把这几个时间拉长 NumMaxRetries、MinRetryDelay、MinThrottleDelay
  2. 修改 S3 返回码以便适配 br 工具
func defaultS3Retryer() request.Retryer {
	return retryerWithLog{
		DefaultRetryer: client.DefaultRetryer{
			NumMaxRetries:    maxRetries,
			MinRetryDelay:    1 * time.Second,
			MinThrottleDelay: 2 * time.Second,
		},
	}
}

优秀。不太敢自己编译。您的版本是哪个。

额外 的报错信息

[2023/08/28 15:34:36.338 +08:00] [INFO] [collector.go:67] ["Database backup failed summary"] [total-ranges=3834] [ranges-succeed=3632] [ranges-failed=202] [backup-total-ranges=3834] [unit-name="range start:7480000000000024f45f69800000000000000e00 end:7480000000000024f45f69800000000000000efb"] [error="rpc error: code = Canceled desc = context canceled"] [errorVerbose="rpc error: code = Canceled desc = context canceled\ngithub.com/tikv/pd/client.(*client).GetAllStores\n\tgithub.com/tikv/pd@v1.1.0-beta.0.20210323123936-c8fa72502f16/client/client.go:1196\ngithub.com/pingcap/br/pkg/conn.GetAllTiKVStores\n\tgithub.com/pingcap/br@/pkg/conn/conn.go:140
[2023/08/28 15:34:36.341 +08:00] [ERROR] [backup.go:41] ["failed to backup"] [error="[BR:KV:ErrKVStorage]tikv storage occur I/O error"] [errorVerbose="[BR:KV:ErrKVStorage]tikv storage occur I/O error
[2023/08/28 15:34:36.341 +08:00] [ERROR] [main.go:58] ["br failed"] [error="[BR:KV:ErrKVStorage]tikv storage occur I/O error"] [errorVerbose="[BR:KV:ErrKVStorage]tikv storage occur I/O error

ranges-failed=202
会有一些warning信息

[2023/08/21 10:50:04.297 +08:00] [WARN] [push.go:157] ["backup occur region error"] [error="{\"RegionError\":{\"message\":\"peer is not leader for region 736943940, leader may Some(id: 1147730709 store_id: 19)\",\"not_leader\":{\"region_id\":736943940,\"leader\":{\"id\":1147730709,\"store_id\":19}}}}"]

换了后,还是出现报错tikv no-leader

backup_db_stat_err.log (197.3 KB)

大佬,能帮看下么