如何使用lua脚本同时在2个不同的服务器上编写haproxy检查?

时间:2019-03-14 16:35:15

标签: lua haproxy

我有2个服务器(A和B)用于同一个后端,其中一个作为备份,但是这些服务器依赖于其他2个服务器(A'和B')工作,每个服务器一个:如果服务器是服务器A,则可以使用服务器A A已启动且服务器A'已启动,则服务器B已启动且服务器B'已启动则可以使用服务器B。

就目前而言,我无法告诉haproxy“如果服务器A启动并且服务器A'启动,请使用服务器A”?

例如:

backend foo
        option httpchk
        server A 10.99.98.97:8001 check inter 10s rise 2 fall 5
        server B 10.99.98.96:8001 check inter 10s rise 2 fall 5 backup

backend bar
        option httpchk
        server A' 10.99.98.95:8001 check inter 10s rise 2 fall 5
        server B' 10.99.98.94:8001 check inter 10s rise 2 fall 5 backup

如果A'掉了,我就不能再使用A了,但是haproxy在这些测试中不知道这一点(我真的不需要后端栏,只是为了显示问题所在)...原因,我无法使用特定路径从A测试中检查服务器A':

backend foo
        option httpchk GET /url_on_A_which_checks_A'
        server A 10.99.98.97:8001 check inter 10s rise 2 fall 5..

我想知道lua是否可以在考虑服务器“启动”之前测试两个不同的服务器?例如,我不想在前端部分对每个传入请求进行测试(性能问题)...

我想像这样的东西:

backend foo
        option lua.check
        server A 10.99.98.97:8001 lua.check inter 10s rise 2 fall 5..

请求lua上A和A'上的端口8001进行检查...

对不起,我的英语,

谢谢

1 个答案:

答案 0 :(得分:0)

如果您需要检查多个服务器以进行运行状况检查,则可以使用一个技巧来进行外部检查。该技巧的基本摘要是进行外部检查,然后调用您的haproxy stats套接字并检查不同后端上服务器的运行状况检查。

这是我写的一个示例,该示例使用外部运行状况检查来检查所有相同名称的服务器的状态。请注意,有两个后端的唯一目的是进行健康检查,例如他们没有连接到任何前端:

https://gist.github.com/mweiss/125ce3eaf1f511d103c229f4b0cb419c

有关外部检查的更多信息,请参阅:

https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#option%20external-check


顺便说一句,如果您可以妥协并且仅对所依赖的服务器进行一次运行状况检查,则可能需要使用track选项。但是,如果您要进行多个运行状况检查,这不能解决您的问题。