我想在多个后端应用程序服务器前部署反向代理/ HTTP负载平衡器。 顺便提一下,后端的集合可能会随着时间的推移而改变,并且新的应用程序服务器可能会dynamic地创build(所以总的集合不能预先知道)。 这意味着像Varnish ,可以执行一系列已知的后端健康检查,不是一种select。
我所能想到的最好的方法是Apache中的prg RewriteMap支持和代理RewriteRuleexpression式。 我已经为应用程序服务器攻击了一个简单的客户端/服务器机制,以便向前端注册自己,还有一个RewriteMap程序从这个列表中select后端。 它的作品,但它闻起来很哈克。
这似乎是一个相当普遍的情况(有这么多的云服务提供商,可以很容易地启动新服务器的需求)。 其他人怎么解决这个问题呢? 你只是使用商业负载平衡器? 每个人都在一起扔东西吗?
Apache的内置(良好的,提供的)mod_proxy_balancer模块提供了大部分的function,包括个人权重和成员后端的控制合并和撤销。
还有一个平衡器pipe理器应用程序来在运行时可视化和控制这种行为。
看到这里的细节: http : //httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html
nginx不支持这个开箱即用,但是这很容易实现。 我在下面做了详细解释
1)创build单独的configuration文件,只为上游(upstreams.conf),并包括他们从主nginx.conf 2)现在你可以编辑这个文件手工或脚本分开,我写了一个简单的Perl脚本来pipe理这个文件添加/删除文本上游描述的行。 3)发送HUP信号到主要的nginx进程,发出优雅的重新加载4)一些networking用户界面已经实施,以控制这些操作,并提供健康检查,但它不是福斯
争议的是有几个实现健康检查和pipe理界面的3个侧面模块请看看
http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord
我不知道,但可能是haproxy也有amefunction。
几乎所有的商业负载平衡解决scheme(F5,Citrix,A10等)都有configurationpipe理API(基于REST或SOAP),可以很容易地用于此目的 – 服务器可以将自己添加到相关池作为其启动路由的一部分,并在关机时自行删除。 如果服务器崩溃,则由于健康检查失败,LB会将其标记为失败。