我正在使用 Docker 在反向代理后面部署大量微服务。我希望根据 DNS 查询对我的微服务进行负载平衡,并在代理启动后允许自动故障转移和重新平衡。
我正在寻找一个支持 DNS 查询返回的服务器之间的负载平衡的代理服务器。例如,test.local 返回服务器 192.168.1.1、192.168.1.2、192.168.1.3,我想在它们之间平衡流量负载并执行一些标准的反向代理重新路由操作。
Nginx 在启动时执行 DNS 查询,但不会定期执行 DNS 查询并遵守 TTL,除非您拥有价格昂贵的 Nginx Plus。如果我在服务器更改时定期重新启动代理,那么它可能会起作用,但这会引发错误的请求,这不是一个好的解决方案。
我查看过是否可以使用 Apache 来实现这一点,但没有发现任何东西。
任何帮助设置这一点都会非常感激,因为这是我的服务器容错所需的最后一块拼图。
答案1
显然,你已经达到了无法再使用简单方法处理的复杂程度docker
。
此时,您需要开始使用更高级别的抽象工具来管理您的资源。显而易见的选择是:
您没有提供足够的底层平台详细信息,无法帮助您做出选择。我个人更喜欢 Kubernetes,因为我可以从几乎任何平台中抽象出来,甚至可以进一步抽象以使用以下方式提供更高级别的功能OpenShift或者构造。
Kubernetes 使用荚作为最小抽象单元。这允许 Kubernetes 集群根据不同的探测器编排和引导流量到 Pod。
实际上,这意味着您可以在不停机的情况下执行新容器的部署,如果探测返回失败,则让 Kubernetes 创建新容器,甚至回滚部署(蓝/绿策略)。
这只是 Kubernetes 的冰山一角。如果你感兴趣,这个项目有一个非常好的文档。
答案2
查看这个 github repo,它也许能满足你的要求:https://github.com/StalkR/dns-reverse-proxy
安装 go 包,创建 Debian 包,安装:
$ go get -u github.com/miekg/dns $ go get -u github.com/StalkR/dns-reverse-proxy $ cd $GOPATH/src/github.com/StalkR/dns-reverse-proxy $ fakeroot debian/rules clean binary $ sudo dpkg -i ../dns-reverse-proxy_1-1_amd64.deb
在 中进行配置
/etc/default/dns-reverse-proxy
,然后使用 start 来启动/etc/init.d/dns-reverse-proxy
。