Home > Article > Backend Development > PHP method to implement multi-server session sharing and NFS sharing_PHP tutorial
PHP realizes multi-server session sharing and NFS sharing
Foreword, Nio heroes raised the issue of multi-server session sharing. For the original text, please see PHP realizes multi-server sharing of SESSION data.
Among them, one method is to use NFS to share sessions. If the amount of sessions is relatively large and all session files are in the same subdirectory, it may cause serious load problems, or even rendering the website unusable. This article is a detailed explanation of this plan.
First, modify the session.save_path option of php.ini, roughly as follows:
session.save_path = "2;/tmp/php_sess"
means to store the session in "/ tmp/php_sess" directory, and is divided into 2 levels of subdirectories, and each level of subdirectory has 16 subdirectories.
Next, assuming that the main directory of php is /usr/local/server/php/, create a new file /usr/local/server/php/include/php/ext/session/mod_files.sh with the following content :
#! /bin/sh
# NAME
# mod_files.sh - Update of the php-source/ext/session/mod_files.sh
#
# SYNOPSIS
# mod_files.sh basedir depth [numberofsubdirs]
#
# DESCRIPTION
# this script creates the directories tree used by php to store the session files
# (see php.ini - 'session .save_path' option)
#
# Example: if you want php to store the session files in a directory tree
# of 3 levels of depth containing 32 directories in each directory,
# first, put the setting bellow in the php.ini file:
#
# session.save_path = "3;/tmp/session"
#
# Now create the basedir directory: 'mkdir /tmp/ session'
#
# Then, call this scrip with the following arguments:
#
# ./mod_files.sh ./mod_files.sh /tmp/session 3 32
if test "$2" = ""; then
echo "usage: $0 basedir depth [numberofsubdirs]"
echo "numberofsubdirs: if unset, defaults to 16. if 32, 32 subdirs, if 64, 64 subdirs. "
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 in $hash_chars; do
newpath="$1/$i"
mkdir $newpath || exit 1
sh $0 $newpath `expr $2 - 1` $3
done
After setting it to executable , run the following command to create the hash directory:
shell>#cd /usr/local/server/php/include/php/ext/session/
shell>#./mod_files.sh /tmp /php_sess 2 16
Now, start setting up the NFS share. Assume that there are 3 hosts with IP addresses of 192.168.0.1 (host name svr1), 192.168.0.2 (host name svr2), and 192.168.0.3 (host name svr3). Now let 192.168.0.1 provide NFS sharing services, configure /etc /exports, add the following content:
/tmp/php_sess/ svr*(rw,no_root_squash)
Then restart the nfs service to provide NFS sharing for the other two hosts.
Execute the following commands on svr2 and svr3 to mount NFS:
shell>#mkdir /tmp/php_sess
shell>#mount svr1:/tmp/php_sess /tmp/php_sess
Finally, add/modify the above mentioned content to php.ini on these two hosts, and then restart apache.