Marathon 容器使用 Haproxy 进行负载平衡,并且 consul 返回随机 503 请求

Marathon 容器使用 Haproxy 进行负载平衡,并且 consul 返回随机 503 请求

当前的架构组织如下:

  • 192.168.1.10、192.168.1.11、192.168.1.12 - 带有 marathon 和 consul 服务器的 mesos master
  • 192.168.1.21、192.168.1.22、192.168.1.23 - 三个带有 consul 代理的 mesos 从属设备

每台机器配置如下:

  • 它有自己的 IP 地址作为 DNS 服务器
  • HAPROXY 带有 consul-template,用于自动生成 haproxy.cfg
  • consul-mesos 用于使用主机 IP 地址注册正在运行的 docker 容器,以避免服务从不同机器解析时在 DNS 中出现 172.1.0.1 地址

我目前遇到的问题是,当我以桥接模式启动带有服务的 docker 容器时,地址会按应有的方式由 DNS 解析(如果您有 luigi.service.consul,它将毫无问题地完成),但是当我尝试时,我会随机CURL -L http://luigi.service.consul/得到一个503 error codes地址,有时地址可以解析,有时则不能。

有什么想法可以调查此事吗?

我检查过/etc/resolv.conf,不时地,我可以看到 DNS 地址更改为旧的 DNS IP 地址(8.8.8.8),我应该使用主机 IP 地址作为 DNS IP,还是需要使用领事领导地址?

我尝试调试 tcpflow,当响应为 503 时,就像等待了一段时间,就像无法解析服务一样。

答案1

获取 Docker 映像、启动容器并最终开始处理请求需要一些时间。理想情况下,您应该在新实例准备就绪时重新加载 HAProxy。但可能仍有与旧实例的活动连接。当您开始调查此问题时,会发现已经存在解决方案,它称为蓝绿部署正如 M. Fowler 所描述的。

如果你的目标是零停机时间,那么就没有简单的解决方案。Yelp 工程师描述了如何使用真正的零停机时间通过向 iptables 添加额外的规则。

最近蓝绿部署方案被合并到马拉松磅(包括 Yelp 的 iptables 技巧)。我认为consul-mesos目前不支持这一点。

相关内容