我正在使用HAProxy 1.4.18和以下后端configuration
backend staging option httpchk HEAD /check.txt HTTP/1.0 http-check disable-on-404 default-server error-limit 1 on-error mark-down server staging01 xxxx:80 check observe layer7 server staging02 xxxx:80 check observe layer7
服务器在apache / passenger上运行多个应用程序。
httpchk和disable-on-404的组合允许正常关机并且很容易地从lb中移除服务器,同时仍然能够直接访问(即用于testing)。
我试图设置观察,以便在应用程序不工作时禁用服务器。 我已经打破了staging02上的应用程序configuration,所以它总是返回一个500.在第一个500之后它被正确地标记为DOWN,但是在下一个httpchk被标记为UP。
这是日志文件:
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue. Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue. Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.
有没有办法结合这两个检查?
我现在所理解的区别是/check.txt实际上会返回一个200响应,但是对应用程序的所有请求都会返回一个500. HAProxy会从代理请求中返回500,并将服务器从池中取出,然后启动它自己的检查,收到200并将服务器放回池中。
解决办法是做一个:
/check.txt
。 /check.txt
更改为一个Ruby应用程序,其中包含足够的逻辑以在适当的时候在200和500之间进行select。 inter
值为 3600这样荒谬的东西。这应该会给你一个小时做你的testing,或者(如果服务器自行解决)找出问题并把它恢复。 inter
值设置为60之类的小值,但将上rise
设置为60之类的值。这也会让您在将服务器添加回池中之前一小时。 (注意,这两个最后列出来,因为他们可能是非常糟糕的想法。)