PHP はマルチサーバー セッション共有と NFS 共有を実現します
はじめに、Nio ヒーローはマルチサーバー セッション共有の問題を提起しました。原文については、「PHP は SESSION データのマルチサーバー共有を実現する」を参照してください。
そのうちの 1 つの方法は、NFS を使用してセッションを共有することです。セッションの量が比較的大きく、すべてのセッション ファイルが同じサブディレクトリにある場合、深刻な負荷の問題が発生し、Web サイトが使用できなくなる可能性があります。この記事では、このプランについて詳しく説明します。
まずphp.iniのsession.save_pathオプションを大まかに以下のように変更します:
session.save_path = "2;/tmp/php_sess"
はセッションを「/tmp/php_sess」ディレクトリに保存して分割することを意味しますサブディレクトリの各レベルには 16 個のサブディレクトリがあります。
次に、php のメインディレクトリが /usr/local/server/php/ であると仮定して、次の内容の新しいファイル /usr/local/server/php/include/php/ext/session/mod_files.sh を作成します。
#! /bin/sh
# 名前
# mod_files.sh - php-source/ext/session/mod_files.sh の更新
#
# 概要
# mod_files.sh basedir Depth [numberofsubdirs]
#
#説明
# このスクリプトは、セッション ファイルを保存するために PHP が使用するディレクトリ ツリーを作成します
# (php.ini - 'session.save_path' オプションを参照)
#
# 例: PHP でセッション ファイルをディレクトリに保存する場合ツリー
# 各ディレクトリに 32 のディレクトリを含む深さ 3 レベルのツリー、
# まず、php.ini ファイルに以下の設定を入れます:
#
# session.save_path = "3;/tmp/session"
#
#次に、basedir ディレクトリを作成します: 'mkdir /tmp/session'
#
# 次に、次の引数を使用してこのスクリプトを呼び出します:
#
# ./mod_files.sh ./mod_files.sh /tmp/session 3 32
if test "$2" = ""; then
echo "usage: $0 basedir Depth [numberofsubdirs]"
echo "numberofsubdirs: 設定されていない場合、デフォルトは 16。32 の場合は 32 のサブディレクトリ、64 の場合は 1 つのサブディレクトリを終了します。"
if テスト "$2" = "0"; then
exit 0
fi
hash_chars="0 1 2 3 4 5 6 7 8 9 a b c d e f"
if [ ! -z $3 ] ; then
if テスト "$3 " -a "$3" -eq "32"; then
hash_chars="$hash_chars g h i j k l m no p q r s t u v"
if test "$3" -eq " 64"; then
hash_chars="$hash_chars w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - 、「
フィ
フィ」
fi
for i in $hash_chars; do
newpath="$1/$i"
mkdir $newpath || sh $0 $newpath `expr $2 - 1` $3
done
実行後、次のコマンドを実行します ハッシュ ディレクトリを作成するには:
shell>#cd /usr/local/server/php/include/php/ext/session/
shell>#./mod_files.sh /tmp/php_sess 2 16
それでは、NFS 共有のセットアップを始めましょう。 IP アドレス 192.168.0.1 (ホスト名 svr1)、192.168.0.2 (ホスト名 svr2)、および 192.168.0.3 (ホスト名 svr3) を持つ 3 つのホストがあると仮定します。次に、192.168.0.1 が NFS 共有サービスを提供するように、/ を設定します。 etc /exports に次のコンテンツを追加します:
/tmp/php_sess/ svr*(rw,no_root_squash)
その後、nfs サービスを再起動して、他の 2 つのホストに NFS 共有を提供します。
svr2 と svr3 で次のコマンドを実行して NFS をマウントします:
shell>#mkdir /tmp/php_sess
shell>#mount svr1:/tmp/php_sess /tmp/php_sess
最後に、これら 2 つのホストで php.ini上記内容を追加・変更して、Apacheを再起動してください。