Etcd的db文件很大

     Etcd运行一段时间后,发现db占用的空间很大,将etcd内的数据导出,发现只有180多k,为什么会占用这么多空间呢?

1
2
3
4
5
6
7
8
9
10
[root@node3 snap]# pwd
/var/lib/etcd/member/snap
[root@node3 snap]# ll -lh
total 509M
-rw-r--r-- 1 root root 390K Jun 14 12:31 000000000001a198-0000000001357eb0.snap
-rw-r--r-- 1 root root 390K Jun 14 13:11 000000000001a198-000000000135a5c3.snap
-rw-r--r-- 1 root root 390K Jun 14 13:52 000000000001a198-000000000135ccd5.snap
-rw-r--r-- 1 root root 390K Jun 14 14:29 000000000001a198-000000000135f3e6.snap
-rw-r--r-- 1 root root 391K Jun 14 14:50 000000000001a19a-0000000001361af7.snap
-rw------- 1 root root 523M Jun 14 15:05 db

    看一下一下etcd官方的说明

          since etcd keeps an exact history of its keyspace, this history should be periodically compacted to avoid performance degradation and eventual storage space exhaustion。

意思就是etcd保存了keys的历史信息,所以会占用的空间比较大,需要周期的进行压缩,以避免出现性能下降和存储资源耗尽,继续看官方说明

         After compacting the keyspace, the backend database may exhibit internal fragmentation. Any internal fragmentation is space that is free to use by the backend but still consumes storage space. The process of defragmentation releases this storage space back to the file system. Defragmentation is issued on a per-member so that cluster-wide latency spikes may be avoided

     大概的意思是定期压缩etcd 的db后,虽然释放了一些空间,但是只能被etcd使用,并不能被宿主机使用,根据上面的解释,如果不是etcd突然释放大量keys或者etcd需求大量磁盘的场景下,只需要执行compact就可以了,执行defrag是对硬盘的一些操作而已。

     解决方法:

etcd的启动参数增加ETCD_AUTO_COMPACTION_RETENTION=1,如果需要释放硬盘空间,可以执行defrag命令,如下所示:

1
2
3
4
5
6
7
8
9
10
[root@node2 snap]# etcdctl --endpoints http://10.110.17.119:2379  defrag
Finished defragmenting etcd member\[http://10.110.17.119:2379\]
[root@node2 snap]# ll -lh
total 3.0M
-rw-r--r-- 1 root root 390K Jun 14 13:08 000000000001a198-000000000135a24e.snap
-rw-r--r-- 1 root root 390K Jun 14 13:48 000000000001a198-000000000135c961.snap
-rw-r--r-- 1 root root 390K Jun 14 14:27 000000000001a198-000000000135f072.snap
-rw-r--r-- 1 root root 390K Jun 14 14:48 000000000001a19a-0000000001361783.snap
-rw-r--r-- 1 root root 390K Jun 14 15:09 000000000001a19b-0000000001363e96.snap
-rw------- 1 root root  18M Jun 14 15:20 db

附:

Etcd默认的db 配额是2GB,etcd主要用于存储元数据,这个一般就够用了。