etcdctl客户端
etcdctl是一个命令行客户端,用于进行服务测试或者手动修改数据库内容, etcdctl v2和v3使用方式不同,现在都是使用v3版本,通过如下修改版本。
export ETCDCTL_API=2
export ETCDCTL_API=3
etcd项目二进制发行包中已经包含了etcdctl工具,通过etcdctl可执行文件直接进行调用。
常用命令
etcdctl -h #查看命令
commands:
options:
etcd支持的命令大体上分为数据库操作和非数据库操作两类。
数据库操作
数据库操作基本围绕着键值对和目录CRUD操作以及对应的生命周期管理。etcd在键的组织上采用了类似文件系统中目录盖概念,即层次化的空间接口。
键操作
增删改查操作,包括PUT,GET,DELETE等命令。
PUT
#PUT 设置或者更新某个键的值
etcdctl put /test/foo1 "hellow world"
#GET 获取指定键的值
etcdctl get /test/testkey
#GET通过十六进制返回
etcdctl get /test/foo1 --hex
#GET范围内的值,获取foo1 到foo3范围内的值
etcdtl get /test/foo1 /test/foo3
#GET通过--prefix指定前缀
etcdctl get --prefix /test/foo
#通过--limit-2限制获取的数量
etcdctl get --prefix --limit=2 /test/foo
如果想读取过往键版本的值,如回滚到旧的键的配置,可以通过访问键的修改记录来查询
- etcd集群上的键值存储的每一个修改都会增加etcd集群的全局修订版本
- 应用可以通过提供旧有的etcd修改版本来读取被替代的值
以下是访问以前版本的key的示例
#访问最新版本的key
etcdctl get --prefix foo
#访问第四个版本的key
etcdctl get --prefix-rev=4 #
如果需要读取某个范围内的键的值
#读取大于等于键b的byte值的
etcdctl get --from-key b
DELETE
删除一个或者指定范围内的键。
#删除一个键
etcdctl del foo
#删除从foo到foo9范围内键
etcdctl del foo foo9
#删除键zoo并返回被删除的键值对
etcdctl del --pref-kv zoo
#删除前缀为zoo的键的命令
etcdctl del --prefix zoo
#删除大于等于b的byte值的键的命令
watch
监测一个键值的变化,一旦键值发生更新,就会输出到最新的值并退出
etcdctl watch testkey
#在另外一个终端
etcdctl put testkey Hello
#16进制观察
etcdctl watch foo --hex
当应用或者etcd实例出现异常,该键的改动可能发生在出错期间,这样导致了应用客户端没能实时接收这个更新。此时需要观察指定历史版本
#示例操作
etcdctl put foo bar #revision=2
etcdctl put foo1 bar1 #revsion=3
etcdctl put foo bar_new #revsion=4
etcd put foo1 bar1_new #revsion=5
#从修订版本2开始观察键'foo'的改动
etcdctl watch -rev=2 foo
#在键foo上观察变更并返回被修改的值和上一个修订版本的值
etcdctl watch --prev-kv foo
为了防止历史版本无限制存入数据,需要对历史版本进行压缩。经过压缩,etcd删除历史修订版本,释放存储空间,并在压缩修订版本之前的数据将不可访问。
#压缩修订版本
#在压缩修订版本之前的任任何修订版本都不可访问
etcdctl compact 5
lease
租约,类似redis中的TTL。etcd中的键值对可以绑定到租约上,实现存储周期控制。在现实中实现服务的心跳,在服务启动时,将租约和服务地址绑定,并写入etcd服务器,为了保持服务状态,定时刷新租约。应用客户端可以为etcd集群里面的键授予租约。一旦租约的TTL到期,租约就会过期并且所附带的键都会被删除。
#授租约 TTL为100秒
etcdctl lease grant 100
#附加键foo到租约
etcdctl put --lease=694d1231321s23d foo10 bar
在实际的租约操作中,建议TTL时间设置长一点,避免来不及操作而出现错误。
撤销lease
应用可以通过租约ID可以撤销租约,撤销的时候会删除所有附带的key
#删除租约
etcdctl lease revoke 694d1231321s23d
刷新租约
刷新TTL保持租约存储,因此租约不会过期
etcdctl lease keep alive 694d1231321s23d
查询租期
#查询租约信息
etcdctl lease timetolive 694d1231321s23d
#查询那些key绑定了租约信息
etcdctl lease timetolive --keys 694d1231321s23d