php怎么做php fpm 负载均衡衡

> 博客详情
摘要: PHP高并发高负载系统架构
一、高并发和高负载的约束条件
Web 服务器
二、解决之道——硬件篇
处理能力的提升:部署多颗CPU,选择多核心、具备更高运算频率、更大高速缓存的CPU;
处理能力的提升最直接的反应在于Web请求的处理效率和PHP程序的执行效率。
内存带宽与容量:更大的内存带宽和容量;
内存带宽与容量的提升最直接的反应在于应对数据库大量的数据交换。
磁盘搜索与I/O能力:选择更高的转速、更大的硬盘缓存、组件磁盘阵列(RAID);
磁盘搜索与I/O能力的提升最直接反应在于数据库大量的查询和读写以及文件的读写。
网络带宽的提升可考虑的因素包括: 更大带宽、多线路接入、独享带宽;
服务器在大负载的情况下,对网络带宽的占用是十分可观的。
策略:硬件设施是应对大负载的基础,硬件设施的投入可根据实际压力和预算量力而行。
三、解决之道——部署篇
3.1、服务器分离
32、数据库集群和库表散列
3.4、负载均衡
1)、DNS轮循
2)代理服务器负载均衡
3)地址转换网关负载均衡
4)NAT负载均衡
5)反向代理负载均衡
6)混合型负载均衡
策略:根据硬件投入和业务需求,选择合理的部署方案。
部署方案1:
适用范围:静态内容为主体的网站和应用系统;对系统安全要求较高的网站和应用系统。
Main :主服务器
承载程序的主体运行压力,处理网站或应用系统中的动态请求;
将静态页面推送至多个发布服务器;
将附件文件推送至文件服务器;
安全要求较高,以静态为主的网站,可将服务器置于内网屏蔽外网的访问。
DB Server:数据库服务器
承载数据库读写压力;
只与主服务器进行数据量交换,屏蔽外网访问。
File/ Server:文件/视频服务器
承载系统中占用系统资源和带宽资源较大的数据流;
作为大附件的存储和读写仓库;
作为视频服务器将具备视频自动处理能力。
发布服务器组:
只负责静态页面的发布,承载绝大多数的Web请求;
通过Nginx进行负载均衡部署。
部署方案2:
适用范围:以动态交互内容为主体的网站或应用系统;负载压力较大,且预算比较充足的网站或应用系统;
Web服务器组:
Web服务无主从关系,属平行冗余设计;
通过前端负载均衡设备或Nginx反向代理实现负载均衡;
划分专用文件服务器/视频服务器有效分离轻/重总线;
每台Web服务器可通过DEC可实现连接所有数据库,同时划分主从。
数据库服务器组:
相对均衡的承载数据库读写压力;
通过数据库物理文件的映射实现多数据库的数据同步。
共享磁盘/磁盘阵列
将用于数据物理文件的统一读写
用于大型附件的存储仓库
通过自身物理磁盘的均衡和冗余,确保整体系统的IO效率和数据安全;
方案特性:
通过前端负载均衡,合理分配Web压力;
通过文件/视频服务器与常规Web服务器的分离,合理分配轻重数据流;
通过数据库服务器组,合理分配数据库IO压力;
每台Web服务器通常只连接一台数据库服务器,通过DEC的心跳检测,可在极短时间内自动切换至冗余数据库服务器;
磁盘阵列的引入,大幅提升系统IO效率的同时,极大增强了数据安全性。
四、解决之道——环境篇
41、操作系统
操作系统的选择,关注点在于
o是否适应于搭建SiteEngine所需要的环境程序?
o系统本身占用的资源比;
o系统安全性;
o系统是否易于操作?
策略:我们选择FreeBSD,而且是最小化安装以后的FreeBSD。
4.2、Web服务器
Web服务器很大一部分资源占用来自于处理Web请求,通常情况下这也就是Apache产生的压力,Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上。
在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx (“engine x”) 是俄罗斯人编写的一款高性能的 HTTP 和反向代理服务器。在国内,已经有新浪、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、 频道使用 Nginx 服务器。
Nginx的优势:
高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
策略:相对于老牌的Apache,我们选择Lighttpd和Nginx这些具有更小的资源占用率和更高的负载能力的web服务器。
4.3、Mysql
MySQL本身具备了很强的负载能力,MySQL优化是一项很复杂的工作,因为这最终需要对系统优化的很好理解。数据库工作就是大量的、短时的查询 和读写,除了程序开发时需要注意建立索引、提高查询效率等软件开发技巧之外,从硬件设施的角度影响MySQL执行效率最主要来自于磁盘搜索、磁盘IO水 平、CPU周期、内存带宽。
根据服务器上的硬件和软件条件进行MySQl优化。MySQL优化的核心在于系统资源的分配,这不等于无限制的给MySQL分配更多的资源。
在MySQL配置文件中最值得关注的参数:
l&&&&&&&& 改变索引缓冲区长度(key_buffer)
l&&&&&&&& 改变表长(read_buffer_size)
l&&&&&&&& 设定打开表的数目的最大值(table_cache)
l&&&&&&&& 对缓长查询设定一个时间限制(long_query_time)
如果条件允许 ,一般MySQL服务器安装在Linux操作系统中,而不是安装在FreeBSD中。
策略: MySQL优化需要根据业务系统的数据库读写特性和服务器硬件配置,制定不同的优化方案,并且可以根据需要部署MySQL的主从结构。
1、加载尽可能少的模块;
2、安装加速器(都是通过缓存php代码预编译的结果和数据库结果来提高php代码的执行速度)
eAccelerator
eAccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。
Alternative PHP Cache(APC)是 PHP 的一个免费公开的优化代码缓存。它用来提供免费,公开并且强健的架构来缓存和优化 PHP 的中间代码。
memcache是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。主要机制是通过在内存里维护一个统 一的巨大的hash表,Memcache能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等
策略: 为PHP安装加速器。
4.5、代理服务器(缓存服务器)
Squid Cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务 器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络 安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
策略:安装Squid 反向代理服务器,能够大幅度提高服务器效率。
5、解决之道——SiteEngine篇
SiteEngine(网站引擎)是指针对应用系统程序的架构设计的一套程序化语言框架。目前最主流的是基于多层架构,分级处理,模块化设计的框架,支持mvc动态页面展示,核心程序分层处理,增加静态化引擎,借助ajax 异步高效处理请求。
6、解决之道——测试篇
6.1、测试方法
6.2、测试用例
6.3、压力测试
压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计 算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽等。一般用并发来做压力测试。
压力测试工具:webbench,ApacheBench等
6.4、漏洞测试
在我们的系统中漏洞主要包括:sql注入漏洞,xss跨站脚本攻击等。安全方面还包括系统软件,如操作系统漏洞,mysql、apache等的漏洞,一般可以通过升级来解决。
支付宝支付
微信扫码支付
打赏金额: ¥
已支付成功
打赏金额: ¥负载均衡PHP应用(实现WordPress) | Linux运维部落
您还未登录,请登录后再进行相关操作!
400-080-6560
在线咨询:
工作时间:周一至周五,9:30-18:30,节假日同时也值班51CTO旗下网站
大型Web应用运行时 PHP负载均衡指南
如今,“大型服务器”模式的时代已经过去,我们在运行一些大的Web应用时候,可以使用各种各样的负载均衡技术,这是一种更可行的方法,将使硬件成本降至最低。
作者:佚名来源:maoegg| 08:46
过去当运行一个大的web应用时候意味着需要运行一个大型的。因为你的应用吸引了大量的用户,你将不得不在你的服务器里增加更多的内存和处理器。今天,&大型服务器&模式已经过去,取而代之的是大量的小服务器,使用各种各样的负载均衡技术。
&更多小服务器&的优势超过过去的&大型服务器&模式体现在两个方面:
1. 如果服务器宕机,那么负载均衡系统将停止请求到宕机的服务器,转而分发负载到其他正常运行的服务器上。
2. 扩展你的服务器更加容易。你要做的仅仅是加入新的服务器到负载均衡系统。不需要中断你的应用运行。
所以,把握住这个机会。当然,代价就是这要求你的应用开发时增加一点复杂度。这就是本文要覆盖的内容。
这时你可能对自己说:&但是我怎么知道我正在使用负载均衡呢?&。最诚实的回答是,如果你正在问这个问题,那么答案是你多半没有在使用负载均衡系统并且你的系统不需要考虑这个问题。大多数情况,当应用成长足够大的规模时,负载均衡就需要明确提出和设置了。然而,我也偶尔看见虚拟主机公司为客户的应用做这个负载均衡,或者像下面描述的那样要自己来做。
注意,我一直提&web应用&而不是website,这是想区分&web应用&是那些复杂的站点往往涉及服务器端编程和数据库,而不是website那样只显示简单的静态内容。
1. PHP文件
第一个问题是,如果你有大量的小型服务器,你怎么把你的php文件上传到所有的服务器上?有如下的方法供你参考:
◆分别上传所有的文件到每一个服务器 , 这种方法带来的问题是:想像一下你有20个服务器,那么上传过程中这将很容易导致错误,并且更新时极有可能导致不同服务器上有不同版本的文件。
◆使用 &rsync & (或类似的软件) . 这样的工具能同步本地目录和多个远程主机目录上的文件。
◆使用版本控制软件(如subversion ) . 这是我最喜欢的方法。用它可以很好地维护我得代码,当发布我的应用时,可以在每一个服务器上运行svn update命令同步。这种方法也使切换服务器得代码到过去的某一个版本更加容易。
◆使用一个文件服务器(你可能发现NFS 非常适合做这件事情). 这种方式是使用一个文件服务器来存放你的web应用. 当然,如果你的文件服务器宕机,那么多所有你的站点将不能使用。这时,你就需要花费更多的开支来恢复它。
选择哪种方式依赖于你的需求和你掌握的技能。如果你使用版本控制系统,那么你可能得计划一个方法如果同时执行一个更新命令更新所有服务器上的代码。然而,如果使用文件服务器,你就要实现一些失败恢复机制,防止万一服务器宕机导致请求失败。
2. 文件上传
当只有一台服务器时,文件上传不是一个问题。但是当我们有多台服务器时,那么上传的文件应该怎么存放呢?上传文件的问题和跨服务器php文件存储是类似的。下面是几种可能的方案:
◆把文件存储到数据库中。大多数数据允许存储二进制数据。当你请求文件下载时,访问数据把二进制数据和相应的文件名和类型输出给用户。在使用这种方案前应该考虑数据库怎样存储你的文件。该方法的问题在于如果数据库服务器宕机将使文件不可用。
◆在一个文件服务器上存储上传的文件 . 与前面的介绍一样,你要安装一个文件服务器让所有web服务器共享,把所有上传的文件上传到这里,上传后所有的web服务器就都可以使用它。但是,如果文件服务器宕机,那么可能发生图像文件下载中断。
◆设计你自己的上传机制传输文件到服务器到每一个服务器 . 这个方法没有单个文件服务器或者数据库方案的缺陷,但是将增加你代码的复杂度。例如,如果上传到多个服务器过程中,服务器宕机,你要怎么处理?
用数据库存储上传文件但是设计一个文件缓存机制是一个不错的方案。当服务器接收一个文件下载请求时,首先检查缓存系统中是否有该文件,如果发现那么从缓存系统下载,否则从数据库读取并把它缓存到文件系统中。
3. 会话(Sessions)
如果你熟悉php的session 处理,你将可能知道默认情况下,它存储session数据在服务器的临时文件里。而且,这个文件仅仅在你请求处理的那个服务器上,但是接下来的请求可能被另外一个服务器处理,这将在另一个服务器上生成新的session。这导致session频繁地不被识别,如登录用户总是要求重新登录。
我推荐的方案是,要么重新php内建的session处理机制存储session数据到数据库,或者实现你自己的机制保证发送一个用户的请求到同一台服务器。
4. 配置(Configuration)
尽管这个话题不是和php特别相关,我感觉还是有必要提及。当运行集群服务器时,用某种方法保持服务器之间的配置文件同步是一个好主意。如果配置文件不一致,可能导致一些非常奇怪的断断续续的行为导致很难排查这些问题。
我推荐使用版本控制系统单独管理他们。这样你可以为不同的项目安装存储不同的php配置文件,也可以保持所有服务器配置文件同步。
5. 日志(Logging)
像配置问题一样,logging不是仅仅和php相关。但是对于保持服务器健康运行它仍然是非常重要的。没有正确的logging系统,你怎么知道如果PHP代码开始产生错误(在系统正式运行时,你总是关闭display_errors 设置,不是吗?)
有几种方法你可以实现logging:
1. 在每一个服务器上记录日志。 这是最简单的方法。每一个机器仅仅记录一个文件。好处是简单,可能只要很少的配置。但是,随着服务器数量的增多,监控每台服务器上的日志文件将变得非常困难。
2. 记录日志到一个共享 这种方法每一个服务器仍然有这个日志文件,但是他们通过共享机制被存储在一个中央文件服务器上,这将使监控日志变得更简单。该方案的问题在于,如果文件服务器不可用将导致一个简单的日志不能写入问题最终导致整个应用崩溃。
3. 记录日志到logging服务器 你可以使用一个logging软件,如syslog 来把所有的日志写到一个中央服务器。尽管这个方法要求更多的配置,但是他也提供了最健壮的方案。
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
热点头条关注头条头条
24H热文一周话题本月最赞
讲师:97060人学习过
讲师:132069人学习过
讲师:91926人学习过
精选博文论坛热帖下载排行
本书结合JSP和Servlet的最新规范,从基本的语法和规范入手,以经验为后盾,以实用为目标,以实例为导向,以实践为指导,深入浅出地讲解了JS...
订阅51CTO邮刊Hi,亲爱的小伙伴!
欢迎来到php1.cn社区!
Tools Online | 在线开发工具
RankList | 热门文章
扫码关注 PHP1 官方微信号
Recommend | 推荐阅读
PHP1.CN | 中国最专业的PHP中文社区 |
Copyright (C) 1998 - 2020 PHP1.CN. All Rights Reserved
PHP1.CN 第一PHP社区web网站负载均衡是解决大流量网站的办法。我开始摸索着如何实现nginx下的php站点的负载均衡。
最低要求3台主机。其中一台做前端,两台做后端。所有请求都是通过前端,然后前端根据后端服务器的负载情况进行请求的分发,最后再通过前端返回数据给访问者。
前端要做的就是反向代理(具体这个含义,说实话,我一直没理解太透彻。。)。主要有两步:一是设置后端的所有服务器地址。二是设置前端所截断、获取的请求要转向的后端组,其实也就是第一步中的设置值。
在nginx.conf中设置所有后端服务器,同时起一个名字。通常设置为backend。pustream应该放在http域块中。
upstream backend {
#ip_#请求分发方式
server backend1.shizhiyou.com weight=5;
server backend2.shizhiyou.com weight=2;
server backend3.shizhiyou.com weight=1;
在server域块中,添加我们要截断的请求,进行转发给backend组。在这里我们设置为截断所有请请求。
location / {
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
#proxy_set_header Host $
#proxy_set_header X-Real-IP $remote_
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
#设置反向代理的地址
proxy_pass http:// #这里是重点!

我要回帖

更多关于 php负载均衡 的文章

 

随机推荐