0x01 endpoint
endpoint即意为端点,指向客户端提供服务的一个服务入口。Etcd集群中每个节点都可以提供一个端点。严格来说,endpoint不属于数据操作范畴,但与后续defrag有关联,是理解defrag的前提,就先放这里了。
提供了3个子命令。
hashkv
打印出KV历史的hash值。是用来检查请求发生时各端点的记录是否一致。可以计算指定的revison版本。health
检查端点是否健康。可以用于检查端点是否健康。可以通过-w json
的全局选项,返回json格式,方便使用方解析。status
返回端点的状态。包含集群ID,成员ID和当前的leader节点,对管理Etcd集群非常有帮助。
小结:
设计基础服务时,要考虑方便使用者,尽可能多提供一些选项。对于输出信息来说,最好有全局的能用选项。如-w
选项指定输出的格式。
0x02 碎片整理 defrag
根据文档中的说明可知,当通过删除和压缩key回收空间时,Etcd仅是把空间挂在一个空闲列表上了,对应的后端DB文件大小是不变的。经过碎片整理,Etcd可以真正减小DB文件的大小,将磁盘空间归还给系统。
通过了解其功能知道,对于管理Etcd来说,这个特性是必须的,特别是k8s环境中会经常删除一些资源的(升级时旧的pod、水平缩容时删除的pod),key删除磁盘空间却没释放的话,用户就会困惑。
defrag的参数很少,但也能看出设计很灵活。
--cluster
用来指定操作的端点范围。默认为false,为true时代表使用集群中所有的endpoint。--data-dir
可选的。可以用来对一个已经有的Etcd DB目录操作,即offline。通常可以去操作Etcd的备份。
0x03 compaction
Etcd为每个key都维护了多