PHPセッションストレージの大本命Flareを試してみました
PHPのセッションストレージにファイルを使うというのはわりとありですが、2台以上の構成になるとNFSやその他のネットワークのファイルシステムにするか、MySQLなどのDBをセッションストレージとして利用するパターンが一般的でした。
わりと手軽な選択肢の一つにmemcachedをセッションストレージにするという手段があります。
利用の仕方も最近のPHPでは非常に簡単でセッションハンドラーのコードを書くことなく下記の2点の設定を書くだけです。
session.save_handler = memcache session.save_path = "servername:11211"
ただ問題があり、簡単なのはいいのですがmemcachedはオンメモリでありストレージに書き込むことがないため、サーバ再起動時にはデータが消えてしまうという問題がありました。(もちろんセッションに依存しない仕組みを用意するというのはありますが)
で、この問題を解決しているのが、Greeラボ様で公開されているFlareです。Flareはmemcached互換のインターフェースを持ちながら、ストレージに書き込むという処理があるためサーバ停止にも強く上記の、sessio_handlerをmemcacheに指定して使えばいいただけなので非常に組み込みが容易です。
インストール
インストールは、インストールページを見ていただいてインストールするのが簡単です。dabianのパッケージはありますが、RPM系のパッケージはなかったのでSRPMを作成しました。
起動まで
基本的にはチュートリアルを見て試してみました。パッケージでインストールすると、各設定ファイルが、/etc/flare*.confにできます。設定自体は特に今回はいじってません。
RPMには、起動スクリプトが仕込んであるので適当に
/etc/init.d/flare start
と打つと起動します。
よしこれで、セッション書き込めるぜ!とおもって書き込んでも書き込めません。(すいませんちょっとせっかちでした)チュートリアルにあるようにノードをmasterにする必要があります。
インデックスサーバに接続し下記のコマンドを打ちます。
telnet localhost 12120 > node role localhost 12121 master 1 0
OKというレスポンスが帰ってきたら完了です。
接続テスト
まずはphp.iniの設定を下記に変更し、httpdの再起動を行います。
session.save_handler = memcache session.save_path = "servername:12121"
下記のコードを実行します。
<?php session_start(); var_dump($_SESSION); if(! isset($_SESSION['count'])){ $_SESSION['count'] = 1; } else { $_SESSION['count'] = $_SESSION['count'] + 1; }
結果、ちゃんとカウントアップされているようです。