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
08
« シェルスクリプト内で rsync -e ssh のポート変更 | CentOS5 yumでmemcahedがインストールできない »
コメント
$_SESSIONが、共有されますか?
お尋ねします。
$_SESSIONの値が、複数のサーバーで共有されるということなのでしょうか?
それとも、「$memcache = new Memcache;」としてしか使えないのでしょうか?
HPをあちこち読んで、混乱してきたもので。
URL | 毘政 #cks3dOnk | 2012/05/01 15:27 | edit
Re: $_SESSIONが、共有されますか?
> お尋ねします。
> $_SESSIONの値が、複数のサーバーで共有されるということなのでしょうか?
>
> それとも、「$memcache = new Memcache;」としてしか使えないのでしょうか?
> HPをあちこち読んで、混乱してきたもので。
お返事本当に遅くなってすみません。
この設定の場合は複数のサーバで$_SESSIONの値が共有されます。
「$memcache = new Memcache;」の場合は「memcache_connect」で指定したサーバにのみ値が保存されます。
URL | arpanet617 #- | 2012/06/30 23:13 | edit
Comment
list
コメントの投稿
Comment
form
トラックバック
トラックバックURL
→http://arpanet617.blog.fc2.com/tb.php/6-6df6a45c
この記事にトラックバックする(FC2ブログユーザー)
Trackback
list
| h o m e |