返回介绍

键值数据存储

发布于 2024-12-29 22:52:38 字数 4099 浏览 0 评论 0 收藏 0

除了提供服务发现和健康检查的集成.Consul 提供了一个易用的键/值存储.这可以用来保持动态配置,协助服务协调,领袖选举,做开发者可以想到的任何事情。

这一章假设你已经有至少一个 Consul 的 agent 在运行。

简单使用

为了演示如果简单的使用键值存储.我们将操作一些键.查询本地 agent 我们首先确认现在还没有存储任何 key.

[root@hdp3 consul.d]# curl -v http://localhost:8500/v1/kv/?recurse
* About to connect() to localhost port 8500 (#0)
*   Trying ::1... 拒绝连接
*   Trying 127.0.0.1... connected
* Connected to localhost (127.0.0.1) port 8500 (#0)
> GET /v1/kv/?recurse HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.21 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: localhost:8500
> Accept: */*
>
< HTTP/1.1 404 Not Found
< X-Consul-Index: 1
< X-Consul-Knownleader: true
< X-Consul-Lastcontact: 0
< Date: Thu, 18 Aug 2016 08:21:39 GMT
< Content-Length: 0
< Content-Type: text/plain; charset=utf-8
<
* Connection #0 to host localhost left intact
* Closing connection #0

因为没有 key 所以我们得到了一个 404 响应.现在我们 `PUT 一些示例的 Key:

[root@hdp3 consul.d]# curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key1
[root@hdp3 consul.d]# curl -X PUT -d 'test' http://localhost:8500/v1/kv/web/key2?flags=42
[root@hdp3 consul.d]# curl -X PUT -d 'test'  http://localhost:8500/v1/kv/web/sub/key3
[root@hdp3 consul.d]# curl http://localhost:8500/v1/kv/?recurse
[{"LockIndex":0,"Key":"web/key1","Flags":0,"Value":"dGVzdA==","CreateIndex":1201,"ModifyIndex":1201},{"LockIndex":0,"Key":"web/key2","Flags":42,"Value":"dGVzdA==","CreateIndex":1205,"ModifyIndex":1206},{"LockIndex":0,"Key":"web/sub/key3","Flags":0,"Value":"dGVzdA==","CreateIndex":1217,"ModifyIndex":1217}]

我们创建了值为"test"的 3 个 Key,注意返回的值是经过了 base64 编码的.用来支持非 UTF8 编码字符.对 Key web/key2 我们设置了一个标志值为 42 .所有的 key 支持设置一个 64 位的整形数字标志.Consul 内部不适用这个值.但是他可以被客户端适用来做一些元数据。

完成设置后,我们发起了一个 GET 请求来接收多个 key 的值,使用 ?recurse 参数。

你可以获取单个的 key

[root@hdp3 consul.d]# curl http://localhost:8500/v1/kv/web/key1
[{"LockIndex":0,"Key":"web/key1","Flags":0,"Value":"dGVzdA==","CreateIndex":1201,"ModifyIndex":1201}]

删除 key 也很简单.通过 DELETE 动作来完成.我们可以通过指定完整路径来删除一个单独的 key.或者我们可以使用 ?recurse 递归的删除主路径下所有 key.

[root@hdp3 consul.d]# curl -X DELETE http://localhost:8500/v1/kv/web/sub?recurse
true
[root@hdp3 consul.d]# curl http://localhost:8500/v1/kv/web?recurse
[{"LockIndex":0,"Key":"web/key1","Flags":0,"Value":"dGVzdA==","CreateIndex":1201,"ModifyIndex":1201},{"LockIndex":0,"Key":"web/key2","Flags":42,"Value":"dGVzdA==","CreateIndex":1205,"ModifyIndex":1206}]

可以通过发送相同的 URL 并提供不同的消息体的 PUT 请求去修改一个 Key.另外,Consul 提供一个检查并设置的操作,实现原子的 Key 修改.通过 ?cas= 参数加上 GET 中最近的 ModifyIndex 来达到. 例如我们想修改 "web/key1":

[root@hdp3 consul.d]# curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=1201
true
[root@hdp3 consul.d]# curl -X PUT -d 'newval' http://localhost:8500/v1/kv/web/key1?cas=1201
false

在这种情况下,第一次 CAS 更新成功因为 ModifyIndex1201 .而第二次失败是因为 ModifyIndex 在第一次更新后已经不是 1201 了 .

我们也可以使用 ModifyIndex 来等待 key 值的改变.例如我们想等待 key2 被修改:

[root@hdp3 consul.d]# curl http://localhost:8500/v1/kv/web/key2
[{"LockIndex":0,"Key":"web/key2","Flags":42,"Value":"dGVzdA==","CreateIndex":1205,"ModifyIndex":1206}]

[root@hdp3 consul.d]# curl "http://localhost:8500/v1/kv/web/key2?index=1206&wait=5s"
[{"LockIndex":0,"Key":"web/key2","Flags":42,"Value":"dGVzdA==","CreateIndex":1205,"ModifyIndex":1206}]

通过提供 ?index= ,我们请求等待 key 值有一个比 1206 更大的 ModifyIndex .虽然 ?wait=5s 参数限制了这个请求最多 5 秒,否则返回当前的未改变的值. 这样可以有效的等待 key 的改变.另外,这个功能可以用于等待一组 key.直到其中的某个 key 有修改。

下一步

这里有一些说 API 可以支持的操作的例子,要查看完整文档.请查看 这里 .

下面我们将看一看 Consul 支持的 WebUI 选项。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文