Networking
使用 Haproxy 和 consul 進行負載平衡的馬拉鬆容器返回隨機 503 請求
目前,架構是這樣組織的:
- 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
目前不支持這一點。