09 « 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.» 11

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

コメント

$_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

コメントの投稿

Secret

Comment
form

トラックバック

トラックバックURL
→http://arpanet617.blog.fc2.com/tb.php/6-6df6a45c
この記事にトラックバックする(FC2ブログユーザー)

Trackback
list