《实战LANMP负载均衡部署2-NGINX结合MEMCACHE提供SESSION会话保留》要点:
本文介绍了实战LANMP负载均衡部署2-NGINX结合MEMCACHE提供SESSION会话保留,希望对您有用。如果有疑问,可以联系我们。
相关主题:memcache扩展 / 键值KeyValue存储数据库
据上文各小伙伴的反响效果不错,说明伙伴们对负载均衡这一块的参考度及兴趣度比好,所以本日作者补充一篇关于实战负载均衡的文章给大家.
接上文,上文作者写了实战LANMP负载均衡部署1-实现NGINX反向APACHE服务器集群,居然NGINX反向给了APACHE服务器的集群之后,我们就要考虑SESSION丢失的问题了.
首先我们必要给210的NGINX服务器添加MEMCACHE服务,用于存储缓存信息,
而220/230的服务器只必要添加PHP的MEMCACHE扩展,调用210服务器上的MEMCACHE
由于yum源要找过PHP5.3.3的memcache
所以作者编译过环境为PHP7
可以参考
php7添加memcache扩展
在这要特别说下:
memcache是一个服务
memcached是PHP的扩展支持
pecl-memcache-php7 安装在APACHE集群的220/230的服务器的PHP上
重启HTTPD,打印phpinfo查看是否已经启用了memcachee
然后切换会210的NGINX服务器
安装memcached-1.4.25 (记得yum install -y libevent-devel)
安装完成后启用:
/usr/local/bin/memcached -d -m 256 -l 192.168.0.210 -p 7788 -u root
IP必需为内网IP 127.0.0.1的话就只允许本机了
修改220/230的php.ini
session.save_handler = memcache;
session.save_path = “tcp://192.168.0.210:7788”;
不外建议在执行的PHP上动态修改:
ini_set(‘session.save_handler’, ‘memcache’);
ini_set(‘session.save_path’, ‘ tcp://192.168.0.210:7788’);
先来做个测试,看看SESSION是否可以共享:
修改220/230服务器的index.php内容为:
<?php
header(“Content-Type: text/html; charset=UTF-8”);
echo “当前反向哀求的服务器IP为:”.$_SERVER[“SERVER_ADDR”].”<br>”;
ini_set(‘session.save_handler’, ‘memcache’); #修改SESSION的保留方式
ini_set(‘session.save_path’, ‘ tcp://192.168.0.210:7788’); #SESSION保留路径
session_start();
#unset($_SESSION[‘time’]); die();
#如果设置错误先把数据删除
$time=time(); #获取当前时间
if(!isset($_SESSION[‘time’])){ #如果不存在SESSION的时间
$_SESSION[‘time’]=$time; #赋值
}
echo “共享的SESSION[‘time’]的值=”.$_SESSION[‘time’].”<br>”;
#输出共享的SESSION[‘time’]
echo “现在的时间=”.time();
#输出当前的时间
?>
可以看到结果:
到现在为止,负载均衡的SESSION共享就算完成了,当然也包含数据缓存共享;
为了您的服务器敏感信息不泄漏,建议MEMCACHE只开启内网IP段
即/usr/local/bin/memcached -d -m 256 -l 192.168.0.210 -p 7788 -u root
如果是实际服务器,切记别使用:
/usr/local/bin/memcached -d -m 256 -l 外网IP -p 7788 -u root
因为缓存的数据很容易就被黑客抓取,所以如果不是使用服务器集群的话,建议别开启MEMCACHE
作者在说说,MEMCACHE是如何减轻数据库的瓶颈的,代码就不写了,思路写了本身琢磨下就懂了:
对SQL的操作,莫过“增编削查”
首先,每次SELECT的时候,先判断MEMCACHE里是否存在对应的KEY,存在提取值,这些值是怎么来的呢?
假设MEMCACHE内没有所需的值
数据库中提取,可以为数组也可以为字符串,然后Memcached::set(‘key’,’value’)写入KEY名称和对应的值,值可以为数组
那么下次再拜访的时候,就先不直接读取数据库了
而是if(Memcached::get(‘key’,’value’))就可以判断是否存在,存在直接return即可.
好比说有留言什么的,就进行更新,更新之后同样更新下key的value即可.
不知大家看了之后有什么想法,也不妨和作者分享一下,如有什么地方需改进,还请小伙伴们不惜赐教!
维易PHP培训学院每天发布《实战LANMP负载均衡部署2-NGINX结合MEMCACHE提供SESSION会话保留》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。