Networking

使用 Haproxy 和 consul 進行負載平衡的馬拉鬆容器返回隨機 503 請求

  • February 20, 2016

目前,架構是這樣組織的:

  • 192.168.1.10, 192.168.1.11, 192.168.1.12 - mesos master 和 marathon 和 consul 伺服器
  • 192.168.1.21, 192.168.1.22, 192.168.1.23 - 三個 mesos slave with consul agent

每台機器如下配置:

  • 它自己的IP地址作為DNS伺服器
  • 帶有 consul-template 的 HAPROXY 用於自動生成 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),是用host IP地址作為DNS IP,還是需要用consul leader地址?

我已經嘗試調試 tcpflow,當響應為 503 時,它就像等待一段時間,就像它無法解析服務一樣。

獲取 Docker 映像、啟動容器並最終開始服務請求需要一些時間。理想情況下,您應該在新實例準備就緒時重新載入 HAProxy。但是您的舊實例可能仍然存在活動連接。當您開始調查此問題時,發現已經存在解決方案,如 M. Fowler 所述,它被稱為藍綠部署。

如果您的目標是零停機時間,那麼就沒有一個簡單的解決方案。Yelp 工程師描述瞭如何通過向 iptables 添加額外規則來以真正的零停機時間重新載入 HAProxy。

最近藍綠部署方案被合併到marathon-lb(包括 Yelp 的 iptables 技巧)。我認為consul-mesos目前不支持這一點。

引用自:https://serverfault.com/questions/755995