consul集群service数据同步问题

1,830 阅读1分钟

背景:

打算使用consul集群做数据中心,实现服务发现和服务注册,使用了三个server: server1 server2 server3,一个client: client1

出现了问题:

使用api: /v1/agent/service/registerclient1上注册服务,再使用api: /v1/agent/servicesserver1上查不到

发现了原因:

因为agent的服务注册是与consul本地代理服务交互,不会把数据同步到集群的其他节点上

解决:

使用catalog相关api:

  • 注册:/v1/catalog/register
  • 查询:/v1/catalog/service/<service>

总结:

agent的服务注册是与consul本地代理服务交互。catalog是由agent提交的信息聚合而成,负责维护整个集群的数据。正是因为这种差异导致了不同的结果。

catalog也可以查到使用agent在单个节点上注册的服务,但是这个节点挂了,也就查不到了。而catalog不一样,就算节点挂了,在其他的节点上也能查到通过catalog注册的服务。

KV数据则不存在这种问题