5


4

複数のサーバーを処理するPHPセッション

All,

Zend FrameworkとMVCで記述されたPHP5 Webアプリケーションがあります。 このアプリケーションは、同じセットアップで2つのサーバーにインストールされます。 サーバーXにはphp5 / MySql / Apacheがあり、サーバーYにも同じことがあります。 両方のサーバー間に共通のDBサーバーはありません。

サーバーXおよびサーバーYでhttpsを介して個別にアクセスすると、私のアプリケーションは機能します。 ただし、負荷分散をオンにして両方のサーバーを起動すると、セッションが失われます。

セッションがサーバー間で持続することを確認するにはどうすればよいですか? 3番目のサーバーでdbを維持し、セッションを書き込む必要がありますか? その場合、最も簡単で安全な方法は何ですか?

ありがとう

3 Answer


7


memcachedは、この問題を解決する一般的な方法です。 簡単に起動して実行し、php.iniファイルを更新してmemcachedをセッションストレージとして使用するように指示するだけです。

php.iniで次を変更します。

session.save_handler = memcache
session.save_path = ""

一般的なアイデアについては、http://www.dotdeb.org/2008/08/25/storing-your-php-sessions-using-memcached/ [MemcachedのPHPセッション]。

memcachedで動作するようにZendセッションハンドラーをセットアップするためのチュートリアルは多数あります。 好きなものを選んでください。


0


_ 3番目のサーバーでdbを維持し、セッションを書き込む必要がありますか? _

はい、それを処理する1つの方法は、両方のWebサーバーがアプリケーションに使用するデータベースを実行する3番目のマシンを持つことです。 私は過去にいくつかのプロジェクトでそれを行ってきましたが、うまくいきました。 そのアプローチの問題は…​ Webサーバーまたはデータベースのボトルネックです。 データベースの場合は、Webサーバーの負荷分散をミックスに投入してもそれほど改善は見られません。 代わりに、データベースのミラーリングスキームを考える必要があります。


0


別のオプションは、ロードバランサーでスティッキーセッション機能を使用することです。 これにより、ユーザーを特定のサーバーに保持できます。 したがって、ユーザー1がサイトにアクセスすると、サーバーXにリダイレクトされます。 後続のリクエストもすべてサーバーXに送信されます。 これにより、各ユーザーはセッションを保持しているサーバーに引き続き誘導されるため、サーバー間のセッションの持続について心配する必要がなくなります。

これの欠点は、Webサーバーをプールから取り出すと、セッションを持つユーザーの半分がログアウトされることです。 したがって、このソリューションの有効性は、サーバーをプールから取り出す頻度に依存します。