mysql集群session_PHP集群session共享
upstream onmpw_phpApps{
server 192.168.18.88:9000;
server 192.168.18.191:9000;
}
……
Server{
listen 80;
server_name load.onmpw.com ##这里是域名
root /www/onmpw
……
loca
…… upstream onmpw_phpApps{ server 192.168.18.88:9000; server 192.168.18.191:9000; } …… Server{ listen 80; server_name load.onmpw.com ##这里是域名 root /www/onmpw …… location ~ \.php$ { root /www/onmpw ##这里是PHP应用所在目录 fastcgi_pass onmpw_phpApps; …… } } } 以上是对Nginx进行的设置。其中只是包含了关键的部分,其余的和平常我们使用Nginx+PHP作为web服务的时候进行的设置相同。 PHP所在主机设置 这里的设置就比较简单了。 首先编辑php-fpm.conf文件,修改监听的ip和端口,然后启动fpm服务 主机192.168.5.112 Listen = 192.168.5.112:9000 //这里的端口可以自行设置。保存退出 # /usr/local/php/sbin/php-fpm //开启服务 主机192.168.5.113 Listen = 192.168.5.113:9000 # /usr/local/php/sbin/php-fpm 到这里就对PHP的主机设置完成了。当然了,代码需要在两台主机上各上传一份儿。 好了,经过上面的设置,一个基本的PHP集群就已经搭建完成了。但是有一个问题,这种情况如果只是访问静态资源或者不进行交互的话是没有问题的。如果需要交互,那就涉及到一个session共享的问题。默认情况下PHP是将session存在本地磁盘上的。那这两台主机之间如何共享session呢,接下来我们就来解决这个问题。 PHP主机之间Session共享 之前在网上看到过一种解决方式。由于PHP是将session存储在文件中,那我们可以在Nginx负载主机上面搭建一个分布式文件系统(NFS),让两台PHP主机的session都存放在此文件系统中。以此来达到共享session的目的。 我个人比较倾向于将session存储到数据库中。因此这里我介绍的是将session存储到redis中。所以我们需要增加一台Redis服务器 Redis服务器:192.168.5.114 PHP默认情况下是不支持对Redis的操作的。所以这里我们需要自己手动安装第三方的扩展,使其支持对Redis的操作。关于如何使PHP支持Redis,我们可以参考《PHP操作Redis的两种方式》。 在这里我就认为我们的PHP已经支持Redis了。接下来是将session存储到Redis中,有两种方式:一种是直接修改PHP的配置文件php.ini;另一种是重写session机制。 修改PHP配置文件php.ini将session存储到Redis中 使用vim打开php.ini,需要修改的有这两项:session.save_handler和session.save_path。 session.save_handler = Redis session.save_path = “tcp://192.168.5.114:6379” //Redis不需要密码验证 session.save_path = “tcp://192.168.5.114:6379?auth=password” //Redis 需要密码验证 修改完成php主机,保存退出。然后重启php-fpm服务 # kill -INT `cat /usr/local/php/var/run/php-fpm.pid` # /usr/local/php/sbin/php-fpm 两台PHP主机都做按照以上步骤操作。经过以上步骤,对于session的所有信息都保存到了Redis中。从而实现了session的共享。 通过重写session机制将session存储到Redis中 通常,在很多情况下我们是没有权限修改php.ini文件的。这时候我们可以通过重写session机制来修改session信息的存储。 对于重写session,php已经为我们提供了SessionHandlerInterface 接口。我们只要实现这个接口就可以了。关于如何重写session机制,大家可以参考《PHP重写session机制》这篇文章。并且我自己也重写了session的机制,该类的完整代码在github上,大家有兴趣的和可以点此查看。 总结 PHP集群的架构方式有很多种,但是其原理都大同小异。关键是找出最适合自己项目的最佳方案。例如:对于session存储方式的选择,你也可以选择使用memcache或者mysql数据库等。总之最适合自己的就是最优的。希望本文对大家有所帮助。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |