官方链接: etcd命令行
-
快速入门
-
单机启动
etcd
-
本地集群启动
-
使用goreman启动本地三节点
Procfilegoreman -f Procfile start #go get 慢解决 #go env -w GOPROXY=https://goproxy.cn,direct
查看节点列表
etcdctl --write-out=table --endpoints=localhost:2379 member list
-
管理节点
-
关闭某节点
goreman run stop etcd2
-
重启
goreman run restart etcd2
-
-
-
-
etcd命令行
-
获取etcd版本号
#目前版本是v3,之前有版本是v2 etcdctl version
-
写入 put
-
普通写入
#成功设置后返回OK etcdctl put foo bar
-
带上lease
-
- 创建lease
#60的意思是60秒返回: lease 694d73f278bcd80a granted with TTL(60s) etcdctl lease grant 60
-
- 普通写入命令加上lease id
#注意点 #1. 如果lease过期的话会提示lease不存在,抛出异常 #2. 如果lease过期,key会被自动删除 #3. lease可以续期和撤销看后面lease的管理 etcdctl put foo bar1 --lease=694d73f278bcd80a
-
-
-
读取 get
-
准备测试数据
etcdctl put foo bar etcdctl put foo1 bar1 etcdctl put foo2 bar2 etcdctl put foo3 bar3
-
获取单个key
-
简单
etcdctl get foo
-
只显示value
etcdctl get foo --print-value-only
获取详细信息
etcdctl get foo -w=json
-
显示16进制
etcdctl get foo --hex
-
-
获取range
-
前闭后开range
#特别注意这个是前闭后开,即包含foo,foo1,foo2 不含foo3 etcdctl get foo foo3
-
前缀匹配
etcdctl get --prefix foo
-
前缀匹配+条数限制
etcdctl get --prefix --limit=1 foo
-
-
获取之前版本的key
-
etcd版本号的理解
对etcd集群键值存储的每次修改都会增加etcd集群的全局修订, 类似git commitId
-
取值逻辑 可以理解为是一个快照
历史版本的时候如果key不存在,则不展示
历史版本的时候key存在,则展示当时版本的value
-
举例
foo = bar # revision = 2 foo1 = bar1 # revision = 3 foo = bar_new # revision = 4 foo1 = bar1_new # revision = 5
如果版本号不存在的话会抛出异常 Error: etcdserver: mvcc: required revision is a future revision
-
语法
etcdctl get foo --prefix --rev=3
-
读取大于等于key的值
-
测试数据
a =123 b = 456 z = 789
-
读取命令
etcdctl get --from-key b
-
-
删除 del
- 普通删除
etcdctl del a
-
范围删除
etcdctl del foo foo4
-
前缀删除
etcdctl del --prefix foo
-
大于等于key的删除
etcdctl del --from-key b
-
返回删除前的值
-
前面的四个删除命令返回的是影响的key的数量
- 比如成功删了1个key,则返回1;但是没有值
-
需要带上旧值的话
etcdctl del --prev-kv zoo
-
-
查看变化 watch
-
简单用法
-
watch单个key
etcdctl watch foo
-
range key
etcdctl watch foo foo9
-
prefix
etcdctl watch --prefix foo
多个key
etcdctl watch -i watch foo watch zoo
-
-
历史变化watch
-
指定版本
etcdctl watch --rev=2 foo
获取上一次变化
etcdctl watch --prev-kv foo
-
-
process
- 语法
watch a progress
-
用处
- 类似乐观锁
-
实验
-
客户端1 watch
etcdctl watch foo
-
客户端2 修改key
etcdctl put foo bar1
客户端1输出
PUT foo bar1
-
-
注意点
- 客户端1 watch可以连续监听不是一次性的 zk的watch是一次性的
-
-
合并版本 compact
etcdctl compact 5
-
作用
rev=1 到 rev=4的数据清除了
为了节约空间
-
-
租约 lease
-
新建租约
etcdctl lease grant 60
-
使用租约
etcdctl put --lease=32695410dcc0ca06 foo bar
撤销租约
etcdctl lease revoke 32695410dcc0ca06
-
如果key使用了租约,租约过期key会被删除
实验
- 新建租约
#694d73f278bcd85a granted with TTL(60s) etcdctl lease grant 60lease
- 创建key,使用租约
etcdctl put hello world --lease=694d73f278bcd85a
- 撤销租约
etcdctl lease revoke 694d73f278bcd85
-
- 获取key
- 结果返回为空
-
续约
etcdctl lease keep-alive 32695410dcc0ca06
-
效果是如果不中断这个续约步骤会一直续约
-
效果是如果不中断这个续约步骤会一直续约
-
获取租约信息 租约失效了会报错
-
根据租约id
etcdctl lease timetolive 694d5765fc71500b
-
获取租约相关的key
#输出结果lease 694d73f278bcd860 granted with TTL(60s), remaining(46s), attached keys([hello]) etcdctl lease timetolive --keys 694d5765fc71500b
-
-
-