0
0
0
0
专栏/.../

关于 PD etcd 空间使用满处理记录

 WalterWj  发表于  2025-03-04

背景

周末接到社区伙伴的电话,说 pd 拉不起来了。报错 Error: etcdserver: mvcc: database space exceeded

找到相关 FAQ:https://docs.pingcap.com/zh/tidb/stable/ticdc-faq

处理方式

因为当时 PD 拉不起来报错,因此进行 etcd 碎片整理处理,操作如下:

  1. 设置环境变量 ETCDCTL_API 的值为 3,表示使用 etcdctl v3 AP

export ETCDCTL_API=3

  1. 停止 PD 服务,需要登录对应服务器

systemctl stop pd-2379

因为 TiDB 集群每个节点都是有自己的守护进程,如果启动命令有执行过,虽然没有启动成功,但守护进程会不断尝试启动。为了避免干扰,推荐手动关闭守护进程。

这一步可以一次性关闭:

tiup cluster stop cluster_name -y

  1. 对 etcd 的数据目录进行碎片整理(defragmentation)

etcdctl defrag --data-dir /data2/tiup/tidb-data/pd-2379

A. 这里 etcdctl 工具可以从 tiup 服务器获取,scp 到 pd 服务器上使用。tiup 一般在管理用户家目录下,路径一般为:

find .tiup -name etcdctl
.tiup/components/ctl/v6.1.3/etcdctl

B. 路径使用 pd data 目录即可,获取方式:

tiup cluster display cluster_name

结果中找到 pd 对应 Data Dir 列的路径即可。

  1. db 文件的所有者和组设置为 tidb

chown tidb.tidb db

  • db 文件是 etcd 存储数据的核心文件,位于 data-dir/member/snap 目录下。
  • 如果文件权限不正确,可能导致 etcd 无法正常启动或运行。

如果 3 的操作不是使用 tidb 用户,但是 pd 启动用户是 tidb,那么会有权限问题。整理完成后,会看到 db 文件会从 8GB+ 大小降下来。

  1. 启动 pd

systemctl start pd-2379

  1. 查询 etcd 端点的状态,并以表格形式输出

etcdctl endpoint status --write-out=table

确定可以正常访问

  1. 列出当前 etcd 集群中的所有告警
  • etcd 在检测到异常情况(如节点失联、存储空间不足等)时会触发告警。

尽管我们已经进行了空间压缩,但 etcd 空间不足的告警可能仍然存在,这会导致 PD 无法启动.

  1. 解除 etcd 集群中的所有告警

ETCDCTL_API=3 etcdctl alarm disarm

  • 在解决告警问题后,需要手动解除告警,否则告警会持续存在。

可以观察 pd 应该可以正常启动。或者重启一下 pd

问题原因

  1. PD etcd 在新版本,存储空间配置为 8GB,这个不推荐调整过大。
  2. TiDB cdc 在低版本会将 metaData ,包括表的状态信息,调度信息,都是存在 etcd 里面。另外如果执行了比较多的 ddl ,会导致这些信息短时间内增长较大。etcd 在没有及时整理的情况下,就有可能空间使用超过 8GB。
  3. 这个问题在 5.4 有相关优化代码,但是在 6.0 版本后才默认打开相关优化代码。

推荐使用 cdc 的话,tidb 集群在 v6.5+。

其他更低版本推荐使用 tidb binlog。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论