磁盘空间小于10G,stop-write-at-available-space 默认10G,导致不写binlog,磁盘扩容后还是不写binlog

【 TiDB 使用环境】生产环境
【 TiDB 版本】v6.1.1
【复现路径】
【遇到的问题:问题现象及影响】
磁盘空间小于10G,stop-write-at-available-space 默认10G,导致不写binlog,磁盘扩容后还是不写binlog
【资源配置】
【附件:截图/日志/监控】
磁盘满时pump日志:
[2023/05/25 09:51:05.700 +08:00] [INFO] [server.go:563] [“server info tick”] [writeBinlogCount=87937391] [alivePullerCount=1] [MaxCommitTS=441707256732188673]
[2023/05/25 09:51:06.697 +08:00] [WARN] [storage.go:340] [“no available space, you may want to free up some space or decrease stop-write-at-available-space configuration”] [available=1072
4401152] [StopWriteAtAvailableSpace=10737418240]
现在pump 日志:
[2023/05/25 11:27:15.700 +08:00] [INFO] [server.go:563] [“server info tick”] [writeBinlogCount=87937393] [alivePullerCount=1] [MaxCommitTS=441708768922959882]
[2023/05/25 11:27:25.698 +08:00] [INFO] [storage.go:387] [DBStats] [DBStats=“{"WriteDelayCount":0,"WriteDelayDuration":0,"WritePaused":false,"AliveSnapshots":0,"AliveIterators":0,"IOWrite":8879673729,"IORead":13073115775,"BlockCacheSize":8046004,"OpenedTablesCount":7,"LevelSizes":[114836538,731288813],"LevelTablesCounts":[5,11],"LevelRead":[0,3638915187],"LevelWrite":[1515677908,2969180855],"LevelDurations":[30038423418,113505522758]}”]
[2023/05/25 11:27:25.700 +08:00] [INFO] [server.go:563] [“server info tick”] [writeBinlogCount=87937393] [alivePullerCount=1] [MaxCommitTS=441708772081795074]

根据提供的信息,可以看出 TiDB Pump 在磁盘空间小于 10G 时停止写入 binlog,而在磁盘空间扩容后,Pump 仍然没有写入 binlog。同时,Pump 日志中显示 writeBinlogCount 值没有变化。

首先,需要确认 Pump 的配置文件中是否开启了 binlog 功能。如果没有开启,则 Pump 不会写入 binlog。可以参考 TiDB 官方文档中的 binlog 配置 进行配置。

如果已经开启了 binlog 功能,可以检查 Pump 的日志文件中是否有报错信息。如果没有报错信息,可以尝试重启 Pump 服务,确保配置生效。

如果重启服务后仍然无法写入 binlog,可以检查磁盘空间是否已经扩容成功,并且是否已经满足了 stop-write-at-available-space 的配置。如果磁盘空间已经满足要求,可以尝试修改 stop-write-at-available-space 的配置,将其设置为更小的值,以确保 Pump 能够正常写入 binlog。

如果以上方法都无法解决问题,可以尝试升级 TiDB 和 Pump 的版本 。

重启 Pump 服务后还是没写binlog
[2023/05/25 15:26:11.695 +08:00] [INFO] [server.go:563] [“server info tick”] [writeBinlogCount=0] [alivePullerCount=0] [MaxCommitTS=441712526993129477]
[2023/05/25 15:26:21.694 +08:00] [INFO] [storage.go:387] [DBStats] [DBStats=“{"WriteDelayCount":0,"WriteDelayDuration":0,"WritePaused":false,"AliveSnapshots":0,"AliveIterators":0,"IOWrite":14303991,"IORead":42327362,"BlockCacheSize":2406698,"OpenedTablesCount":6,"LevelSizes":[129107822,731288813],"LevelTablesCounts":[6,11],"LevelRead":[0,0],"LevelWrite":[0,0],"LevelDurations":[0,0]}”]
[2023/05/25 15:26:21.696 +08:00] [INFO] [server.go:563] [“server info tick”] [writeBinlogCount=0] [alivePullerCount=1] [MaxCommitTS=441712530138857497]


凌晨1点磁盘小于10G后就没有binlog写入了,

tiup cluster show-config 查看binlog开启了,pump里没有
server_configs:
tidb:
binlog.enable: true
binlog.ignore-error: true

pump_servers:

  • host: 172.
    ssh_port: 22
    port: 8250
    deploy_dir: /home/pirate/programs/tidb-deploy/pump-8250
    data_dir: /home/pirate/programs/tidb-data/pump-8250
    log_dir: /home/pirate/programs/log/pump-8250
    arch: amd64
    os: linux

pump 配置文件是默认的。
cat /home/pirate/programs/tidb-deploy/pump-8250/conf/pump.toml

 # WARNING: This file is auto-generated. Do not edit! All your modification will be overwritten!
  # You can use 'tiup cluster edit-config' and 'tiup cluster reload' to update the configuration
 # All configuration items you want to change can be added to:
 # server_configs:
 #   pump:
 #     aa.b1.c3: value
 #     aa.b2.c4: value

image
stop-write-at-available-space 的配置,将其设置为更小的值 也是不行。

可以单独升级 Pump 的版本吗?不升级集群?

从tidb的日志看,9点51扩容成功后,开始写binlog了,可是pump 和drainer没有binlog
[2023/05/25 09:51:17.450 +08:00] [INFO] [client.go:570] [“[pumps client] write detect binlog to unavailable pump success”] [NodeID=172.23.224.123:8250]
[2023/05/25 09:51:17.450 +08:00] [INFO] [client.go:397] [“[pumps client] set pump available”] [NodeID=172.23.224.123:8250] [available=true]

你看下你的tidb 配置参数binlog.ignore-errror

tidb:
binlog.enable: true
binlog.ignore-error: true

你设置了binlog.ignore-error: true,那么如果pump 有问题导致tidb 节点无法写入的话,那么tidb节点就会跳过写pump的过程了,需要重置下tidb写pump的状态了
curl http://{TiDBIP}:10080/binlog/recover

1 个赞

根据大佬提示,我找到了 这个博客,专栏 - 监控告警处理之tidb_server_critical_error_total | TiDB 社区
运行binlog/recover就好了,看到binlog日志开始更新了,,不过从 curl http://ip:10080/info/all 显示还是 “binlog_status”: “Skipping”。先不管了,多谢大佬。

麻烦再问一个问题,binlog可以手动清理吗?我发现出问题之前的超过7天的binlog还在

curl http://ip:10080/info/all 显示还是 “binlog_status”: “Skipping”。
这是bug 来的,需要6.5.1才修复了这个bug
你用curl http://{TiDBIP}:10080/binlog/recover?op=status
这个如果返回
skipped:false 就说明tidb节点没有跳过写pump ,已经恢复了

可以用rm手动删除,也可以配置参数
配置参数的可以参考下这篇文章专栏 - # drainer binlog 清理机制 源码详解 | TiDB 社区

多谢多谢

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