2011-10-25 3 views
3

私たちは、haproxyを使用してロードバランスされたHTTPウェブサービスに取り組んでいます。 WebサービスにはSSL経由でアクセスします。これはRESTfulなHTTPサービスであり、単にJSONを受け入れ、動作し、JSONを返します。セッションの概念はありません。ロードバランシングされたHTTPウェブサービスに永続的な接続サポートを追加する方法

冗長化されたWebサービスサーバの前に冗長ロードバランサを設定しています。各サーバーはApacheの背後に位置し、ApacheはSSLとロギングを処理するためにプロキシとして使用されます。重要な場合、私たちのWebサービスは、HTTPを処理するためにcompojure(jetty)を使用するClojure(java)アプリケーションです。

これは、既存のシステムによるクライアント要求のパスを示す簡単な図です。

client request -> haproxy (load balancing) -> apache (ssl, logging) -> webservice

我々は永続的な接続を確立するために、ロードバランサへの接続を希望し、その持続的な接続を介して送信されるすべての後続の要求のために、同じサーバによって提供さ。言い換えれば、我々は、複数のWebサービスサーバへのリクエストを作成するための持続的な接続を望んでいません。

私たちはこれを動作させることをどのようにお勧めしますか?ロードバランサへの特定の接続を特定のWebサービスサーバに「固定」するにはどうすればよいですか?複数の集中的なリクエストで特定のWebサービスサーバーを誤ってロードするのを防ぐにはどうすればよいですか?

答えて

2

defaultsブロックのbalance sourceを使用して、option httpcloseのエントリを削除すると、そのトリックが行われました。

1

私たちのHAProxy構成では、バックエンドレベルでcookieオプションを使用してこれを行います。これは彼がいくつかのサイトを持っているからです。そのうちのいくつかは永続性を求めています。私たちはバックエンドを行うもので

haproxy.cfgで次のようになります。

backend examplesite 
cookie STK insert indirect nocache maxidle 30m maxlife 8h 
server server1 192.168.0.1:80 cookie n1 
server server2 192.168.0.2:80 cookie n2 

これは最初の要求に名前STKでクッキーを設定します。 Haproxyはこのクッキーに自動的に値を割り当て、その後、同じノードに後続のリクエストを送信するために使用します。

は、我々はまた、彼らはこれが2ノードしようとしている場合、要求は1か n2ノードしようとしている場合、これはクッキーの値がいずれかの n1で始まるされることを意味します... n1n2クッキー接頭辞を追加することにしましたデバッグ時に非常に役立ちます。


私はconfiguration documentationcookie周りのオプションを見てみてお勧めするいずれかの方法。

appsessionオプションもご覧ください。これにより、HAProxyは既存のCookie(ASPNetSessionIdやPHPSESSIONIDなど)を同じ目的で使用できます。

私はこれまでに問題がありましたが、最近これを解決する必要があるサーバー障害に関する質問に答えました。あなたの要求に余分なクッキーを使用して保存するので、それを与えることができます。 Can't get appsession setting in HAProxy to work

+0

ありがとうございました。 JSONを受け入れて返すHTTP Webサービスを実行しています。 Webサービスに接続しているクライアントはブラウザではないので、この例ではクッキーが役立つとは思っていません。 – jkndrkn

関連する問題