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

终端一获取到了锁,终端二等待,终端一断开连接后,终端二就可以获取到锁了。

文章评论

0条评论