一、背景:
因为业务量的增加(QPS、PV等指标的上升),需要多台服务器处理现有业务逻辑,因此搭建了 nginx 的负载均衡,之后导致多台服务器之间,session无法共享
二、解决方案:
1、ip-hash:
对访问来源,按照来源 IP 进行分发,缺点:nginx必须为最前端的服务器,并且容易产生热点,无法平均分配
2、存在数据库中:
增加 数据库 I/O 开销,也表容易增加数据库的复杂度,特别是做了读写分离、集群等布置的时候,这时候需要考虑 数据库 同步的问题,是最终一致性还是原子一致性;况且,读写分离实际试验下来,主从复制还是会有毫秒级别的误差,并不是真的实时同步数据。
3、memcache:
搭建 memcache 之后存在 memcache 中,之后取用,只存在于一个地方(类似于新开一个应用,然后这个应用数据还一直存放在内存中)。
uedbet官网手机版最新方式:
两台apache的主机IP分别是 192.168.74.235192.168.74.236
Nginx主机IP是192.168.74.131
Memcached主机的IP是192.168.74.131
在192.168.74.131 安装memcached,并且启动
以一台为例192.168.74.236,安装php及php对memcached的依赖库yuminstall memcached-devel.i686 libmemcached-devel.i686 php-pecl-memcache.i686
uedbet官网手机版最新php.ini
session.save_handler= memcache
session.save_path= "tcp://192.168.74.131:11211"
或者(以下两个没有尝试)
1.某个目录下的 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path "tcp://IP:11211"
2.在某个一个应用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://IP:11211");
同时一定要把下面的;session.save_path= "/var/lib/php/session" 注释掉
同时把extension=memcache.so 打开
重启一下 apache,查看 phpinfo 中的 "Registered save handlers" 会有 "files usermemcache" 这3个可用,如果有就证明装好了