背景:
打算使用consul集群做数据中心,实现服务发现和服务注册,使用了三个server: server1 server2 server3,一个client: client1
出现了问题:
使用api: /v1/agent/service/register在client1上注册服务,再使用api: /v1/agent/services 在 server1上查不到
发现了原因:
因为agent的服务注册是与consul本地代理服务交互,不会把数据同步到集群的其他节点上
解决:
使用catalog相关api:
- 注册:
/v1/catalog/register - 查询:
/v1/catalog/service/<service>
总结:
agent的服务注册是与consul本地代理服务交互。catalog是由agent提交的信息聚合而成,负责维护整个集群的数据。正是因为这种差异导致了不同的结果。
catalog也可以查到使用agent在单个节点上注册的服务,但是这个节点挂了,也就查不到了。而catalog不一样,就算节点挂了,在其他的节点上也能查到通过catalog注册的服务。
而KV数据则不存在这种问题