Sharedanceでセッションの共有

複数のウェブサーバ間でセッションの共有をしたかったのでSharedanceを試してみた。

Sharedanceのインストール

% sudo portinstall /usr/ports/databases/Sharedance

Sharedanceの起動

Sharedanceのインストールが終ったら起動する。事前にSharedanceでのセッション保存ディレクトリを用意しておかないと起動しないので作成しておく。

% sudo mkdir -p /var/tmp/sharedance
% sudo sharedanced -d /var/tmp/sharedance -B

-Bオプションで、バックグラウンドで実行してくれる。もしもテストなどで、色々なデバッグメッセージを表示させたい場合は-Dオプションを付ければ良い。

% sudo sharedanced -d /var/tmp/sharedance -D

クライアントの設定

Sharedanceのサーバが起動したら、次はそれを使用するプログラム側の設定をする。

必要なファイルのコピー

FreeBSDでportsからインストールすると、/usr/local/share/sharedanceにPHPで使うSharedanceのクライアントプログラムがあるのでそれを適当な場所にコピーする。

% sudo cp -Rp /usr/local/share/sharedance /usr/local/www/data/sharedance
設定ファイルの編集

php.iniで以下の2箇所を変更する。

% sudo vim /usr/local/etc/php.ini
auto_prepend_file = /usr/local/www/data/sharedance/session_handler.php
session.save_handler = user

これだと、そのサーバで動く全てのPHPアプリケーションに影響が有るので、特定のアプリケーションだけSharedanceを使いたい場合は.htaccessに設定を書けば良い。

% cd {APP_DIR}
% cp -Rp /usr/local/www/data/sharedance ./sharedance
% vim .htaccess
php_value auto_prepend_file ./sharedance/session_handler.php
php_value session.save_handler user

※auto_prepend_fileがPHP_INI_PERDIRな為、php.iniかhttpd.conf(.htaccess)でしか設定出来ない。

クライアントファイルの編集

session_handler.phpにSharedanceサーバのIPを指定する部分が有るので、変更する。

% sudo vim /usr/local/share/sharedance/session_handler.php
define('SESSION_HANDLER_HOST', '192.168.0.81');
Apacheの再起動

php.iniに書いた場合はApacheを再起動しないと反映されないので再起動する。

% sudo /usr/local/etc/rc.d/apache restart

終わり

これで複数のサーバでセッションを共有することが出来た。
ただ、portsから入れても起動スクリプトとかはないみたいなので、自分で適当に書かないといけないっぽい。