etcd常用功能
etcd 是一个分布式的 kv 数据库,除了基本的数据读写功能之外,还提供事务写,watch,租约,分布式锁等功能,下面简单介绍这些功能的使用方法。
1. 读写etcd
1.1 写入数据
ENDPOINTS=192.168.56.200:2379
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 put /test 'hello'
1.2 读取数据
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 get /test
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 --write-out="json" get /test
参数 --write-out 可以设置输出格式。
1.3 按前缀读取数据
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 get / --prefix
参数 --prefix 指定按前缀读取 key 值
1.4 删除数据
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 del /test
1.5 按前缀删除数据
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 del / --prefix
参数 --prefix 指定按前缀删除 key 值
2. 支持事务写数据
txn 能够在一个事务中封装多个请求。
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 txn --interactive
compares:
value("/test") = "A"
success requests (get, put, del):
del /test
put /test1 'A'
put /test2 'B'
failure requests (get, put, del):
put /test 'B'
SUCCESS
1
OK
OK
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 get /test
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 get /test1
/test1
A
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 get /test2
/test2
B
3. watch 功能
watch 是 etcd 非常重要的一个功能,它是 etcd 实现服务发现的前提,watch 能够捕捉到 key 值的变化,并通知所有 watch 该 key 的用户。
在一个终端中执行 watch 命令:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 watch / --prefix
在另外一个终端写入数据:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 put /test 'A'
此时,第一个终端输出,如下:
[root@host10372180 ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 watch / --prefix
PUT
/test
A
put key, del key 以及网络异常断开,都会触发 watch 事件。
4. 租约功能 Lease
etcd 支持给 key 设置租约(Lease)功能,租约有时间期限,在期限内可以续租,如果没有在时间期限内续租,key 值会被自动清除。
申请一个 30 秒的租约:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 lease grant 30
lease 50e574d2ae7311a3 granted with TTL(30s)
将租约与 key 绑定:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 put /test 'A' --lease=50e574d2ae7311a3
将租约延期:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 lease keep-alive 50e574d2ae7311a3
释放租约:
etcdctl --endpoints=$ENDPOINTS --user=admin:123456 lease revoke 50e574d2ae7311a3
5. 分布式锁(Distributed locks)
etcd 支持分布式锁,两个终端同时执行如下命令,只有一个终端能够获取到锁,另外一个等待。
终端一:
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 lock /test
/test/50e574d2ae731269
终端二:
[root@localhost ~]# etcdctl --endpoints=$ENDPOINTS --user=admin:123456 lock /test
终端一获取到了锁,终端二等待,终端一断开连接后,终端二就可以获取到锁了。
文章评论