web-dev-qa-db-ja.com

負荷分散:Nginx、Varnish、HTTPセッション

負荷分散システムをセットアップする必要があります。現在、Nginx 0.8.52、PHP-FPM(unixソケット上)、およびPHP Symfony1.4.11)に基づくアプリケーションを実行している2台のマシンがあります。

3番目のマシンでは、インストールするバランサーを選択する必要があります。

静的ファイルのキャッシュにVarnishをすでに使用しましたが、Varnishの負荷分散がSymfony PHPセッションを処理できるかどうかわかりません。別のオプションはip_hashを使用したNginx負荷分散です。

どれが最高ですか?

前もって感謝します

3

なぜ両方ではない? NginXを前面に配置してgzip圧縮とSSLを処理し、Varnishを背面に配置してキャッシュと負荷分散を処理します。 Kristapsが提案するように、バックエンドアプリケーションはDBまたはMemcacheでセッションを共有する必要があり、VarnishはCookieまたは認証で提供される動的コンテンツをキャッシュしませんが、残りはすべて問題ありません。

推奨される設定は、分離された静的ホスト名(static.example.comなど)を作成し、そこからすべての静的コンテンツを提供することです Cookieなし (Varnishは、 Cookie)、およびセッション処理にCookieを使用し、上記のようにすべてのバックエンドがセッション情報を共有する、NginXまたはVarnishによって負荷分散できる動的コンテンツ用にもう1つ。

2
coredump

私はsymfonyフレームワークの専門家ではありませんが、負荷分散の目的で、セッションをデフォルトのファイルベースのストレージから memcacheセッションハンドラー に移動して、アプリケーションスケールのセッション部分を単一のアプリケーションより上にできるようにすることをお勧めします。

スティッキーセッションは、VCLマジック(モジュラスなど、クライアントのIPアドレスの10進表現に対するいくつかの単純な算術演算)によってワニスでアーカイブできます。

設計によるワニスは、ロードバランサーではなく、キャッシュサーバーです。また、ワニスはSSLをサポートしていません。つまり、個別のSSLターミネーター(最も一般的には、sslモジュールを備えたnginx)が必要です。

キャッシュ用ではなく、haproxyやnginxなどの完全に動的なWebアプリパーツ用に設計されたロードバランサーを使用することをお勧めします。どちらもスティッキーセッションをサポートしています。

1
Kristaps

将来のノードのセッションデータを共有する方法を見つける方が良いと思います。 NASストレージまたはロードバランサーにphpセッションを共有させます。他のオプションは、アプリケーションを書き直して、セッションにmysqlデータベースを使用し、ノード間でそのデータを再び共有できるようにすることです。

0
some12die4