案例环境:

背景:由于php-fpm运行在不同的服务器上,然而默认的phpsession数据是在各个服务器上分别存放的。如果在某一次php请求过后,nginxphp请求发送到一台php-fpm服务器上,就会导致session的丢失。那么接下来就需通过memcached统一存储session来解决这样的问题。

Memcached session共享案例_Memcached session共享案

第一步:基础环境搭建

1、完成nginx+php-fpmmysql分离的基础环境搭建(mysql注意分别授权给web服务器)

2、php扩展memcache

3、Memcached服务端的部署

4、Heartbeat环境的部署(heartheat启动服务时,服务必须在/etc/init.d/下)

5、测试保障能够通过IP地址192.168.1.123能够正常访问

 

 

第二步:安装如上的环境搭建后,不共享session,见web1web2存放在相应的web目录下。测试代码如下

Web1上的测试代码web1.php

<?php

session_start();

$_SESSION['TEST']=session value test ;

echo $_SESSION['TEST']

?>

测试结果:

Memcached session共享案例_Memcached session共享案_02 

Web2上的测试代码web2.php(测试前,通过关闭web1heartbeat服务(/etc/init.d/heartbeat stop),让服务切换到web2)

<?php

session_start();

echo $_SESSION['TEST']

?>

测试结果:

Memcached session共享案例_Memcached session共享案_03 

 

说明:在web1中,给TEST session赋值为“session value test”,那么web1肯定能够输出其内容,那web2却不能输出,其原因在于,session默认是保存在自己的web服务器上的。基于这样的问题,如下,我们将通过session共享的方式解决这样的问题

 

第三步:session共享测试

 

1、192.168.1.121上启动memcached

   memcached -d -m 100 -l 192.168.1.121 -p 11211 -u root

2、分别的web1web2上的php.ini/usr/local/php/lib目录下)文件中,配置如下内容

  [Session]

  session.save_handler = memcache

  session.save_path = tcp://192.168.1.121:11211

 

说明:作用就是通过memcached来处理session,保存路径为tcp://192.168.1.121:11211

 

3、完成后,重新启动php-fpm服务器

[root@web1 sbin]# ps -aux | grep php-fpm

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

root      1933  0.0  0.5  41004  2768 ?        Ss   06:32   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

[root@web1 sbin]# kill -QUIT 1933

[root@web1 sbin]# ./php-fpm

[root@web2 lib]# ps -aux | grep php-fpm

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

root      1493  0.0  0.5  41004  2748 ?        Ss   06:33   0:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

[root@web2 lib]# kill -QUIT 1493

[root@web2 sbin]# ./php-fpm

 

4、phpinfo中,需包含如下内容

Memcached session共享案例_Memcached session共享案_04 

5、再测试web1.phpweb2.php的结果

Web1

Memcached session共享案例_Memcached session共享案_05 

Web2:

Memcached session共享案例_Memcached session共享案_06 

说明:session共享成功