memcache实现php会话保持
实验目标:
实现通过haproxy轮询调度(RR)反代至两台lamp时,用户会话ID保持不变。
版本:
haproxy-1.5.4-3.el6.x86_64,yum安装
memcached-1.4.15-9.el7_2.1.x86_64,yum安装
LAMP:httpd-2.4.9、mariadb-5.5.36-linux-x86_64、php-5.4.26,都是编译安装。
php的memcache扩展模块:memcache-2.2.7,编译安装
PHP安装:(其他安装略过)
编译成php-fpm
./configure--prefix=/usr/local/php-5.2.26--with-mysql=/usr/local/mysql--with-openssl--with-mysqli=/usr/local/mysql/bin/mysql_config--enable-mbstring--with-freetype-dir--with-jpeg-dir--with-png-dir--with-zlib--with-libxml-dir=/usr--enable-xml--enable-sockets--enable-fpm--with-mcrypt--with-config-file-path=/etc--with-config-file-scan-dir=/etc/php-5.2.26--with-bz2
memcache 扩展模块安装
tarxfmemcache-2.2.7.tgzcdmemcache-2.2.7/usr/local/php-5.2.26/bin/phpizeConfiguringfor:PHPApiVersion:20100412ZendModuleApiNo:20100525ZendExtensionApiNo:220100525
./configure--with-php-config=/usr/local/php/bin/php-config--enable-memcachemake&&makeinstall
上述安装完后会有类似以下的提示:
Installingsharedextensions:/usr/local/php-5.2.26/lib/php/extensions/no-debug-non-zts-20100525/memcache.so
编辑/etc/php.ini,在“Dynamic Extensions”相关的位置添加如下一行来载入memcache扩展:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
httpd虚拟机配置:(只展示其中一台的配置)
cat/etc/httpd-2.4.9/extra/httpd-vhosts.conf:<VirtualHost192.168.1.30:80>DocumentRoot"/www/test1.com"ErrorLog"logs/dummy-test1.com-error_log"CustomLog"logs/dummy-test1.com-access_log"common<Directory/www/test1.com>requireallgranted</Directory>ProxyRequestsOffProxyPassMatch^/(.*\.php)$fcgi://192.168.1.30:9000/www/test1.com/$1</VirtualHost>
httpd启用PHP及启动导入虚拟机配置:
启动以下两个模块:
LoadModuleproxy_modulemodules/mod_proxy.soLoadModuleproxy_fcgi_modulemodules/mod_proxy_fcgi.so
修改:
DirectoryIndexindex.phpindex.html
添加:
Include/etc/httpd-2.4.9/extra/httpd-vhosts.confAddTypeapplication/x-httpd-php-source.phpsAddTypeapplication/x-httpd-php.php
测试php与memcache的连接是否成功:
cat/www/test1/01.php:<?php$mem=newMemcache;$mem->connect("192.168.1.25",11211)ordie("Couldnotconnect");$version=$mem->getVersion();echo"Server'sversion:".$version."<br/>\n";$mem->set('hellokey','HelloWorld',0,600)ordie("Failedtosavedataatthememcachedserver");echo"Storedatainthecache(datawillexpirein600seconds)<br/>\n";$get_result=$mem->get('hellokey');cho"$get_resultisfrommemcachedserver.";?>
访问此01.php,出现“Hello World is from memcached server”时,说明表memcache与php连接成功。
修改/etc/php.ini,把会话保存到memcache中。
session.save_handler=memcachesession.save_path="tcp://192.168.1.25:11211"
haproxy配置:
frontendmain*:80default_backendappbackendappbalanceroundrobinserverapp1192.168.1.13:80checkserverapp2192.168.1.30:80check
测试会话保存是否成功:
192.168.1.13(lamp)的测试脚本:/www/test1.com/02.php
<?phpsession_start();if(!isset($_SESSION['admin'])){$_SESSION['TEST']='wan';}print$_SESSION['admin'];print"\n";printsession_id();print"\n";print"===>192.168.1.13webserver";?>
192.168.1.30(lamp)的测试脚本:/www/test1.com/02.php
<?phpsession_start();if(!isset($_SESSION['admin'])){$_SESSION['TEST']='wan';}print$_SESSION['admin'];print"\n";printsession_id();print"\n";echo"===>192.168.1.30webserver"?>
区别在于最后一行print 显示lamp本身的IP地址。
浏览器访问02.php
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。