文档库 最新最全的文档下载
当前位置:文档库 › 使用高性能Web服务器Nginx实现开源负载均衡

使用高性能Web服务器Nginx实现开源负载均衡

使用高性能Web服务器Nginx实现开源负载均衡
使用高性能Web服务器Nginx实现开源负载均衡

使用高性能Web服务器Nginx实现开源负载均衡

林丽丽

(莆田市委党校,福建莆田 351100)

【摘 要】Internet的快速增长使网络服务器随着业务量的提高、访问量和数据流量的快速增长,服务器的负载均衡技术就

成为建立一个高负载Web站点的关键性技术。使用开源服务器软件Nginx实现负载均衡对中小心网站是不错的选择,对于大型

网站也是硬件负载均衡器的有力补充。文章就Nginx负载均衡的优点和适用环境进行了阐述,并对实现负载均衡的关键性配置

进行了简单的说明。

【关键词】Nginx;负载均衡;负载均衡算法;反向代理

【中图分类号】TP368.5 【文献标识码】A 【文章编号】1008-1151(2010)07-0037-02

Internet的快速增长使多媒体网络服务器,特别是Web 服务器,面对的访问者数量快速增加,网络服务器需要具备提供大量并发访问服务的能力。对于提供大负载Web服务的服务器来讲,CPU、I/O处理能力很快会成为瓶颈。简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的,尤其是网络请求具有突发性,当某些重大事件发生时,网络访问就会急剧上升,从而造成网络瓶颈,必须采用多台服务器提供网络服务,并将网络请求分配给这些服务器分担,才能提供处理大量并发服务的能力,因此服务器的负载均衡技术就成为建立一个高负载Web站点的关键性技术。

(一)Nginx及负载均衡介绍

1.高性能Web服务器Ngnix

Nginx (“Engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 已经在俄罗斯最大的门户网站── Rambler Media(www.rambler.ru)上运行了4年多时间,俄罗斯超过20%的虚拟主机平台采用Nginx作为反向代理服务器。在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道使用 Nginx 服务器。Igor 将源代码以类BSD许可证的形式发布,Nginx因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

2.负载均衡介绍

负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

负载均衡可以通过软件实现也可以通过硬件实现,软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。而硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备我们通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。一般而言,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵,一台F5 BIG-IP等四/七层负载均衡交换机的价格在十几万到上百万。

现代负载均衡技术通常操作于网络的第四层或第七层。第四层负载均衡(NAT负载均衡)将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次 TCP 连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。

(二)Nginx负载均衡优点及适用环境

1.Nginx负载均衡优点

Nginx负均衡实现比较简单,可配置性很强,可以按URL 做负载均衡,默认对后端有健康检查的能力。后端机器少的情况下(少于10台)负载均衡能力表现好。其优点主要有:(1)功能强大,支持高并发连接,内存消耗少:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数,且在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。

(2)成本低廉:Nginx为开源软件,可以免费使用。

(3)Nginx工作在网络的7层,所以它可以针对Http 应用本身来做分流策略,比如针对域名、目录结构等进行分流,可以实现多种分配策略,如:可以实现IP hash等分配策略。

第七层负载均衡有着突出的优点,主要表现在如下几个方面:

1)通过对HTTP报头的检查,可以检测出HTTP400、500和600系列的错误信息,因而能透明地将连接请求重新定向到另一台服务器,避免应用层故障。

2)可根据流经的数据类型(如判断数据包是图像文件、压缩文件或多媒体文件格式等),把数据流量引向相应内容的服务器来处理,增加系统性能。

3)能根据连接请求的类型,如是普通文本、图象等静态

【收稿日期】2010-04-13

【作者简介】林丽丽(1977-),女,福建莆田人,莆田市委党校讲师,研究方向为计算机应用。

- 37 -

文档请求,还是Asp、CGI等的动态文档请求,把相应的请求引向相应的服务器来处理,提高系统的性能及安全性。

(4)Nginx对网络的依赖较小,理论上只要ping得通,网页访问正常,Nginx就能连得通,Nginx同时还能区分内外网,如果是同时拥有内外网的节点,就相当于单机拥有了备份线路

(5)Nginx安装和配置比较简单,后端转向与业务配置分离,非常灵活,配置文件非常简单,风格跟程序一样通俗易懂。测试起来也很方便,因为它基本能把错误用日志打印出来。

(6)Nginx能承受很高负载且稳定,用于反向代理,宕机的概率微乎其微。

(7)Nginx可以检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点。内置的健康检查功能:具有容灾冗余功能,可以针对后端返回的情况判断,如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。

(8)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

2.Nginx负载均衡的适用环境

Nginx工作在网络的7层,由于第七层负载均衡受到其所支持的协议限制(一般只有Http),并且检查HTTP报头会占用大量的系统资源,势必会影响到系统的性能,在大量连接请求的情况下,负载均衡设备自身容易成为网络整体性能的瓶颈。因此,用Ngnix来做负载均衡比较适合于10台以下服务器的网站,当然,如果网站的流量并不是很大(日PV<1000万),即使机器也不少,仍可以考虑用Nginx做负载均衡。 此外,对于有资金购买四/七层负载均衡交换机的大型网站,Nginx也有用武之地,由于大型网站的四/七层交换机承担的并发数非常高,而内容转发规则等七层交换业务,通常用不到负载均衡交换机(如F5 BIG-IP)的四层硬件芯片,却极大地消耗了F5的CPU和内存资源,成为高并发应用的制约条件。而Nginx的出现,成为了F5 BIG-IP七层交换的有力补充。

(三)使用Nginx 实施负载均衡的方法

1.负载均衡实施要素

负载均衡方案应是在网站建设初期就应考虑的问题,不过有时随着访问流量的爆炸性增长,超出决策者的意料,这也就成为不得不面对的问题。当我们在引入某种负载均衡方案乃至具体实施时,像其他的许多方案一样,首先是确定当前及将来的应用需求,然后在代价与收效之间做出权衡。负载均衡策略的优劣及其实现的难易程度有两个关键因素:一是负载均衡算法,二是对网络系统状况的检测方式和能力。

考虑到服务请求的不同类型、服务器的不同处理能力以及随机选择造成的负载分配不均匀等问题,为了更加合理的把负载分配给内部的多个服务器,就需要应用相应的能够正确反映各个服务器处理能力及网络状态的负载均衡算法,而良好的负载均衡策略应有对网络故障、服务器系统故障、应用服务故障的检测方式和能力。

2.Nginx负载均衡的实现

Nginx的负载均衡是一个基于内容和应用的七层交换负载均衡,是以反向代理服务器方式实现负载均衡。因此使用Nginx实现服务器负载均衡的关键在于ngx_http_upstream _hash_module模块的使用和设置Nginx反向代理配置。

(1)Nginx的upstream模块所支持负载均衡的算法: 1)默认的方式是轮询,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除。

2)权重轮询均衡:可以指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。

3)每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,在有些应用情况下,需要将来自同一客户端的所有请求都分配给同一台服务器去负担,例如服务器将客户端注册、购物等服务请求信息保存的本地数据库的情况下,把客户端的子请求分配给同一台服务器来处理就显的至关重要了。

4)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

在nginx.conf配置文件中,用upstream指令定义一组(以4台服务器为例)负载均衡后端服务器池:

upstream servername {

server 192.168.1.10:80 weight=1 max_fails=3 fail_timeout=60s;

server 192.168.1.11:80 weight=1 max_fails=3 fail_timeout=60s;

server 192.168.1.12:80 weight=1 max_fails=3 fail_timeout=60s;

server 192.168.1.13:80 weight=1 max_fails=3 fail_timeout=60s;

}

其中,servername 是服务器组名;Weight:设置服务器的权重,默认值是1,权重值越大那么该服务器被访问到的几率就越大;max_fails和fail_timeout :这两个是关联的,如果某台服务器在fail_timeout时间内出现了max_fails次连接失败,那么Nginx就会认为那个服务器已经宕机,从而在fail_timeout时间内不再去查询它。

(2)设置Nginx的反向代理配置

反向代理方式与普通的代理方式有所不同,标准代理方式是客户使用代理访问多个外部Web服务器,反向代理方式是多个客户使用它访问内部Web服务器,使用反向代理服务器可以将请求转发给内部的Web服务器,从而提升静态网页的访问速度。因此可以使用这种技术,让代理服务器将请求均匀转发给多台内部Web服务器之一上,从而达到负载均衡的目的。

