2017-06-08 73 views
2

我有兩個後端爲了維護我的應用程序中的兩套規則。一個用於通過瀏覽器訪問的主要網站(烹飪會話),另一個用於API(無狀態並通過API密鑰進行驗證)。如何在多個後端之間共享健康檢查?

配置看起來像這樣(大大簡化了)。

defaults 
    option httpchk HEAD /ping 

backend web 
    cookie _srv insert indirect 
    server srv1 10.0.0.1:80 cookie srv1 check inter 10s 
    server srv2 10.0.0.2:80 cookie srv2 check inter 10s 

backend api 
    stick-table type string len 50 expire 1d store http_req_cnt 
    stick on url_param(key) 
    server srv1 10.0.0.1:80 check inter 10s 
    server srv2 10.0.0.2:80 check inter 10s 

如圖所示,除了API不需要設置cookie之外,兩個後端都使用相同的服務器。分離邏輯有(或將會)更多,例如速率限制規則。

我的問題是如何避免重複健康檢查?爲每臺服務器ping相同的端點兩次是浪費資源。我想讓web後端進行健康檢查,並將api後端標記爲向上或向下。這可能嗎?或者,也許有更好的方法來分離後端,但保留常用功能。

回答

1

track [<proxy>/]<server>

此選項允許通過跟蹤另一設定服務器的當前狀態的能力。可以跟蹤服務器本身跟蹤另一臺服務器,前提是在服務器鏈的末端啓用健康檢查。如果省略,則使用當前的一個。如果使用disable-on-404,則必須在兩個代理上啓用它。

http://cbonte.github.io/haproxy-dconv/1.6/configuration.html#5.2-track

這正好在server線。

backend api 
    server srv1 10.0.0.1:80 track web/srv1 
    server srv2 10.0.0.2:80 track web/srv2 

這是從1.6開始,但後來的版本應該是一樣的。 該功能也存在於1.5和1.4中。它可能存在於以前的版本中,但這些版本並未維護,您不應該使用它們。

+0

謝謝。我在1.7。正是我在找的東西,但是文檔非常龐大,我不知道如何去挖掘它。正如它發生我已經rejigged我的配置,以避免這一點,但很高興知道。 – Tim