2017-06-08 4 views
2

私のアプリケーションで2組のルールを維持するために2つのバックエンドがあります。 1つはブラウザ経由でアクセスするメインWebサイト(cookieセッション)用、もう1つは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を設定する必要はありません。レートリミットルールなど、ロジックを分離することがはるかに多い(またはそうなるだろう)。

私の質問は、どのようにヘルスチェックの複製を避けることができますか?各サーバーに同じエンドポイントを2回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

関連する問題