【发布时间】:2026-01-06 19:10:01
【问题描述】:
- 我有一个运行 3 个 Web 容器的 coreos 集群,每个容器运行相同的 Web 应用程序。
- 如何使用 haproxy 和 nginx 对这些正在运行的容器的请求进行负载平衡。
- 请提出建议。
【问题讨论】:
标签: nginx docker haproxy coreos
【问题讨论】:
标签: nginx docker haproxy coreos
我建议你仔细看看 vulcand,它是一个在 coreos 上运行的反向代理,旨在对运行在 coreos 上的容器之间的 http 请求进行负载平衡:
Vulcand 是 HTTP API 管理和微服务的反向代理。 它的灵感来自于 Hystrix。
它使用 Etcd 作为配置后端,因此需要更改配置 立即生效,无需重启服务。
https://coreos.com/blog/zero-downtime-frontend-deploys-vulcand/
一篇不错的博文,其中包括使用 vulcand 跨 docker 容器进行负载平衡:
这个 github repo 有一些用于设置 coreos、docker 和 vulcand 的示例源代码:
【讨论】:
这有点晚了,但它确实类似于数字海洋教程在他们的 CoreOS 入门中教你做的事情:
几乎你在一台机器上运行 HAProxy 容器,并且有任意数量的服务运行后端服务器。然后你使用confd 在添加和删除后端服务器时动态构建配置文件。
这是我根据教程构建的HAProxy Service。我使用这些 two service files 将其与我的 Web 应用程序一起调用。
请注意我的 webapp.service 文件中的这一行:
ExecStartPost=/bin/bash -c 'etcdctl set /app/servers/%n "%n $(curl -sw "\n" http://169.254.169.254/metadata/v1/interfaces/private/0/ipv4/address):80"'
这会将要在 HAProxy 配置文件中使用的服务器位置添加到 /app/servers/webapp.service。 Digital Ocean 教程通过一个“Sidekick”容器来实现这一点,但它可能更通用且更不容易出错。
【讨论】: