共计 956 个字符,预计需要花费 3 分钟才能阅读完成。
一般负载均衡内容有两种形式,一种是静态,另一种是动态,动态网站内容就可能需要进行交互,那么就涉及到 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 服务器,请参阅《Linux Centos7 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"
修改为:session.save_handler = Redis
session.save_path =“tcp://10.10.204.66:6379”; 如果 Redis 有密码连接方式
session.save_path =“tcp://10.10.204.66:6379?auth=password”
2. 重启 php-fpm 服务生效
# systemctl restart php-fpm
以上所有过程均是经过手工测试的,99% 可用于生产。