nginx负载均衡原理,nginx有几种负载方式

nginx有几种负载方式nginx增加负载均衡可以提高服务器的性能和可靠性 。当单台服务器无法满足高并发的请求时,可以通过nginx作为负载均衡器 , 将请求分发到多台服务器上进行处理,从而提高系统的吞吐量和响应速度 。此外,通过负载均衡还可以增加系统的可靠性,当某台服务器宕机时,负载均衡器可以将请求自动转发到其他可用的服务器上,避免了系统的单点故障问题 。
在实际应用中 , nginx可以通过不同的负载均衡算法来实现请求的分发,如轮询、加权轮询、ip_hash等 。同时,nginx还支持动态添加和删除后端服务器,可以根据实际情况动态调整负载均衡策略,从而更好地适应不同的应用场景 。需要注意的是,在增加负载均衡的同时,还需要配置适当的缓存、优化网络传输等技术手段,从而最大程度地发挥负载均衡的优势 。

nginx负载均衡原理,nginx有几种负载方式

文章插图
nginx实现负载均衡部署的模块为一、负载均衡的作用
1、转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力 , 提高系统并发量 。
2、故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉 , 自动将请求发送到其他应用服务器 。
3、恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中 。
二、Nginx实现负载均衡
1、源地址哈希法:根据获取客户端的IP地址 , 通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号 。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时 , 它每次都会映射到同一台后端服务器进行访问 。
2、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载 。
3、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问 。
4、加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同 。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端 。
5、加权随机法:与加权轮询法一样 , 加权随机法也根据后端机器的配置,系统的负载分配不同的权重 。不同的是,它是按照权重随机请求后端服务器,而非顺序 。
6、最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求 , 尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器 。
三、配置说明
四、轮询
五、权重
六、iphash
七、最少链接
八、fair
九、完整代码
十、也可以使用域名
nginx负载均衡原理,nginx有几种负载方式

文章插图
nginx负载均衡是什么意思当一台服务器的单位时间内的访问量越大时,服务器压力就越大 , 大到超过自身承受能力时,服务器就会崩溃 。为了避免服务器崩溃,让用户有更好的体验,通过负载均衡的方式来分担服务器压力 。
建立很多很多服务器,组成一个服务器集群,当用户访问网站时 , 先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,将该访问请求引入该服务器 。
如此以来 , 用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况 。
nginx负载均衡原理,nginx有几种负载方式

文章插图
nginx实现反向代理负载均衡
a、本地使用Windows系统,然后使用VirutalBox安装一个虚拟的Linux系统 。
在本地的Windows系统上分别安装nginx(侦听8080端口)和apache(侦听80端口) 。在虚拟的Linux系统上安装apache(侦听80端口) 。这样相当于拥有了1台nginx在前端作为反向代理服务器;后面有2台apache作为应用程序服务器,可以看作是小型的server cluster 。
b、nginx用来作为反向代理服务器,放置到两台apache之前,作为用户访问的入口 。
Nginx的负载均衡有哪些哈希负载均衡原理
??ngx_http_upstream_hash_module支持普通的hash及一致性hash两种负载均衡算法,默认的是普通的hash来进行负载均衡 。
??nginx 普通的hash算法支持配置http变量值作为hash值计算的key,通过hash计算得出的hash值和总权重的余数作为挑选server的依据;nginx的一致性hash(chash)算法则要复杂一些 。这里会对一致性hash的机制原理作详细的说明 。
一致性hash算法的原理
【nginx负载均衡原理,nginx有几种负载方式】一致性hash用于对hash算法的改进,后端服务器在配置的server的数量发生变化后 , 同一个upstream server接收到的请求会的数量和server数量变化之间会有变化 。尤其是在负载均衡配置的upstream server数量发生增长后 , 造成产生的请求可能会在后端的upstream server中并不均匀,有的upstream server负载很低,有的upstream server负载较高,这样的负载均衡的效果比较差,可能对upstream server造成不良的影响 。由此,产生了一致性hash算法来均衡 。
?? 那么为什么一致性hash算法能改善这种情况呢?这里引用网上资料的一致性hash算法的图例 。
因为对于hash(k)的范围在int范围,所以我们将0~2^32作为一个环 。其步骤为:
1,求出每个服务器的hash(服务器ip)值,将其配置到一个 0~2^n 的圆环上(n通常取32) 。
2,用同样的方法求出待存储对象的主键 hash值,也将其配置到这个圆环上,然后从数据映射到的位置开始顺时针查找,将数据分布到找到的第一个服务器节点上 。
其分布如图:
除了上边的优点,其实还有一个优点:对于热点数据,如果发现node1访问量明显很大,负载高于其他节点,这就说明node1存储的数据是热点数据 。这时候,为了减少node1的负载,我们可以在热点数据位置再加入一个node,用来分担热点数据的压力 。
雪崩效应
接下来我们来看一下,当有节点宕机时会有什么问题 。如下图:
如上图 , 当B节点宕机后 , 原本存储在B节点的k1 , k2将会迁移到节点C上,这可能会导致很大的问题 。如果B上存储的是热点数据,将数据迁移到C节点上,然后C需要承受B+C的数据 , 也承受不?。补伊?。。。。然后继续CD都挂了 。这就造成了雪崩效应 。
上面会造成雪崩效应的原因分析:
如果不存在热点数据的时候,每台机器的承受的压力是M/2(假设每台机器的最高负载能力为M),原本是不会有问题的,但是,这个时候A服务器由于有热点数据挂了 , 然后A的数据迁移至B , 导致B所需要承受的压力变为M(还不考虑热点数据访问的压力),所以这个失败B是必挂的,然后C至少需要承受1.5M的压力 。。。。然后大家一起挂 。。。
所以我们通过上面可以看到 , 之所以会大家一起挂,原因在于如果一台机器挂了,那么它的压力全部被分配到一台机器上 , 导致雪崩 。
怎么解决雪崩问题呢,这时候需要引入虚拟节点来进行解决 。
虚拟节点
虚拟节点,我们可以针对每个实际的节点,虚拟出多个虚拟节点,用来映射到圈上的位置 , 进行存储对应的数据 。如下图:
如上图:A节点对应A1 , A2 , BCD节点同理 。这时候,如果A节点挂了,A节点的数据迁移情况是:A1数据会迁移到C2,A2数据迁移到D1 。这就相当于A的数据被C和D分担了 , 这就避免了雪崩效应的发送,而且虚拟节点我们可以自定义设置,使其适用于我们的应用 。
ngx_http_upstream_consistent_hash
该模块可以根据配置参数采取不同的方式将请求均匀映射到后端机器,比如:
指令
语法:consistent_hash variable_name
默认值:none
上下文:upstream
配置upstream采用一致性hash作为负载均衡算法,并使用配置的变量名作为hash输入 。
参考文档:
https://www.cnblogs.com/FengGeBlog/p/10615345.html
***/nginx/nginx-upstream-consistent-hash-module/
nginx负载均衡原理,nginx有几种负载方式

文章插图


    特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。