memcachedでのPHPセッション管理とシステム稼働率
・構成の検討
通常、PHPのセッションは同じサーバに保存されます。
複数のサーバで負荷分散をする場合は、セッション管理に工夫が必要になってきます。
上図の場合、ショッピングカートページは「WEBサーバ1」アクセスしていて、会計ページは「WEBサーバ2」に振られてしまうと、セッション情報が見つからないため、$_SESSIONの中身が空になってしまいます。
↓
そのため、セッション情報保存用にmemcachedサーバを追加して対応したりします。
この構成だと memcachedサーバがダウンするとシステム全体がダウンします。
システム稼働率は {1-(1-0.8)×(1-0.8)}×0.8 = 76.8%
直列システムなので、サーバ一台で運用するよりも必ず稼働率が低くなります。
上図ではセッション管理問題は解決できますが、信頼性の低いシステムになってしまいます。
そのため各WEBサーバにmemcachedサーバを追加する構成にしました。
システム稼働率は 1-(1-0.8)×(1-0.8) = 96%
・設定(CentOS5)
各WEBサーバに memcachedをインストール しておきます。
・PHPの設定を変更します。
vi /etc/php.ini
---(下記を変更)---------------------------
session.save_handler = files
↓
;session.save_handler = files
session.save_path = "/var/lib/php/session"
↓
;session.save_path = "/var/lib/php/session"
------------------------------
vi /etc/php.d/memcache.ini
---(下記を変更)---------------------------
;session.save_handler=memcache
↓
session.save_handler=memcache
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
↓
session.save_path="tcp://<WEBサーバ1>:11211, tcp://<WEBサーバ2>:11211"
------------------------------
どちらかのサーバがダウンしてもセッションの保存先はフェイルオーバしてくれます。
なんて便利なんだろう(^^)/
○phpのmemcache関連設定
php.net/manual/ja/memcache.ini.php
通常、PHPのセッションは同じサーバに保存されます。

複数のサーバで負荷分散をする場合は、セッション管理に工夫が必要になってきます。

上図の場合、ショッピングカートページは「WEBサーバ1」アクセスしていて、会計ページは「WEBサーバ2」に振られてしまうと、セッション情報が見つからないため、$_SESSIONの中身が空になってしまいます。

↓

そのため、セッション情報保存用にmemcachedサーバを追加して対応したりします。

この構成だと memcachedサーバがダウンするとシステム全体がダウンします。
システム稼働率は {1-(1-0.8)×(1-0.8)}×0.8 = 76.8%
直列システムなので、サーバ一台で運用するよりも必ず稼働率が低くなります。
上図ではセッション管理問題は解決できますが、信頼性の低いシステムになってしまいます。
そのため各WEBサーバにmemcachedサーバを追加する構成にしました。

システム稼働率は 1-(1-0.8)×(1-0.8) = 96%
・設定(CentOS5)
各WEBサーバに memcachedをインストール しておきます。
・PHPの設定を変更します。
vi /etc/php.ini
---(下記を変更)---------------------------
session.save_handler = files
↓
;session.save_handler = files
session.save_path = "/var/lib/php/session"
↓
;session.save_path = "/var/lib/php/session"
------------------------------
vi /etc/php.d/memcache.ini
---(下記を変更)---------------------------
;session.save_handler=memcache
↓
session.save_handler=memcache
;session.save_path="tcp://localhost:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
↓
session.save_path="tcp://<WEBサーバ1>:11211, tcp://<WEBサーバ2>:11211"
------------------------------
どちらかのサーバがダウンしてもセッションの保存先はフェイルオーバしてくれます。
なんて便利なんだろう(^^)/
○phpのmemcache関連設定
php.net/manual/ja/memcache.ini.php
08