Session共享目的
解决集群主机过多而导致用户重复登陆网站的问题
在一个集群中,如果网站需要用户输入用户名和密码登陆之后才能继续问,那么当用户登陆其中一台集群主机之后随着继续访问页面,请求可能被代理服务器轮询到另外一台服务器上,那么对于另外一台服务器来说用户并没有登陆,想查看登陆之后的页面还需要再次登陆,这样集群主机越多需要客户重复登陆的次数就越多
Session与Cookie
Session 存储在服务器端,保存用户名、登录状态等信息
Cookies 由服务器下发给客户端,保存在客户端的一个文件,保存的主要内容是sessionID
环境准备
百度文库提取压缩包传入到以下三台服务器中进行部署
链接:https://pan.baidu.com/s/14Zv1eoCKAlOa7yoc4EWHew?pwd=3k3s
提取码:3k3s
主机名 | IP地址 | 部署服务 |
---|---|---|
proxy | 192.168.99.5 | nginx |
web3 | 192.168.99.100 | lnmp |
web2 | 192.168.99.200 | lnmp |
Session共享
web1主机:
yum -y install gcc make pcre-devel openssl-devel
[root@web1 ~]# tar -xf lnmp_soft.tar.gz
[root@web1 ~]# cd lnmp_soft/
tar -xf nginx-1.17.6.tar.gz
cd nginx-1.17.6/
./configure //配置
make //编译
make install //安装
yum -y install mariadb mariadb-server mariadb-devel //安装数据库
相关软件包
yum -y install php php-mysql php-fpm //安装php相关软件包
systemctl start mariadb
systemctl start php-fpm
修改配置文件
[root@web1 nginx]# vim conf/nginx.conf //修改配置文件,实现动静分离,
修改65~71行为以下状态
vim conf/nginx.conf //修改配置文件,实现动静分离,修改65~71行为以下状态
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
配置好lnmp之后
cd ~/lnmp_soft/php_scripts/
tar -xf php-memcached-demo.tar.gz //释放带登录功能的网页
cp -r php-memcached-demo/* /usr/local/nginx/html/ //拷贝页面
到nginx中使用火狐浏览器访问http://192.168.99.100/index.php 可以
看到有登录界面的网页
web1配置好之后,web2也按照一模一样的过程配置,防火墙都要关闭
proxy主机配置集群
upstream web { //在默认的虚拟主机上面添加集群
server 192.168.99.100:80;
server 192.168.99.200:80;
}
location / {
proxy_pass http://web; //然后在默认的虚拟主机中的location里调用集群
sbin/nginx -s reload //重新加载配置文件
http://192.168.99.5/index.php //之后测试效果,不断刷新页面,会看到web1与
web2的登录界面(需要提前在web1与web2的index.php页面进行标记),以便于区分
客户 Cookies ------ proxy ------ web1 Session
------ web2 Session
目前环境搭建好之后可以按以下步骤测试:
删除web1与web2的session文件
rm -rf /var/lib/php/session/*
删除火狐浏览器的历史记录(主要是cookies文件)
http://192.168.99.5/index.php //登录2次才能成功,目前登录2次是正常现象!!
部署memcached
上述实验由于web1与web2都是在各自的/var/lib/php/session目录中存储session,所以造成客户需要重复登录,为了统一session存储的位置(该存储方式通常被称为session共享),需要安装专门的数据库工具
memcache 可以利用内存读写数据的数据库服务
部署流程
proxy主机
yum -y install memcached telnet //安装软件包
systemctl start memcached //开启服务
telnet 127.0.0.1 11211 //连接memcache,进行检测
测试memcached:
set abc 0 200 3 //创建变量abc(如果abc已经存在就是覆盖),0是不压
缩数据,数据存储时间200秒,存3个字符,回车之后比如输入xyz就是存储
这3个字符
get abc //获取变量abc
replace abc 0 200 3 //覆盖abc,此时变量abc必须存在
delete abc //删除abc
add abc 0 200 3 //添加abc变量,如果abc已经存在则会添加失败
flush_all //删除所有数据
quit //退出
web1,web2主机
修改session文件的位置
到web1与web2主机修改存储session文件的位置
vim /etc/php-fpm.d/www.conf //到最后一页
php_value[session.save_handler] = memcache //这里改成memcache,表示session
的存储不在是本地的普通文件,而是去找memcache
php_value[session.save_path] = tcp://192.168.99.5:11211 //这里的路径修改为
安装了memcache服务的服务器地址与端口
yum -y install php-pecl-memcache //安装php与memcached服务关联的软件包
yum -y install php-pecl-memcache
所有主机关闭防火墙和selinux
最后清空浏览器的历史记录,再访问http://192.168.99.5/index.php仅仅登录一次即
可成功
网友评论