PHP はマルチサーバー セッション共有と NFS 共有を実現します
前書き、Nio ヒーローはマルチサーバー セッション共有の問題を提起しました。原文については、「PHP は SESSION データのマルチサーバー共有を実現する」を参照してください。
その中の 1 つの方法は、NFS を使用してセッションを共有することです。セッションの量が比較的多く、すべてのセッション ファイルが同じサブディレクトリにある場合、深刻な負荷の問題が発生したり、Web サイトが使用できなくなる可能性があります。 。この記事では、このプランについて詳しく説明します。
まず、php.ini の session.save_path オプションを次のように変更します。
session.save_path = "2;/tmp/php_sess"
はセッションを保存することを意味します。 「/tmp/php_sess」ディレクトリは 2 レベルのサブディレクトリに分かれており、各レベルのサブディレクトリには 16 個のサブディレクトリがあります。
次に、php のメインディレクトリが /usr/local/server/php/ であると仮定して、次の内容で新しいファイル /usr/local/server/php/include/php/ext/session/mod_files.sh を作成します。 content :
#! /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 の場合は 64 のサブディレクトリ. "
exit 1
fi
if test "$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 test "$3" -a "$3" -eq "32"; then
hash_chars=" $hash_chars g h i j k l m n o 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
fi
fi
for i $hash_chars; do
newpath="$1/$i"
mkdir $newpath || exit 1
sh $0 $newpath `expr $2 - 1` $3
done
これを executable に設定した後、次のコマンドを実行してハッシュ ディレクトリを作成します:
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 を再起動します。