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にセッション情報が書き込まれるようになります。