Etcd运行一段时间后,发现db占用的空间很大,将etcd内的数据导出,发现只有180多k,为什么会占用这么多空间呢?,我来为大家讲解一下关于查看etc文件第一列和第三列?跟着小编一起来看一看吧!
查看etc文件第一列和第三列
Etcd运行一段时间后,发现db占用的空间很大,将etcd内的数据导出,发现只有180多k,为什么会占用这么多空间呢?
[root@node3snap]#pwd
/var/lib/etcd/member/snap
[root@node3snap]#ll-lh
total509M
-rw-r--r--1rootroot390KJun1412:31000000000001a198-0000000001357eb0.snap
-rw-r--r--1rootroot390KJun1413:11000000000001a198-000000000135a5c3.snap
-rw-r--r--1rootroot390KJun1413:52000000000001a198-000000000135ccd5.snap
-rw-r--r--1rootroot390KJun1414:29000000000001a198-000000000135f3e6.snap
-rw-r--r--1rootroot391KJun1414:50000000000001a19a-0000000001361af7.snap
-rw-------1rootroot523MJun1415:05db
看一下一下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命令,如下所示:
[root@node2snap]#etcdctl--endpointshttp://10.110.17.119:2379defrag
Finisheddefragmentingetcdmember\[http://10.110.17.119:2379\]
[root@node2snap]#ll-lh
total3.0M
-rw-r--r--1rootroot390KJun1413:08000000000001a198-000000000135a24e.snap
-rw-r--r--1rootroot390KJun1413:48000000000001a198-000000000135c961.snap
-rw-r--r--1rootroot390KJun1414:27000000000001a198-000000000135f072.snap
-rw-r--r--1rootroot390KJun1414:48000000000001a19a-0000000001361783.snap
-rw-r--r--1rootroot390KJun1415:09000000000001a19b-0000000001363e96.snap
-rw-------1rootroot18MJun1415:20db
附:
Etcd默认的db 配额是2GB,etcd主要用于存储元数据,这个一般就够用了。
,