第四章 Etcd API的使用

1、键值 API:

etcdctl的API分为v2与v3版本,因为版本不同,使用的方法、功能、性能也会有所不同。
我们先来说v2与v3的区别:

  1. 使用 gRPC+protobuf取代 HTTP+JSON 通信,提高通信效率;另外通过gRPC
    gateway 来继续保持对 HTTPJSON 接口的支持。

    为什么要使用protobuf因为protobuf 的效率很高。在fabric中也使用protobuf来进行json与protobuf来相互转换。
  2. 使用更轻量级的基于租约( lease)的 key 自动过期机制,取代了基于TTL 的 key 的自动过期机制。
    v2使用TTL机制,:客户端可以为一个 key 设 置自动过期时间, 一旦 TTL 到了,服务端就会自动删除该 key。 如果客户端不 想服务器端删除某个 key,就需要定期去更新这个 key 的 TTL。即使整个集群都处于空闲状态,也会有很多客户端需要与服务器端进行定期通信,以保证某个 key 不被自动删除。那么对于客户端想保留的每个 key,客户端需要对每个 key 都进行定期更新,即使这些 key 的过期时间是一样的。
    v3使用是创建租约,让key与租约联系起来,假设多个key的租约时间一致,则只需要联系某个创建的租约。租约过期时,v3就会删除所有key。更新时,也不用像v2要一个一个更改租约时间。大大减少客户端的请求数量。
  3. 观察者(watcher)机制也进行了重新设计。 etcd v2 的观察者机制是基于 HTTP 长连接的事件驱动机制;而 etcd v3 的观察者机制是基于 HTTP/2 的 server push,并且对事件进行了多路复用(multiplexing)优化。
    etcd v2 的通信协议使用的是 HTTP/1.1 ,而 gRPC 支持 HTTP/2, HTTP /2 对 HTTP 通信进行了多路复用,可以共享一个 TCP 连接。 因此 etcd v3 大大减 少了客户端与服务器端的连接数,一个客户端只需要与服务器端建立一个 TCP 连接即可。 而对于 etcd v2 来说,一个客户端需要与服务器端建立多个 TCP 连 接,每个 HTTP 请求都需要建立一个连接。
  4. etcd v3 的数据模型也发生了较大的改变, etcd v2 是一个简单的 keyvalue 的内存数据库,而 etcd v3 则是支持事务和多版本并发控制的磁盘 数据库。 etcd d 数据不直接落盘,落盘的日志和快照文件只是数据的 中间格式而非最终形式,系统通过回放日志文件来构建数据的最终形 态。 etcd U 落盘的是数据的最终形态 ,日志和快照的主要作用是进行
    分布式的复制。

    我这里使用的是v3来进行操作,v2百度很多,如果想使用v2请自行百度

v3版本的操作: https://blog.csdn.net/meifannao789456/article/details/103480842

2、etcdctl API的基本知识

2.1、get/put/del

put操作:

curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'

在这里插入图片描述
注意:这里使用的keyvalue是basse64加密输入
get操作[通过范围查询]:

curl -L http://localhost:2379/v3/kv/range -X POST -d '{"key": "Zm9v"}'

第四章 Etcd API的使用_第1张图片

v2的Api用法查看网址:https://www.cnblogs.com/doscho/p/6227351.html

v3 的Api用法查看网址:
https://github.com/etcd-io/etcd/blob/master/Documentation/dev-guide/api_reference_v3.md
https://www.bookstack.cn/read/learning-etcd3/README.md

这里说明一下怎么查看api文档:
在etcd的Documentation/dev-guide/apispec/swagger/rpc.swagger.json查看,先查看对应的服务地址。然后根据据$ref的参数在rpc.swagger.json文档中继续查找,查看他有什么参数。
第四章 Etcd API的使用_第2张图片
第四章 Etcd API的使用_第3张图片

2.2、watch

curl -N http://localhost:2379/v3/watch -X POST -d '{"create_request": {"key":"Zm9v"} }' &

监视着key。
在这里插入图片描述
第四章 Etcd API的使用_第4张图片
在这里插入图片描述
V3的使用。【多路复用watch】

curl -N http://localhost:2379/v3/watch -X POST -d '{"create_request": {"key":"Zm9v","start_revision":"161"} }'

"start_revision":为从第几个版本开始监听。
第四章 Etcd API的使用_第5张图片
由图可知:当revision为161时,watch才开始watch。【设置了161版本才开始watch】

2.3、lease租约

设置租约:

curl -L http://localhost:2379/v3/lease/grant -X POST -d '{"ID":"13790822374","TTL": "30"}'

设置租约ID与TTL时间:

curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "1111", "value": "YmFy","lease":"13790822374"}'

给key设置lease租约:
再向key查找:

curl -L http://localhost:2379/v3/kv/range -X POST -d '{"key": "1111"}'

下图可以看出TTL一过,自动删除key。
在这里插入图片描述

2.4、memberAPI

接下来对集群的memberAPI进行分析[只分析v3]
这里讲一下jq:jq是一个Json数据命令行处理工具。

有关的jq文档/开发手册:https://stedolan.github.io/jq/manual/#Invokingjq
jq的简单用法:https://my.oschina.net/guol/blog/282402

/v3/cluster/member/list:查看member列表

curl -L http://localhost:22379/v3/cluster/member/list -X POST | jq .

如下图可知有三个etcd节点:
第四章 Etcd API的使用_第6张图片
/v3/cluster/member/add:加入一个 member

curl -L http://localhost:22379/v3/cluster/member/list -XPOST -H "Content-Type:application/json" -d '{"peerURLs":"http://127.0.0.1:12379"}' | jq .

第四章 Etcd API的使用_第7张图片
/v3/cluster/member/add:删除一个 member

curl -L http://localhost:22379/v3/cluster/member/remove -H "Content-Type:application/json" -d '{"ID":"5010593740877641185"}' | jq .

第四章 Etcd API的使用_第8张图片
/v3/cluster/member/update:修改member

curl -L http://localhost:22379/v3/cluster/member/update -XPUT -H "Content-Type:application/json" -d '{"peerURLs":"http://127.0.0.1:12379",”ID”:” 6668869689292193706”}' | jq .

第四章 Etcd API的使用_第9张图片

2.5、原子事务的使用:

curl -L http://localhost:2379/v3/kv/txn -X POST -d \
'{"compare":[{"target":"CREATE","key":"Zm9v","createRevision":"2"}],"success":[{"requestPut":{"key":"Zm9v","value":"YmFy"}}]}'

在这里插入图片描述
注意:v2使用的是原子的 CAD,CASV3则是使用txn的事务来操作
API 使用示例,一般不使用RESTful API。但这里还是介绍了v3的API使用。让自己也更清楚v3的用法,之后再代码上也会更容易了解

第三章 介绍etcdctl的命令代码
第五章 etcdctl的高级与用法

你可能感兴趣的:(etcdraft)