etcd 是一个分布式键值对存储,设计用来可靠而快速的保存关键数据并提供访问。通过分布式锁,leader选举和写屏障(write barriers)来实现可靠的分布式协作。
键值对
类似redis的string
使用etcdctl交互
# 将foo的值设置为bar
$ etcdctl put foo bar
OK
# 读取foo的值
$ etcdctl get foo
foo
bar
租约
类似redis的ttl,但是租约需要单独声明。当租约附加到键时,键的存活时间被绑定到租约的存活时间。
# 创建一个租约 TTL为10秒 返回的32695410dcc0ca06为租约id
$ etcdctl lease grant 10
lease 32695410dcc0ca06 granted with TTL(10s)
# 附加键 foo 到租约32695410dcc0ca06 10秒后foo将被删除
$ etcdctl put --lease=32695410dcc0ca06 foo bar
OK
# 撤销租约 租约被撤销时 附加这个租约的key都会被删除
$ etcdctl lease revoke 32695410dcc0ca06
# 维持租约 租约到期时间延长
$ etcdctl lease keep-alive 32695410dcc0ca06
监控键变化
类似redis的keyspace
# 当前终端阻塞 foo变化 终端输出变化产生的事件
$ etcdctl watch foo
# 在另外一个终端输入 etcdctl put foo bar时 阻塞终端输出:
foo
bar
# 监控foo为前缀的键的变化
$ etcdctl watch --prefix foo
# 监控键foo和键zoo的变化
$ etcdctl watch -i
$ watch foo
$ watch zoo