Memcache之会话保持

session共享 会话保持

Posted by     BY   杨晓明 on September 14, 2017

一.前言

1.什么是会话保持

我们知道,在网站集群中,负载均衡器根据调度算法分配用户请求到不同的服务器以实现合理分配请求。
但这样做会产生一个问题,试想如果有一个用户访问请求被分配到服务器A,并且在服务器A登录了,并且在很短的时间,这个用户又发出了一个请求,这个用户的请求很有可能会被分配到服务器B去,这个时候在服务器B上是没有登录的,所以又要重新登录。这自然是不友好的。
如何在实现负载均衡的前提下,让用户无需多次多次登录,这便涉及到会话保持。 实现会话保持有很多种方式,本文介绍使用memcache实现。

2.使用memcache实现会话保持的原理

这里不得不提的是两个关于网站访问的两个名词:

  • cookies:当一个用户通过HTTP访问一个服务器时,这个服务器会将一些Key/Value键值返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时,用户下次访问这个服务器时,数据又将完整地带回给服务器。
  • session:从客户端浏览器连接服务器开始,到客户端浏览器与服务器断开为止,像这样的一次会话中,Session起到的作用是跟踪用户的会话信息。

而本文的主题memcache则就是通过把session放置在memcache缓存中,用户请求时,不论被分配到哪个服务器,都可以在缓存中得到session。这样便实现了会话保持。

二.架构说明

在本文中,使用两台web服务器,均已搭建好LNMP环境,部署客户端。
另使用一台memcache服务器用来部署memcache服务端。
具体如下:

主机名 IP地址 角色
mem 10.0.0.4 服务端
web01 10.0.0.5 客户端1
web02 10.0.0.6 客户端2

三.服务端部署

yum安装memcache即可

yum -y install memcached
systemctl start memcached
systemctl enable memcached

四.客户端部署

1.编译PHP的memcache模块

wget https://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
/application/php/bin/phpize
./configure --enable-memcache --with-php-config=/application/php/bin/php-config --with-zlib-dir
make
make install
sed -i '$a extension=memcache.so' /application/php/lib/php.ini
pkill php
/application/php/sbin/php-fpm -t
/application/php/sbin/php-fpm
/application/php/bin/php -m|grep memcache

2.启动memcache模块

sed -i '$a extension=memcache.so' /application/php/lib/php.ini
pkill php
/application/php/sbin/php-fpm -t
/application/php/sbin/php-fpm
/application/php/bin/php -m|grep memcache

3.指定服务端

sed -i 's#session.save_handler = files#session.save_handler = memcache#;$a session.save_path = "tcp://10.0.0.4:11211"' /application/php/lib/php.ini
pkill php
/application/php/sbin/php-fpm -t
/application/php/sbin/php-fpm