说明
这是一篇非常入门的文章,让你大概了解一下etcd。写这篇文章时使用etcd的版本是3.1.0。
etcd是以实现共享配置和服务发现为目的,提供一致性的键值存储的分布式数据库。kubernetes等项目使用了etcd。
下载安装
去这里下载release包,解压后是一些文档和两个二进制文件etcd和etcdctl。etcd是server端,etcdctl是客户端。将etcd和etcdctl加入PATH路径方便我们执行命令。
运行server
执行命令etcd,即可启动server
1 | ming@ming:/tmp$ etcd |
etcdctl
说明:etcd最新的API版本是v3。与v2相比,v3更高效更清晰。设置环境变量ETCDCTL_API=3。
1 | ming@ming:/tmp$ export ETCDCTL_API=3 |
键值对命令
put
设置key,get
取得key
1 | ming@ming:/tmp$ etcdctl put msg "Hello TenxCloud" |
del
删除key
1 | ming@ming:/tmp$ etcdctl get msg |
txn
事务
txn从标准输入中读取多个请求,将它们看做一个原子性的事务执行。事务是由条件列表,条件判断成功时的执行列表(条件列表中全部条件为真表示成功)和条件判断失败时的执行列表(条件列表中有一个为假即为失败)组成的。
看文字解释容易晕,来看实例吧
1 | ming@ming:/tmp$ etcdctl put flag 1 |
解释一下:
- etcdctl put flag 1设置flag为1
- etcdctl txn -i开启事务(-i表示交互模式)
- 第2步输入命令后回车,终端显示出compares:
- 输入value(“flag”) = “1”,此命令是比较flag的值与1是否相等
- 第4步完成后输入回车,终端会换行显示,此时可以继续输入判断条件(前面说过事务由条件列表组成),再次输入回车表示判断条件输入完毕
- 第5步连续输入两个回车后,终端显示出success requests (get, put, delete):,表示下面输入判断条件为真时要执行的命令
- 与输入判断条件相同,连续两个回车表示成功时的执行列表输入完成
- 终端显示failure requests (get, put, delete):后输入条件判断失败时的执行列表
- 为了看起来简洁,此实例中条件列表和执行列表只写了一行命令,实际可以输入多行
- 总结上面的事务,要做的事情就是flag为1时设置result为true,否则设置result为false
- 事务执行完成后查看result值为true
watch
监听
watch后etcdctl阻塞,在另一个终端中执行etcdctl put flag 2后,watch会打印出相关信息
1 | ming@ming:/tmp$ etcdctl watch flag |
lease
租约
etcd也能为key设置超时时间,但与redis不同,etcd需要先创建lease,然后使用put命令加上参数–lease=
1 | ming@ming:/tmp$ etcdctl lease grant 100 |
lease grant <ttl>
创建lease,返回lease ID。创建的lease生存时间大于或等于ttl秒(TODO:为什么可能大于?)
lease revoke <lease ID>
删除lease,并删除所有关联的key
lease timetolive <lease ID>
取得lease的总时间和剩余时间
lease keep-alive <lease ID>
此命令不会只更新一次lease时间,而是周期性地刷新,保证它不会过期。
集群管理命令
TODO
并发控制命令
lock <lock name>
通过指定的名字加锁。注意,只有当正常退出且释放锁后,lock命令的退出码是0,否则这个锁会一直被占用直到过期(默认60秒)
1 | 使用Ctrl+C正常退出lock命令,退出码为0,第二次能正常lock: |
elect
TODO
权限
user
可以为etcd创建多个用户并设置密码,子命令有:
- add 添加用户
- delete 删除用户
- get 取得用户详情
- list 列出所有用户
- passwd 修改用户密码
- grant-role 给用户分配角色
- revoke-role 给用户移除角色
role
可以为etcd创建多个角色并设置权限,子命令有:
- add 添加角色
- delete 删除角色
- get 取得角色信息
- list 列出所有角色
- grant-permission 为角色设置某个key的权限
- revoke-permission 为角色移除某个key的权限
auth
开启/关闭权限控制
示例
下面以示例来学习这三个命令
1 | root用户存在时才能开启权限控制 |
进一步学习
- etcdctl
-h查看子命令的帮助(例:etcdctl watch -h) - http://play.etcd.io/play 是网页版集群环境
- etcdctl能够设置–prefix=true来操作多个指定前缀的key