💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### **1. Consul-KV** #### **1.1 什么是consul的KV数据?** Consul 提供了一个简单的键值存储(KV store)。它可以用于保存动态配置、辅助服务间协作、建立领导 选举以及其他开发者想要实现的功能。可以把 consul 理解为简单的 Redis ,根据 KV 来进行键值对的数 据存储 ***** #### **1.2 为什么使用Consul的KV数据?** consul的kv功可以用来做动态配置。kv的增加修改删除查询除了可以通过consul客户端,还可以 **通过 http api和consul的ui**。 ***** #### **1.3 怎么操作?** **CLI的客户端方式:** 获取kv结果值,目前KV存储没任何值: ``` $ consul kv get redis/config/minconns Error! No key exists at: redis/config/minconns #用 -detailed 标识可以获取 Consul 保存的详细元数据 $ consul kv get -detailed redis/config/minconns CreateIndex 207 Flags 0 Key redis/config/minconns LockIndex 0 ModifyIndex 207 Session - Value 1 # -recurse 选项可以递归查询子键,结果按字典序排列 $ consul kv get -recurse redis/config/maxconns:25 redis/config/minconns:1 redis/config/users/admin:abcd1234 ``` 添加/修改kv的结果值: ``` $ consul kv get redis/config/minconns Error! No key exists at: redis/config/minconns $ consul kv put redis/config/minconns 1 Success! Data written to: redis/config/minconns $ consul kv put redis/config/maxconns 25 Success! Data written to: redis/config/maxconns $ consul kv put -flags=42 redis/config/users/admin abcd1234 Success! Data written to: redis/config/users/admin ``` 用 delete 可以删除一个键值对 ``` $ consul kv delete redis/config/minconns Success! Deleted key: redis/config/minconns # -recurse 选项递归删除子键 $ consul kv delete -recurse redis Success! Deleted keys with prefix: redis ``` ***** **HTTP-API的方式操作KV存存储:** 使用 `HTTP GET` ,URL 如下,IP为运行consul agent的机器ip,port默认为8500,key注意如果有path的话需要带上。 ``` 格式:http://ip:port/v1/kv/key http://192.168.30.128:8530/v1/kv/config/db/data #config/db/data 为key的路径值,获取内容如下 [ { "LockIndex": 0, "Key": "config/db/data", "Flags": 0, "Value": "ewoic2lnbiI6Indpbm5lciIsCiAgImRyaXZlciI6InJlZGlzIgp9", "CreateIndex": 21275, "ModifyIndex": 21286 } ] ``` >[] 注:value是经过base64编码的,程序里使用http api的话需要对结果中的value进行解码。 ***** **新增/修改数据:** 使用 `HTTP PUT` , URL 如下,body中携带value ``` #格式:http://ip:port/v1/kv/key http://192.168.30.128:8530/v1/kv/config/db/connection #CURL: curl -X PUT -d '{"ip":"127.0.0.1","port":"3306" }' http://192.168.30.128:8530/v1/kv/config/db/connection ``` ***** **删除数据:** 使用 HTTP DELETE ,url如下 ``` 格式: http://ip:port/v1/kv/key http://192.168.30.128:8530/v1/kv/config/db/connection # CURL: curl -X DELETE http://192.168.30.128:8530/v1/kv/config/db/connection ``` ***** ### **2. 元数据中心** **`元数据中心`** 是大家共享的数据模型实例,这些信息是系统运行起来后,能准确给予业务能力的一个关键 信息抽象。比如在dubbo之类的框架,就是如何能定义和描述一个具体的业务服务。在MySQL里面的 information\_schema 库中的 tables 里,就是具体的一些db实例里的 metadata 信息。这些信息一般 情况也是准静态的。像zk,etcd之类的也都可以。 ``` SELECT * FROM `information_schema`.`TABLES` WHERE `information_schema`.`TABLES`.`TABLE_SCHEMA` = 'mysql' AND `information_schema`.`TABLES`.`TABLE_NAME` = 'user'; ``` ***** #### **2.1 Consul的API操作:** 本地请求:基于 `Agent` ``` # 请求例子:curl http://localhost:8500/v1/agnect/services # 获取本地agent注册的所有检查(包括配置文件和http注册) /v1/agent/checks # 获取本地agent注册的所有服务 /v1/agent/services # 获取集群中的成员 /v1/agent/members # 获取本地agent的配置和成员信息 /v1/agent/self # 触发本地agent加入node /v1/agent/join/<address> # 强制删除node /vq/agent/force-leave/<node> # 在本地agent增加一个检查项,使用PUT方法传输一个json格式的数据 /v1/agent/check/register # 注销一个本地agent的检查项 /v1/agent/check/deregister/<checkID> # 设置一个本地检查项的状态为passing /v1/agent/check/pass/<checkID>] # 设置一个本地检查项的状态为warning /v1/agent/check/warn/<checkID> # 设置一个本地检查项的状态为critical /v1/agent/check/fail<checkID> # 在本地agent增加一个新的服务项,使用PUT方法传输一个json格式的数据 /v1/agent/service/register # 注销一个本地agent的服务项 /v1/agent/service/deregister/<serviceID> ``` 数据中心请求:基于 `catalog` 类型 ``` /v1/catalog/register --注册一个新的service、node、check /v1/catalog/deregister --注销一个service、node、check /v1/catalog/datacenters --列出知道的数据中心 /v1/catalog/nodes --在给定的数据中心列出node /v1/catalog/services --在给定的数据中心列出service /v1/catalog/service/<service> --查看某个服务的信息 /v1/catalog/node/<node> ``` ***** **注册服务:** HTTP-API请求: URL:http://192.168.30.128:8530/v1/agent/service/register ``` method: PUT DATA: { "id": "test222", "name": "test222name", "tags": [ "xdp-/core.product" ], "address": "192.168.30.128", "port": 18306, "checks": [ { "name": "core.product.check", "http": "http://192.168.30.128:18306", "interval": "10s", "timeout": "5s" } ] } ``` **查询服务:** ``` #本地请求(Agent) HTTP-API请求:查询本地节点下所有的注册服务 URL:http://192.168.30.128:8530/v1/agent/services method: GET HTTP-API请求:查询指定本地节点下的服务 语法:/v1/catalog/service/{name} URL:http://192.168.30.128:8530/v1/agent/service/test1name method: GET # 数据中心(catalog)的查询方式: /v1/catalog/services --在给定的数据中心列出service /v1/catalog/service/<service> --查看某个服务的信息 HTTP-API:查询当前数据中心下的注册的服务 URL:http://192.168.30.128:8510/v1/catalog/services http://192.168.30.128:8510/v1/catalog/service/test1name method:GET ``` **删除服务:** ``` 语法:/v1/agent/service/deregister/<serviceID> URL:http://192.168.30.128:8530/v1/agent/service/deregister/test1 method: PUT ``` **更新服务:** ``` 语法:/v1/agent/service/register URL:http://192.168.30.128:8530/v1/agent/service/register method: PUT DATA: JSON格式数据 { "id": "test1", "name": "test1name", "tags": [ "xdp-/core.product" ], "address": "192.168.30.128", "port": 18306, "checks": [ { "name": "core.product.check", "http": "http://192.168.30.128:18306", "interval": "10s", "timeout": "5s" } ] } ```