一般负载均衡内容有两种形式,一种是静态,另一种是动态,动态网站内容就可能需要进行交互,那么就涉及到session共享的问题。默认PHP是将session存储在LocalDisk,如果是多台php主机之间进行负载,那么该如何共享session?今天我们就解决这个问题。
session会话共享文件有很多种方式:
分布式文件共享;NFS,NAS文件存储等。
Nginx负载均衡ip_hash模块,固定访客到后端某台服务器。
将session存储到数据库中;例如MySQL,Memcached,Redis,Mongodb等。
我个人比较倾向于将session存储到Redis数据库,用这种方式来同步session共享,不仅不会加大数据库的负担,而且安全性比cookie更高,把session放到内存里面,比从磁盘文件中读取会快很多。“有人认为;那我把所有的缓存软件都安装,速度岂不是更快,那就不是缓存加速了,而演变成了缓存库了”。
php语言脚本默认不支持对Redis的操作,所以需要安装第三方phpRedis扩展模块,让其支持对Redis的操作,至于如何安装使用phpRedis,可以参考我前面写的文章《phpRedis扩展模块安装配置使用》。此外这里还需要一台Redis服务器,请参阅《LinuxCentos7 Redis 3.2.9 源码编译安装配置》。
1.修改PHP配置文件php.ini将session存储到Redis中。
# vim /usr/local/php/etc/php.ini session.save_handler = files ;session.save_path = "N;/path"
修改为:
# vim /usr/local/php/etc/php.ini session.save_handler = files ;session.save_path = "N;/path"
;如果Redis有密码连接方式 session.save_path = “tcp://10.10.204.66:6379?auth=password”
2.重启php-fpm服务生效
# systemctl restart php-fpm