使用反向代理的好处是,可以将负载均衡和代理服务器的高速缓存技术结合在一起,提供有益的性能,具备额外的安全性,外部客户不能直接访问真实的服务器。并且实现起来可以实现较好的负载均衡策略,将负载可以非常均衡的分给内部服务器,不会出现负载集中到某个服务器的偶然现象。

在nginx.conf配置文件中,进行反向代理配置:

server{

listen 80;

server_name https://www.wendangku.net/doc/5d15283716.html, *https://www.wendangku.net/doc/5d15283716.html,;

location /

{ (下转第27页)

- 38 -

'定义函数 : 计算总分,班级排名,年级排名

Range("M3").Select

ActiveCell.FormulaR1C1 = "=SUM(RC[-9]:RC[-1])"

Selection.AutoFill Destination:=Range("OFFSET(原数据!$M$3,0,0,COUNTA(原数据!$A:$A)-2,1)"), Type:=xlFillDefault ActiveSheet.Calculate

Range("N3").Select

ActiveCell.FormulaR1C1 = "=SUMPRODUCT((班级=RC[-12])*(总分>RC[-1]))+1"

Selection.AutoFill Destination:=Range("OFFSET(原数据!$N$3,0,0,COUNTA(原数据!$A:$A)-2,1)"), Type:=xlFillDefault Range("O3").Select

ActiveCell.FormulaR1C1 = "=RANK(RC[-2],总分)"

Selection.AutoFill Destination:=Range("OFFSET(原数据!$O$3,0,0,COUNTA(原数据!$A:$A)-2,1)"), Type:=xlFillDefault ActiveSheet.Calculate

Range("OFFSET(原数据!$M$3,0,0,COUNTA(原数据!$A:$A)-2,3)").Select

Selection.Copy

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

End Function

2.成绩排序函数paixu()

Function paixu()

'定义排序函数 : 使成绩按总分降序排列

Range("OFFSET(原数据!$A$2,0,0,COUNTA(原数据!$A:$A)-1,COUNTA(原数据!$A$2:$BB$2))").Sort Key1:=Range("M3"), Order1:=xlDescending, Header:= _ xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

SortMethod:=xlPinYin,

DataOption1:=xlSortNormal

Range("A3").Select

End Function

3.班级排序函数banjipaixu()

Function banjipaixu()

Sheets("原数据").Select

Range("OFFSET(原数据!$A$2,0,0,COUNTA(原数据!$A:$A)-1,COUNTA(原数据!$A$2:$BB$2))").Sort Key1:=Range("b3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

SortMethod:=xlPinYin,

DataOption1:=xlSortNormal

(五)结语

本文选择了教师工作中最常用的成绩管理为例子,以Excel作为数据库,使用VBA自定义函数,全面详细地设计了一个基于Excel VBA的成绩管理系统,实现了基本的成绩查询,且具有基本的成绩分析统计功能,在实际应用中取得了很好的效果。

【参考文献】

[1] 张峋.Excel VBA入门与典型实例[M].清华大学出版社,

2007.8.

[2] (美)汉森.Excel 2003与VBA编程从入门到精通[M].李兆斌,

等译.电子工业出版社,2004.9.

[3] 伍云辉,等.完全手册——Excel VBA办公应用开发详解[M].

电子工业出版社,2008.1.

(上接第38页)

proxy_pass http://servername;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

access_log off;

}

其中:proxy_pass http://servername用于指定反向代理的服务器池; proxy_set_header Host $host当后端Web 服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名;proxy_set_header X-Forwarded-For $remote_addr; 如果后端Web服务器上的程序需要获取用户IP,就从该Header头获取。

3.Nginx负载均衡的双机热备

Nginx处理所有流量受限于机器I/O和配置;本身的Bug 也还是难以避免的;Nginx没有现成的双机热备方案,所以跑在单机上还是风险较大,单机上的事情全都很难说。因此,可以通过KeepAlived来实现Nginx负载均衡的双机热备。正常情况下,两台Nginx负载均衡服务器全部处于活动状态,对外提供服务。通过两台服务器之间的互相检测机制,当主服务器上的检测程序发现自身的Nginx无法访问时,停止绑定虚拟IP,改由备用服务器绑定虚拟IP,同时由主服务器给网关发送Arping包,保证了网关上IP、MAC地址对应关系能够马上更改,能够做到强行接管虚拟IP。

4.在Nginx负载均衡服务器上设置缓存,加快服务器响应速度

Nginx从0.7.48版本开始,支持了类似Squid的缓存功能,缓存把URL及相关组合当作Key,用md5编码哈希后保存。对于修改实时性要求不高的图片、Flash、CSS样式文件、JavaScript文件,可以在Nginx反向代理(负载均衡)服务器上设置缓存,不用每次请求都转发到后端Web服务器,加快了响应速度。同时也可以减少Nginx与后端Web服务器的连接数,提高了Nginx处理性能。

总之,对架设中小型网站的企业,如果没有资金去购买昂贵的四/七层负载均衡交换机,那么可以使用Nginx是不错的七层负载均衡选择,并且可以通过Nginx+Keepalived实现Nginx负载均衡双机互备,任意一台机器发生故障,对方都能够将虚拟IP接管。而对于有资金购买四/七层负载均衡交换机的大型网站,Nginx可以作为F5 BIG-IP等硬件负载均衡交换机七层交换的有力补充。

【参考文献】

[1] 郭欣.构建高性能Web站点[M].电子工业出版社, 2009,8.

[2] 伍云辉.Linux服务器配置与管理指南作[M].清华大学出版

社,2010,1.

[3] 张宴.实战Nginx:取代Apache的高性能Web服务器[M].

电子工业出版社,2010,3.

- 27 -

使用高性能Web服务器Nginx实现开源负载均衡

作者:林丽丽

作者单位:莆田市委党校,福建,莆田,351100

刊名:

大众科技

英文刊名:DAZHONG KEJI

年,卷(期):2010(7)

被引用次数:10次

参考文献(3条)

1.郭欣构建高性能Web站点 2009

2.伍云辉Linux服务器配置与管理指南作 2010

3.张宴实战Nginx:取代Apache的高性能Web服务器 2010

本文读者也读过(4条)

1.田纯青.TIAN Chun-qing利用Nginx实现基于URI的Web负载分配[期刊论文]-现代计算机(专业版)2009(7)

2.茆唯伟.王兴东.孙思慧.MAO Weiwei.WANG Xingdong.SUN Sihui面向在线协同制作的门户系统设计[期刊论文]-电视技术2011,35(9)

3.吴翔毅Nginx在校园网络中的应用研究[期刊论文]-福建电脑2009,25(7)

4.邱振华.苏光诚浅析WEB集群架构解决方案[期刊论文]-福建电脑2010,26(10)

引证文献(10条)

1.宿大东采用Nginx远程访问图书馆内网数字资源[期刊论文]-内蒙古科技与经济 2013(13)

2.车树炎,黄银瑞反向代理技术在高校网站系统中的应用研究[期刊论文]-电脑编程技巧与维护 2013(02)

3.盛文南,宋法奇,刘波云端化“天地图·武进”iOS移动地图软件设计与实现[期刊论文]-现代测绘 2014(01)

4.张雷加快网站访问速度的 Web设计方法探讨[期刊论文]-人民长江 2013(z2)

5.杨虎基于V7平台的服务器负载均衡模块设计与实现[学位论文]硕士 2013

6.朱毅基于O2O的区域服务交易系统的设计与实现[学位论文]硕士 2013

7.姚永明,吕建平基于Android平台的用户管理软件的设计与实现[期刊论文]-西安文理学院学报(自然科学版) 2013(01)

8.聂鹏基于Nginx的云计算访问控制网关的设计与实现[学位论文]硕士 2011

9.李绪木板年画数据资源管理平台的设计与实现[学位论文]硕士 2010

10.朱通网页防盗链方案的研究[学位论文]硕士 2011

引用本文格式:林丽丽使用高性能Web服务器Nginx实现开源负载均衡[期刊论文]-大众科技 2010(7)

相关文档