来自指定端口的零星 503s
Sporadic 503s from specified ports
我一直致力于使用 Rancher 来管理我们的仪表板应用程序,其中一部分涉及从同一端口公开多个 kibana 容器,并在端口 80 上公开一个 kibana 3 容器。
因此我想在指定端口上发送请求:5602、5603、5604 到特定容器,所以我设置了以下 docker-compose.yml 配置:
kibana:
image: rancher/load-balancer-service
ports:
- 5602:5602
- 5603:5603
- 5604:5604
links:
- kibana3:kibana3
- kibana4-logging:kibana4-logging
- kibana4-metrics:kibana4-metrics
labels:
io.rancher.loadbalancer.target.kibana3: 5602=80
io.rancher.loadbalancer.target.kibana4-logging: 5603=5601
io.rancher.loadbalancer.target.kibana4-metrics: 5604=5601
一切都按预期工作,但我偶尔会遇到 503。当我进入容器并查看 haproxy.cfg 时,我看到:
frontend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_frontend
bind *:5603
mode http
default_backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend
backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend
mode http
timeout check 2000
option httpchk GET /status HTTP/1.1
server cbc23ed9-a13a-4546-9001-a82220221513 10.42.60.179:5603 check port 5601 inter 2000 rise 2 fall 3
server 851bdb7d-1f6b-4f61-b454-1e910d5d1490 10.42.113.167:5603
server 215403bb-8cbb-4ff0-b868-6586a8941267 10.42.85.7:5601
列出的 IP 都是三个 Kibana 容器,第一个容器有运行状况检查,但 none 其他容器有(kibana3/kibana4.1 没有状态端点)。我对 docker-compose 配置的理解是每个后端应该只有一个服务器,但所有三个似乎都已列出,我认为这部分归因于零星的 503,手动删除它并重新启动haproxy 服务似乎确实解决了这个问题。
我没有正确配置负载均衡器,或者这是否值得作为 Rancher 的 Github 问题提出?
我按照 Rancher Labs 在推特上的建议在 Rancher 论坛上发帖:https://forums.rancher.com/t/load-balancer-sporadic-503s-with-multiple-port-bindings/2358
rancher 的某人发布了一个 link 到一个 github 问题,这与我遇到的问题相似:https://github.com/rancher/rancher/issues/2475
总而言之,负载均衡器将轮流通过所有匹配的后端,有一个涉及 "dummy" 域的解决方法,我已经确认我的配置确实有效,即使它有点不雅。
labels:
# Create a rule that forces all traffic to redis at port 3000 to have a hostname of bogus.com
# This eliminates any traffic from port 3000 to be directed to redis
io.rancher.loadbalancer.target.conf/redis: bogus.com:3000
# Create a rule that forces all traffic to api at port 6379 to have a hostname of bogus.com
# This eliminates any traffic from port 6379 to be directed to api
io.rancher.loadbalancer.target.conf/api: bogus.com:6379
(^^ 从 rancher github 问题中复制,不是我的解决方法)
我将看看通过端口路由并提出 PR/Github 问题是多么容易,因为我认为在这种情况下它是 LB 的有效用例。
确保您使用的是最初暴露在 docker 容器上的端口。出于某种原因,如果将它绑定到不同的端口,HAProxy 将无法工作。如果您使用的是来自 DockerHub 的容器,该容器正在使用您系统上已占用的端口,您可能需要重建该 docker 容器以通过 nginx 等代理路由它来使用不同的端口。
我一直致力于使用 Rancher 来管理我们的仪表板应用程序,其中一部分涉及从同一端口公开多个 kibana 容器,并在端口 80 上公开一个 kibana 3 容器。
因此我想在指定端口上发送请求:5602、5603、5604 到特定容器,所以我设置了以下 docker-compose.yml 配置:
kibana:
image: rancher/load-balancer-service
ports:
- 5602:5602
- 5603:5603
- 5604:5604
links:
- kibana3:kibana3
- kibana4-logging:kibana4-logging
- kibana4-metrics:kibana4-metrics
labels:
io.rancher.loadbalancer.target.kibana3: 5602=80
io.rancher.loadbalancer.target.kibana4-logging: 5603=5601
io.rancher.loadbalancer.target.kibana4-metrics: 5604=5601
一切都按预期工作,但我偶尔会遇到 503。当我进入容器并查看 haproxy.cfg 时,我看到:
frontend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_frontend
bind *:5603
mode http
default_backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend
backend d898fb95-ec51-4c73-bdaa-cc0435d8572a_5603_2_backend
mode http
timeout check 2000
option httpchk GET /status HTTP/1.1
server cbc23ed9-a13a-4546-9001-a82220221513 10.42.60.179:5603 check port 5601 inter 2000 rise 2 fall 3
server 851bdb7d-1f6b-4f61-b454-1e910d5d1490 10.42.113.167:5603
server 215403bb-8cbb-4ff0-b868-6586a8941267 10.42.85.7:5601
列出的 IP 都是三个 Kibana 容器,第一个容器有运行状况检查,但 none 其他容器有(kibana3/kibana4.1 没有状态端点)。我对 docker-compose 配置的理解是每个后端应该只有一个服务器,但所有三个似乎都已列出,我认为这部分归因于零星的 503,手动删除它并重新启动haproxy 服务似乎确实解决了这个问题。
我没有正确配置负载均衡器,或者这是否值得作为 Rancher 的 Github 问题提出?
我按照 Rancher Labs 在推特上的建议在 Rancher 论坛上发帖:https://forums.rancher.com/t/load-balancer-sporadic-503s-with-multiple-port-bindings/2358
rancher 的某人发布了一个 link 到一个 github 问题,这与我遇到的问题相似:https://github.com/rancher/rancher/issues/2475
总而言之,负载均衡器将轮流通过所有匹配的后端,有一个涉及 "dummy" 域的解决方法,我已经确认我的配置确实有效,即使它有点不雅。
labels:
# Create a rule that forces all traffic to redis at port 3000 to have a hostname of bogus.com
# This eliminates any traffic from port 3000 to be directed to redis
io.rancher.loadbalancer.target.conf/redis: bogus.com:3000
# Create a rule that forces all traffic to api at port 6379 to have a hostname of bogus.com
# This eliminates any traffic from port 6379 to be directed to api
io.rancher.loadbalancer.target.conf/api: bogus.com:6379
(^^ 从 rancher github 问题中复制,不是我的解决方法)
我将看看通过端口路由并提出 PR/Github 问题是多么容易,因为我认为在这种情况下它是 LB 的有效用例。
确保您使用的是最初暴露在 docker 容器上的端口。出于某种原因,如果将它绑定到不同的端口,HAProxy 将无法工作。如果您使用的是来自 DockerHub 的容器,该容器正在使用您系统上已占用的端口,您可能需要重建该 docker 容器以通过 nginx 等代理路由它来使用不同的端口。