찾다

版权声明:此文章转载自迹忆

原文地址: 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数据库等。总之最适合自己的就是最优的。希望本文对大家有所帮助。

想阅读更多技术文章,请访问听云技术博客,访问听云官方网站感受更多应用性能优化魔力。

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
PHP 로깅 : PHP 로그 분석을위한 모범 사례PHP 로깅 : PHP 로그 분석을위한 모범 사례Mar 10, 2025 pm 02:32 PM

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Laravel의 플래시 세션 데이터로 작업합니다Laravel의 플래시 세션 데이터로 작업합니다Mar 12, 2025 pm 05:08 PM

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법Mar 14, 2025 am 11:42 AM

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel 테스트에서 단순화 된 HTTP 응답 조롱Laravel 테스트에서 단순화 된 HTTP 응답 조롱Mar 12, 2025 pm 05:09 PM

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> ​​'Hello World', 'github.com'=> ​​[ 'foo'=> 'bar'], 'forge.laravel.com'=>

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트Mar 13, 2025 pm 12:08 PM

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

PHP에서 늦은 정적 결합의 개념을 설명하십시오.PHP에서 늦은 정적 결합의 개념을 설명하십시오.Mar 21, 2025 pm 01:33 PM

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법.프레임 워크 사용자 정의/확장 : 사용자 정의 기능을 추가하는 방법.Mar 28, 2025 pm 05:12 PM

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구