基于Nginx的Web服务器负载均衡策略改进与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Network World •
网络天地
Electronic Technology & Software Engineering 电子技术与软件工程• 23
【关键词】Nginx Web 服务器 负载均衡 性能优化
1 Nginx国内外研究现状
1.1 Nginx研究现状
Nginx 虽然开发的时间不长,但是由于其低内存消耗、高稳定性和代码开源,很快受到许多公司和开发人员的喜爱,大量的研究人员对Nginx 进行研究。
ngxpagespeed 模块是谷歌基于Nginx 开发的,大大提高了网页的加载速度,并且降低了用户访问延迟。
Nginx 在中国也有大量用户和研究人员,并开发了不同的项目。比如,Tengine 是由阿里巴巴基于Nginx 开发的,它在Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。1.2 负载均衡研究现状
负载均衡多年来一直是研究的热点,并且不断有新的算法被提出。负载均衡不仅在同构集群系统和异构集群系统中得到广泛应用,而且在分布式系统和云系统中也得到了广泛应用。通常,人们用节点的负载与性能比来衡量负载权重,值越大,权重越大。
2 Nginx负载均衡的研究
Nginx 有多种负载均衡算法,负载均衡的主要目的是将大量并发请求合理地分布到集群中的服务器上,根据算法是否内置,分为内置算法和扩展算法两种类型,加权轮询算法就属于内置算法,而一致性哈希算法则属于扩展算法。
2.1 加权轮询算法
如果没有配置任何负载均衡算法时,负载均衡算法会默认是加权轮询算法。
基于Nginx 的Web 服务器负载均衡策略改进与实现
文/郝淑惠
下文是Nginx 中加权轮询算法的部分配
置:
http{
upstream cluster{
server 192.168.1.2 weight=5;server 192.168.1.3 weight=3; server 192.168.1.4 weight=1;}...
location/{
proxy_set_header X-Real-IP $remote_addr; //返回真实IP
proxy_pass http://cluster; //代理指向cluster
}
加权轮询算法存在的缺点是:加权轮询算法会根据配置经验进行权重配置,服务器的真实性能难以得到体现,并且由于客户端对每个请求的处理时间不同,会产生不均衡问题。当某个服务器的权重相对较大,并且正在用时较长的用户请求时,假如又有新的请求需要处理,由于该服务器的权重相对较大,新的请求会被分配给该服务器。该服务器会因为处理的请求过多而超载,其他服务器却没有处理请求。2.2 一致性哈希算法
一致性哈希算法就是将服务器地址按照一定规则(比如路由分配情况,服务器承载服务种类等)分配到一张哈希表中。当有新的数据请求时,会根据哈希表中的顺序,选择最近的一个服务器来处理该请求。
优点是,所选服务器是缓存服务器时,可以快速找到存储该类型数据的服务器。缺点是,一般的哈希算法是根据路由状况生成哈希表的,当该服务器不是缓存服务器时,如果遇到一个IP 段出现大量请求,则会将这些请求都分配到同一台服务器。
3 Nginx性能调优
Nginx 支持正则表达式,是一款配置灵活
的高性能Web 服务器。在对Nginx 性能进行调优时,可以一次只改一个配置项,如果更改后性能没有变化,就改回原来的值。3.1 全局块
# user nobody nobody;worker_processes 2;# error_log logs/error.log
# error_log logs/error.log notice # error_log logs/error.log info # pid logs/nginx.pid
worker_rlimit_nofile 1024;
在全局块中,需要配置一些项。以下是一些需要特别关注的几个:
(1)设置创建的工作进程数。Nginx 可以运行多个工作进程,每个都能处理大量连接。Nginx 通过主进程创建工作进程。具体的数值设置由Nginx 配置文件中的worker_connectons
决定。设置的值太低,可能导致无法有效地处理高并发请求。如果设置的值太高,将导致工作进程之间的连续切换,增加系统损耗。
(2)每个工作进程设置固定的CPU 内核。这样做可以避免同一个工作进程选择不同的CPU 内核。
(3)设置nginx 进程可以打开的最大文件数。如果设置的数值太低,当同时的连接数过多时,将会出现“打开的文件太多”问题。
3.2 Events 块event{
worker_connections 1024;multi_accept on;useepoll;}
events 块为Nginx 中的连接处理进行相应的设置。
(1)设置工作进程的最大连接数。这一数值的设置应该与全局块中提到的值相同。
(2)设置事件驱动模型。不同操作系统的事件驱动模型不同,因此该参数的设定一般根据操作系统来决定。如果是linux2.6+,使用epoll ;如果是BSD ,如Mac ,使用Kqueue 。3.3 http块
作为Web 服务器,http 块是Nginx 最核心的一个模块,配置项也比较多,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可。3.4 其他方面
有关Nginx 性能调优,还有很多内容,比如,启用缓存可以显著地降低响应时间,同时能显著减轻后端服务器的负载;压缩响应可以大大减小响应的大小,减少带宽占用。4 总结
随着国内外研究人员对Nginx 的深入研究,Nginx 的稳定性、安全性和高效性在未来将会大大提高,并且会给用户带来更好的体验。
参考文献
[1]王永辉.基于Nginx 高性能Web 服务器性
能优化与负载均衡的改进与实现[D].电子科技大学,2015.
[2]覃川.基于Nginx 的Web 服务器负载
均衡策略改进与实现[D].西南交通大学,2017.
作者简介
郝淑惠(1971-),女,内蒙古自治区人。大学本科学历。实验师。
作者单位
河套学院网络信息中心 内蒙古自治区巴彦淖尔市 015000
●本论文系内蒙古自治区高等学校科学研究项目研究成果,项目名称《负载均衡方法研究及在Sugon cvm 虚拟化平台上的实现》,项目编号NJZY17385。