版权声明:此文章转载自迹忆
原文地址: http://www.onmpw.com/tm/xwzj/network_144.html
如需转载请联系听云College团队成员阮小乙,邮箱:ruanqy#tingyun.com
集群的概念没有多复杂,其实就是多台电脑为了同一个目标在一起工作。在Web应用中,就是多个服务器提供一个站点的服务。
搭建PHP集群的第一步就是设置负载均衡。首先我们需要三台主机:
Nginx负载:192.166.5.111PHP应用1:192.168.5.112PHP应用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 = Redissession.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数据库等。总之最适合自己的就是最优的。希望本文对大家有所帮助。
想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境