PD 日志异常,无限打印:[2020/07/23 17:05:16.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]

==> pd.log <==
[2020/07/23 17:05:15.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:15.468 +08:00] [WARN] [client.go:179] ["server sync index not match the leader"] [server=pd-172.19.20.139-2379] [own=326798] [leader=326799] [records-length=0]
[2020/07/23 17:05:16.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:17.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:18.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:19.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:20.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:21.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:22.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]
[2020/07/23 17:05:23.098 +08:00] [ERROR] [region_storage.go:89] ["flush regions meet error"] [error="write /data/tidb/data/pd-2379/region-meta/000013.log: no space left on device"]

异常日志如上

df -h

文件系统        容量  已用  可用 已用% 挂载点
devtmpfs        7.6G     0  7.6G    0% /dev
tmpfs           7.6G     0  7.6G    0% /dev/shm
tmpfs           7.6G  540K  7.6G    1% /run
tmpfs           7.6G     0  7.6G    0% /sys/fs/cgroup
/dev/vda1        40G  5.4G   33G   15% /
/dev/vdb         99G  9.5G   84G   11% /data
tmpfs           1.6G     0  1.6G    0% /run/user/0
tiup ctl pd health
Starting component `ctl`:  pd health
[
  {
    "name": "pd-172.19.20.139-2379",
    "member_id": 235106545328261895,
    "client_urls": [
      "http://172.19.20.139:2379"
    ],
    "health": true
  },
  {
    "name": "pd-172.19.20.138-2379",
    "member_id": 16529721752275845645,
    "client_urls": [
      "http://172.19.20.138:2379"
    ],
    "health": true
  }
]

可能有用的线索

https://github.com/syndtr/goleveldb/issues/61

由于这台机器本身运行了一个 binlog drainer/pump, 模式为 file, 短时间内导入大量数据导致磁盘被写满。
然后使用 tiup 移除该机器上的 binlog 模块,系统恢复正常。

今日观察日志发现以上问题。

1、这块如何恢复?
2、数据是否会丢失?

是否可以使用

tiup cluster restart xxx -R pd

尝试重启 pd 节点?

关键是 pd 节点只有2个(cluster 是偶数个的)。。。

  1. pd 有很多信息需要落盘的如 region meta 以及集群的重要元信息,因此需要保留一定的磁盘空间。
  2. 如果只是 region meta 写入失败,数据不会丢失。

两副本的 PD 在重启过程中会导致服务不可用。

这个看起来是底层db的一个bug

磁盘空间已经正常了 meta log估计没有滚动,还是磁盘满的状态

你好,请问一下这里系统恢复正常的时间节点是什么时候,以及之后 PD 持续打印 no space left on device 的日志持续了多久?

至少持续了接近1周时间吧,其实磁盘打满后,我们立即就对该做了相关数据清理工作。只是当时没有留意pd相关的日志。
一直打印,需要手动重启 pd 才能恢复。

请问下现在服务正常了吗?PD 日志的报错是通过重启 PD 服务消失的吧?

是的,重启后,该相关log恢复正常

这个问题排查了一下,应该是跟上游项目 goleveldb 的 bug 有关,见这个 issue https://github.com/syndtr/goleveldb/issues/196

目前建议就是重启一下来解决。后面我们研究下能不能提 PR 修复,或者干脆把 goleveldb 换掉。

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