セッションをNFSで共有するとApacheがおかしくなるのでmemcacheでの共有にした

Apache

セッションをNFSで共有するとApacheがおかしくのでmemcacheでの共有にした

NSFでセッションの共有はしてはいけません。

ロードバランサーを利用して、アプリケーションサーバを2重化したとき、PHPのセッションを何らかの方法で共有する必要があります。このとき、NFSでディスクを共有し、2つのサーバのセッションファイルを共有しようとした時の話です。

NFSで書き込みが発生するシステムを共有すると微妙です。

 

■起こった現象

一定以上負荷がかかると、apacheのディスクIO待ちが発生しプロセスが待ち状態になってしまいました。一度発生すると、プロセスが溜まり続けます。

結果、ロードアベレージが100以上になっていました。このとき、CPU使用率は非常に少ない状態です。プロセスが多くなっているので、メモリが大量に消費されていました。

 

まとめるとこんな現象です。

・CPU使用率は低い

・ロードアベレージが異常に上がる

・プロセスがたくさん上がっているので、メモリを食いつぶしている

 

■結局

NFSに対してアプリケーションサーバから書き込みが多発すると、とにかく上記の現象が発生していました。

 

■対応

結局、NFSでのセッション共有は諦め、memcacheによる共有にしました。

 

■設定

php.iniに以下を記述します。

 

下記2つをコメントアウトします。

session.save_handler = files
session.save_path = "/var/lib/php/session"

 

以下2つを記述します。localhostのところは、memcacheの起動しているサーバ名またはIPを指定します。

session.save_handler = memcache

session.save_path = "tcp://localhost:11211"

apacheを再起動すると、対応完了です。memcacheにセッション情報が書き込まれるようになります。