我想在多个后端应用服务器前面部署一个反向代理/HTTP 负载平衡器。问题在于后端集可能会随时间而变化,并且可能会动态创建新的应用服务器(因此无法提前知道总集)。这意味着漆,它可以针对已知后端集不是一个选项。
我能想到的最好的办法是prg
RewriteMap
Apache 中的支持与代理RewriteRule
表达式相结合。我设计了一个简单的客户端/服务器机制,让应用服务器在前端“注册”自己,并设计了一个RewriteMap
从此列表中选择后端的程序。它能用,但有点问题真的黑客。
这似乎是一个相当常见的情况(因为有这么多云服务提供商,可以轻松按需启动新服务器)。其他人是如何解决这个问题的?你只是使用商业负载平衡器吗?每个人都在自己拼凑一些东西吗?
答案1
Apache 的内置(嗯,提供的)mod_proxy_balancer 模块提供了大部分功能,包括单独的权重和成员后端的受控合并和退出。
还有一个平衡器管理器应用程序可以在运行时可视化和控制这种行为。
请参阅此处了解详细信息:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
答案2
nginx 不支持开箱即用,但实现起来相当容易。我做到了,下面将详细解释
1)为上游创建单独的配置文件(upstreams.conf),并将其包含在主 nginx.conf 中 2)现在您可以手动或单独编写脚本来编辑此文件,我编写了一个简单的 perl 脚本来管理此文件,添加/删除带有上游描述的文本行。 3)向主 nginx 进程发送 HUP 信号以发出优雅重新加载 4)已经实现了一些 Web UI 来控制这些操作并提供健康检查,但它不是 FOSS
有争议的是有几个3-实现健康检查和管理接口的侧模块请查看
http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord
我不确定,但也许 haproxy 也具有相同的功能。
答案3
几乎所有的商业负载平衡解决方案(F5、Citrix、A10 等)都具有配置管理 API(基于 REST 或 SOAP),可以轻松用于此目的 - 服务器可以在启动路由时将自身添加到相关池中,并在关闭时删除自身。如果服务器崩溃,LB 会因健康检查失败而将其标记为停机。