Ubuntu下实现Memcache共享session

1。安装memcached,Ubuntu懒人方式当然首选 apt-get。apache php5 安装我就不多说了。
   apt-get install memcached php5-memcache
 
   安装完Memcache服务端以后,我们需要启动该服务:
   memcached -d -m 128 -p 11211 -u root

将etc/memcached.conf  中的 127.0.0.1 改成 服务器地址我这里是 192.168.1.105.可以给memcache 单建一个用户去跑服务,默认是nobody,我就不去建了。
将/etc/php5/apache2/conf.d/memcache.ini  里的 extension=memcache.so 前注释去掉。然后重启动apache2 查看 phpinfo 中的 "Registered save handlers" 会有 "files user memcache" 这3个可用。
 
2。然后修改 /etc/php5/apache2/php.ini
session.save_handler = memcache
session.save_path = “udp://192.168.0.100:11211,tcp://192.168.0.101:11211″ //多台服务器共享
使用多个 memcached server 时用逗号","隔开
也可以在 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path  "tcp://192.168.1.100:11211"
再或者在某个一个应用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://192.168.1.100:11211");

我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:

[Memcache]
; 一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,
; 它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。
; 是否在遇到错误时透明地向其他服务器进行故障转移。
memcache.allow_failover = On
; 接受和发送数据时最多尝试多少个服务器,只在打开memcache.allow_failover时有效。memcache.max_failover_attempts = 20
; 数据将按照此值设定的块大小进行转移。此值越小所需的额外网络传输越多。
; 如果发现无法解释的速度降低,可以尝试将此值增加到32768。
memcache.chunk_size = 8192
; 连接到memcached服务器时使用的默认TCP端口。
memcache.default_port = 11211
; 控制将key映射到server的策略。默认值”standard”表示使用先前版本的老hash策略。
; 设为”consistent”可以允许在连接池中添加/删除服务器时不必重新计算key与server之间的映射关系。
;memcache.hash_strategy = “standard”; 控制将key映射到server的散列函数。默认值”crc32″使用CRC32算法,而”fnv”则表示使用FNV-1a算法。
; FNV-1a比CRC32速度稍低,但是散列效果更好。
;memcache.hash_function = “crc32″

修改php.ini 中 extension_dir 的值为/usr/lib/php5/20090626+lfs/ ,重新执行 php -m 可以看到warning不存在了,同时下边也会列出 memcache 模块已经安装

3.启动memcached /etc/init.d/memcached start

4.重启apache /etc/init.d/apache2 restart

在分布式多台服务器部署apache后,将下面测试代码分别放到每台服务器中:

login.php  //登陆页面

<?php

session_start();

$_SESSION['name']='mym';
$_SESSION['pwd']='123456';
$session_id=session_id();
echo "sid:".$session_id."<br>";
echo '<br><a href="https://www.linuxidc.com/Linux/2012-07/read.php">read session</a>';

?>

read.php

<?php
session_start();

$session_id=session_id();
echo "sid:".$session_id."<br>";

echo 'sever:192.168.1.100<br>';   //在另一台服务器中将ip改为对应的192.168.1.101
echo 'name:'.$_SESSION['name']."<br>";
echo 'pwd:'.$_SESSION['pwd']."<br>";
?>

在前端服务器由ngnix反向代理访问:login.php后,再点击read.php页面,我们可以看到循环的切换后端服务器的ip,并且读出相应的session值。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/29776d01f8e0545986a68c13817422d2.html