一种具有Nginx负载均衡技术的系统
文献发布时间:2023-06-19 11:49:09
技术领域
本发明涉及互联网技术领域,特别是涉及一种具有Nginx负载均衡技术的系统。
背景技术
近年来,随着Internet的飞速发展,对网络服务的需求也在增长,导致页面加载速度太慢,并且在并发数据请求量大的情况下网站没有响应,因此已经成网站管理员要解决的问题。当单个服务器负载太大时,通常的方法是升级主机。但是,单个主机的能力有限,而高性能主机则很昂贵。另外,服务器集群成本低廉,可扩展性好,已经成为解决此问题的有效方法。集群由彼此独立的一组计算机组成,这些计算机通过高速网络互连并在单个系统模式下进行管理。负载均衡系统是服务器集群的核心部分,负载均衡算法是传递用户请求的关键。
现有的负载均衡算法可以分为两类:静态和动态。静态负载均衡算法以固定的概率分配任务,这些任务不考虑服务器的状态信息;动态均衡算法根据服务器的实时负载状态信息分配任务。动态均衡算法包括最小连接法,加权最小连接法,基于位置的最小连接法。
在实际应用中,影响客户端访问频率,节点网络负载的因素很多,难以预测。如果系统长时间运行,则无法及时纠正负载,因此负载均衡的效果不好。大型企业一般通过大幅度提升服务器的硬件性能来处理Web服务器高并发这种问题。然而昂贵的硬件设备使得一些小型企业望而却步,小型企业从软件角度出发,通过优化应用系统的架构设计,采用集群系统来解决大量的Web访问请求,满足客户需求。
发明内容
为了解决以上问题,通过比较静态负载均衡和动态负载均衡算法的优缺点,本发明提供了一种具有Nginx负载均衡技术的系统,提出一种动态负载均衡算法,该算法可以实时收集服务器负载信息并动态调整权重。
本发明的目的可以通过以下技术方案实现:
一种具有Nginx负载均衡技术的系统,其特征在于:包括Nginx服务器和由若干个Web服务器组成的Web服务器集群,用户向Nginx服务器发出请求后,Nginx服务器接受到来自客户端的请求后收集每个Web服务器的负载信息并将其存储,并进行信息处理,选择出最适合的Web服务器;
所述的Nginx服务器接收并处理用户发起的动态请求,包括负载信息收集模块和信息处理模块。
所述的负载信息收集模块,周期性接收并收集各个Web服务器的负载信息并将其存储在数据库服务器中,所述的负载信息包括CPU利用率、内存利用率、网络利用率和磁盘利用率的指标。所述的数据库服务器为缓存数据库Redis。
所述的信息处理模块,从负载信息收集模块中获取每个web服务器的负载信息,通过预先配置的动态负载均衡算法,计算各Web服务器的权重。
所述的动态负载均衡算法是在Nginx加权轮询算法的研究基础上提出的一种动态自适应负载均衡算法。具体实现过程如下:
令n个指标为X
服务器j的第i项性能指标的比例为
将C
当web服务器集群处理大量的HTTP请求时,由于请求中分配的请求量和需要处理的数据量很大,一些节点会处于高负载状态,一些节点会处于低负载状态,这使得web服务器集群的性能不能得到充分利用。有必要实时监控web服务器节点的负载,并调整节点权重。但是,计算节点权重往往会消耗太多的计算机资源,因此使用下面的公式来计算当前服务器节点的负载。
U
U
F
通过权值调整,改善了服务器节点负载不平衡的情况。但是,加权的不平衡通常是由短时间内的高并发访问引起的。因此,当不存在高负载节点时,服务器节点权重将逐渐调整为初始权重。
所述的Web服务器集群,由多个web服务器组成,用于处理来自客户端的不同的请求。
本发明的有益效果:
(1)加入Redis数据库作为负载信息的缓存,将缓存记录放到内存中,加快了查询速度。
(2)新的动态负载均衡算法获取服务器CPU,磁盘IO,网络带宽和内存,计算权重,选出相对空闲的服务器进行下一步判断。
(3)所述的动态负载均衡算法是一种基于Nginx负载均衡的动态加权循环算法。通过比较静态负载均衡和动态负载均衡算法,对基础的加权循环算法进行改进,使得负载均衡效果更好。
附图说明
图1是由本发明专利的Nginx服务器以及Web服务器集群组成的系统框架图。
图2是Nginx服务器处理客户端动态请求流程图。
图3是动态负载均衡算法流程图。
具体实施方式
下面结合附图1~图3对本发明作进一步描述。
一种具有Nginx负载均衡技术的系统,包括Nginx服务器和Web服务器集群;
所述的Nginx服务器接收并处理用户发起的动态请求,包括负载信息收集模块和信息处理模块。
所述的负载信息收集模块,周期性接收并收集各个Web服务器的负载信息并将其存储在数据库服务器中,所述的负载信息包括CPU利用率、内存利用率、网络利用率和磁盘利用率的指标。所述的数据库服务器为缓存数据库Redis。
所述的信息处理模块,从负载信息收集模块中获取每个web服务器的负载信息,通过预先配置的动态负载均衡算法,计算各Web服务器的权重。
所述的Web服务器集群,由多个web服务器组成,用于处理来自客户端的不同的请求。
本发明实现的动态负载均衡算法,步骤如下:
S1、当Nginx收到客户端的动态请求时,会根据当前各个业务服务器的权重进行任务分配,将请求发送给权重最大即处理能力最强的业务服务器节点,以保证请求能够有效地得到处理。
S2、Nginx服务器启动后,Nginx中的负载信息收集模块会周期性读取各个业务服务器的负载信息,并将数据存储在数据库服务器中,由信息处理模块对获取到的负载信息进行权重计算,并将处理的结果发送给Nginx服务器。
S3、Nginx服务器收到信息处理模块的反馈信息后,会根据预先设置的动态负载均衡算法做出相应的处理,若反馈信息中要求更新业务服务器节点的当前权重,则对该服务器节点的权重进行重新赋值。
所述步骤S1中,Nginx处理客户端请求的流程如图2所示。当客户端向服务器发起动态请求后,Nginx服务器首先比较该服务器集群中各个节点的权重,将请求发送给权重最大的服务器节点。若请求发送给服务器节点成功,则返回客户端所需的结果;若请求发送给服务器节点失败,且重复发送失败的次数大于20次,则Nginx服务器不再向该服务器发送请求。
所述的步骤S3中,所述的动态负载均衡算法如图三所示。新的动态负载均衡算法是在原有Nginx加权轮询算法的基础上,根据各个业务服务器节点的运行状态,对其负载均衡的权重进行重新赋值,防止各节点出现过载问题。同时,为避免出现频繁更新权重而导致的资源浪费问题,此负载均衡算法中通过计算服务器节点的负载,将计算所得的负载与阈值进行比较,判断负载情况。当业务服务器节点的处于低负载或高负载情况下,Nginx服务器才会对该节点的权值进行更新。
本发明的具体实施步骤为:
(1)初始化Nginx服务器,并为各业务服务器节点赋初始权值;
(2)当Nginx服务器收到客户端的请求后,将请求发送给权值最大的业务服务器;
(3)Nginx中的负载信息收集模块会周期性读取各个业务Web服务器的负载信息,并将数据存储在数据库服务器中,由信息处理模块对获取到的负载信息进行权重计算,并将处理的结果发送给Nginx服务器。
(4)Nginx收到反馈信息后,对各业务Web服务器的权值做出相应的处理。
- 一种具有Nginx负载均衡技术的系统
- 一种具有Web负载均衡技术的系统及方法