大量のアクセスに対応するため、またWebサーバ故障時のリスクを減らすため に、Webサーバを複数台使用する場合があるかと思います。そのような環境で PHPを使用する場合、セッション情報をどう管理するかが問題の一つとして出て きます。
今回はそんな時に使えるセッションサーバ、sharedanceを紹介します。 sharedanceを使うと、複数のWebサーバ間でセッション情報を共有できるよう になります。また、設定が簡単で、動作も比較的軽いのが特徴です。
では、早速インストール、設定方法を順に見ていきます。 (以下の説明ではlinux環境を想定しています。)
1)libeventのインストール
sharedanceではlibeventというライブラリを使用するので、まずこれをインス トールします。 ソースコードを下記ホームページからダウンロードし、適当なディレクトリに展 開します。
libeventのホームページ
http://www.monkey.org/~provos/libevent/
展開してできたディレクトリで
./configure
make
を実行後、rootユーザで
make install
を実行すればインストール完了です。
2)sharedanceのインストール
次に、sharedanceをインストールします。 こちらも、ソースコードを下記ホームページからをダウンロードし、適当なディ レクトリに展開します。
sharedanceのホームページ
http://sharedance.pureftpd.org/project/sharedance
展開してできたディレクトリで
./configure
make
を実行後、rootユーザで
make install-strip
を実行すればインストール完了です。
3)sharedanceの起動
/usr/local/sbin/sharedanced --directory=/var/tmp/sharedance --deamonize
というようなコマンドでsharedanceを起動します。--directoryではsharedance がデータを保存するディレクトリを指定しますが、ここでメモリ上のファイルシ ステムにあるディレクトリを指定すると、速度が格段に速くなります。 このコマンド実行時に指定したディレクトリがないとsharedanceは起動しないの で、先にディレクトリを作っておくようにしましょう。
また、sharedanceは1042番がデフォルトの待ち受けポートになっています。 変更する場合はコマンドに
--port=(ポート番号)
をつけて実行します。
※それでもプログラムが起動しない場合LD_LIBRARY_PATHの設定がうまくできていない可能性があります。 bashの場合、
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
を実行後、上記のコマンドを実行して下さい。 それでもダメな場合、起動時のオプションに
--ip=(sharedanceサーバのipアドレス)
を追加してコマンドを実行して下さい。
4)PHPの設定
次に、PHPでsharedanceを使用するように設定します。 必要なPHPファイルがsharedanceを展開したディレクトリのphpディレクトリにあ るので、これを適当なディレクトリにコピーして使用します。 ここでは
/opt/sharedance
に必要なファイルをコピーしたとします。 この中のsession_handler.phpで、セッションサーバのIPまたはホスト名を指定 できるようになっています。 SESSION_HANDLER_HOSTの値がデフォルトではlocalhostになっているので、これ を環境に合わせて変更しておきます。
続いて、php.iniで以下の2箇所を変更します。
・auto_prepend_file
auto_prepend_file=/opt/sharedance/session_handler.php
・session.save_handler
session.save_handler = user
あとはapacheを再起動するだけです。
実際にセッションを利用したスクリプトにアクセスしてみましょう。うまく動作 している場合、起動時に指定したディレクトリ内にファイルが作成されているは ずです。
※大量のアクセスに対応するには?大量のアクセスが予想される場合は、sharedance起動前に下記のようなコマンド を実行します。
/sbin/sysctl -w fs.file-max=65536
ulimit -n 65536
/sbin/sysctl -w net.ipv4.ip_local_port_range="1024 65000"