Spring Cloud与Consul的高可用性

时间:2016-04-25 12:57:24

标签: docker spring-cloud consul

我有一个设置,我在docker swarm overlay网络中部署spring-cloud-consul应用程序。在我的覆盖网络中,我在每个节点上创建了领事图像。当我启动spring-cloud-consul应用程序时,我必须指定它应该与之交谈的领事代理的主机名,例如" discovery"所以它可以宣传自己并查询服务发现。这里的问题是每个容器都在查询同一个领事代理。当我删除这个特定的consul代理时,Ribbon DiscoveryClient似乎依赖于它自己的缓存而不是使用其他一个consul节点。

使用spring-cloud-consul和consul启动微服务应用程序的正确方法是什么,这样他们就不依赖于一个固定的领事代理。

我想到的解决方案:

  1. 拥有多个撰写文件并指定不同的领事代理。
  2. 以某种方式让docker镜像识别它所在的节点,然后将其自身设置为使用该节点本地的consul代理。 (不知道如何实现这一点。)
  3. 使用spring-boot应用程序打包consul代理。
  4. 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

consul代理必须在群集中的每个节点上运行。没有必要在每个docker容器内运行consul代理,只需在每个节点上运行。您可以选择在每个节点上安装consul代理,或者在每个节点上的docker容器中运行consul代理。

对于docker容器解决方案中的consul代理,您需要确保在其他容器启动之前运行consul agent容器。

有关在docker容器中以客户端模式运行consul代理的详细信息,请参阅:https://hub.docker.com/_/consul/并在客户端模式下搜索Running Consul Agent。这使用--net = host networking定义代理容器,因此当代理实际上位于docker容器中时,代理的行为就像本机安装一样。