04 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 06

memcachedでのPHPセッション管理とシステム稼働率 

・構成の検討

通常、PHPのセッションは同じサーバに保存されます。
スクリーンショット(2011-05-08 11.00.14)  


複数のサーバで負荷分散をする場合は、セッション管理に工夫が必要になってきます。
スクリーンショット(2011-05-08 11.03.22)
上図の場合、ショッピングカートページは「WEBサーバ1」アクセスしていて、会計ページは「WEBサーバ2」に振られてしまうと、セッション情報が見つからないため、$_SESSIONの中身が空になってしまいます。
スクリーンショット(2011-05-08 11.09.34)
                 ↓
スクリーンショット(2011-05-08 11.19.55) 


そのため、セッション情報保存用にmemcachedサーバを追加して対応したりします。
スクリーンショット(2011-05-08 11.29.18)
この構成だと memcachedサーバがダウンするとシステム全体がダウンします。
システム稼働率は {1-(1-0.8)×(1-0.8)}×0.8 = 76.8%
直列システムなので、サーバ一台で運用するよりも必ず稼働率が低くなります。

上図ではセッション管理問題は解決できますが、信頼性の低いシステムになってしまいます。
そのため各WEBサーバにmemcachedサーバを追加する構成にしました。
スクリーンショット(2011-05-08 11.49.55)
システム稼働率は 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

Posted on 2011/05/08 Sun. 12:37 [edit]

category: サーバ

thread: サーバー  -  janre: コンピュータ

TB: 0    CM: 2

08