mysql集群session_PHP集群session共享
集群的概念没有多复杂,其实就是多台电脑为了同一个目标在一起工作。在Web应用中,就是多个服务器提供一个站点的服务。
搭建PHP集群的第一步就是设置负载均衡。首先我们需要三台主机:
Nginx负载:192.166.5.111
PHP应用1:192.168.5.112
PHP应用2:192.168.5.113
先前,在PHP应用所在的主机,我们需要安装Nginx或者apache等这类web服务器,然后再在前面使用Nginx作为负载。Nginx 负载和php应用之间的通信是在应用层的,Nginx 负载其实就相当于一个代理。但是,现在情况不同了。Fastcgi技术的应用允许在php应用层可以不用再安装web服务器。现在PHP5.5版本已经将fpm作为内部模块支持了。在这种情况下,Nginx 负载和php应用之间的通信是在传输层的,二者之间使用socket进行通信。当然了,这需要fpm服务的支持。
Nginx设置
首先对Nginx(192.168.5.111)进行设置,编辑nginx.conf配置文件
http{
……
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-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数据库等。总之最适合自己的就是最优的。希望本文对大家有所帮助。
mysql集群session_PHP集群session共享相关推荐
- Tomcat集群通过redis实现session共享
Tomcat集群通过redis实现session共享 最近在XXX项目上做了tomcat集群的session共享,闲来无事鄙人将整个踩坑的过程粗糙的记录下来,给同学们分享一波,整个过程无硬编码,爽歪歪 ...
- 集群环境下的Session共享
一.Cookie机制和Session机制回顾 1)定义:Session成为"会话",具体是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的 ...
- 使用Tomcat-redis-session-manager来实现Tomcat集群部署中的Session共享
2019独角兽企业重金招聘Python工程师标准>>> 一.工作中因为要使用到Tomcat集群部署,此时就涉及到了Session共享问题,主要有三种解决方案: 1.使用数据库来存储S ...
- 集群间实现Session共享
上一篇,同一tomcat不同项目下session共享方案:http://blog.csdn.net/qinmengdecluntan/article/details/72832648 一.引言 针对企 ...
- Redis解决老项目集群Session共享案例与回顾
老项目突然之间客户要用了而且用户量还不少,后端移动端都需要给升级.第一改进的时候做了移动端与后端的服务分流,这次升级为分布式集群模式.分布式集群模式需要解决Session共享问题和数据一致性分布式锁处 ...
- .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?
前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...
- tomcat集群session共享
在部署cas系统的时候,遇到个问题,在tomcat集群部署cas系统,不能在一边服务器实现了登陆而在另一侧服务器还是没登录的.所以要实现tomcat集群的session的共享,从而实现高可用. 了解到 ...
- 沙洋有几个微服务群_集群 分布式 微服务
转自:https://blog.csdn.net/qq_37788067/article/details/79250623 概念: 集群是个物理形态,分布式是个工作方式. 1.分布式:一个业务分拆多个 ...
- SpringBoot一个依赖搞定Session共享,没有比这更简单的方案了!
作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 上一篇:推荐10个你不得不关注的NB技术公众号 有的人可能会觉得题目有点夸张,其实不夸张,题目没有使用任何修辞手法!认真读完本文,你 ...
最新文章
- java-方法。(新手)
- GDB多进程调试(转)
- 用eclispe远程调试tomcat war包形式
- 离线实时一体化数仓与湖仓一体—云原生大数据平台的持续演进
- Oracle Online Redefinition在线重定义(下)
- 短信通信的几种情况和CMS错误
- C语言操作mysql
- html最小化位置不变,实现DIV相对于浏览器固定位置不变
- DNN的Friendly URL剖析及应用
- 实锤了!Chrome存在严重漏洞!
- 金蝶k3单据编码规则_金蝶K3各单据操作步骤
- 【数据结构导论】考试笔记总结(一)
- 微信开门,给你简单极致的开门体验!
- 计算机猜数vb,vb猜数游戏
- T(n)=2T(n/2)+n=o(nlogn)
- ps打开图片的三种方式 同步部分基本操作方式
- 华为云更换服务器系统,华为云更换服务器系统
- threejs基础下:贴图资源加载与光照
- HTML学生个人网站作业设计:电影网站设计——叮当电影(5页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
- 单页应用 多页应用的区别