Apache2 / fastcgi / php fastcgi / haproxy – 平稳重启问题改变configuration设置

我有一个Apache2与PHP fastcgi设置; 我想在没有客户端注意的情况下进行configuration更改(所以没有丢失/失败的请求),所以我把haproxy放在它前面; 所以我有两个Apache2服务器运行在同一台服务器上的不同IP上,并在它们前面运行Haproxy负载平衡/故障转移。

Apache和Haproxy都有Keepalive。 当我在运行时运行/etc/init.d/apache2_1 restart或apache2ctl -k graceful -f /etc/apache2_1/apache2.conf时,

看-n 1 lynx -dump -source http:// server /test.php(里面有echo rand(1,100000);在里面)

它仍然下降一个坏网关请求。 我怎样才能防止发生?

基本上,如果我可以告诉Haproxy完成所有连接(完成意味着让他们运行)到server1,但发送所有新的server2在给定的时间点,它会工作。

另外注意; 我需要php-cgi; 与mod_php的事情更容易。

编辑; 我试过了 但是请求不会传递给备份,所以有些客户端仍然收到坏的网关。

回答本的评论;

随着cgi的优雅似乎启动所有正在进行的连接; 与mod_php曼妙工作正常; 没有停机。 Haproxy在apache出现故障时会看到(在统计屏幕中变成黄色),但是fastcgi只是在空中切断脚本;

(通讯错误),通过调用exit()终止,返回代码:0(注意:mod_fcgid:process /var/www/gui/wsapi.php(13987)

[2009年8月15日星期六19:00:55] [注意] mod_fcgid:进程14012进行正常关机,发送SIGTERM

[2009年8月15日星期六19:00:56] [注意] mod_fcgid:process /var/www/gui/index.php(13999)退出(通讯错误),通过调用exit()终止,返回码:0

很多客户也越来越多;

[2009年8月15日星期六19:05:42] [错误] [客户端xxx.xxx.xxx.xxx]脚本头过早结束:index.php

另一个迹象表明,关机没有任何优雅之处。

你可以告诉haproxy停止发送连接到服务器。 为此,你必须在你的haproxyconfiguration文件中指定“http-check disable-on-404”,并让你的web服务器返回404(而不是别的)到haproxy的运行状况检查。 如果haproxy看到这个,它会将服务器标记为“NOLB”,这意味着它被排除在负载平衡之外,但仍然完成其连接,并且仍然接受请求它的持续连接。 这样,所有新的客户端去其他服务器。

最简单的方法是检查一个“alive”文件,该文件一旦被移除,将导致返回404(因此select这个返回码)。 当然,开发更完整的服务器端应用程序来响应健康检查更好!