当前位置:首页 > nginx > 正文

nginx是如何负载均衡的

  • nginx
  • 2024-04-06 02:59:56
  • 2633

壹、nginx常用的负载均衡策略
nginx常用的负载均衡策略包括轮询(RoundRobin)、IP哈希(IPHash)、最少连接(LeastConnections)和权重(Weighted)。
1.轮询(RoundRobin):这是nginx默认的负载均衡策略。 nginx将每个新的请求按顺序分发到后端服务器列表中的下一个服务器。 当到达列表的末尾时,它会回到列表的顶部并继续分发。 这种策略假设所有后端服务器的处理能力都是相同的。
例如,如果有三个后端服务器A、B和C,nginx将首先向服务器A发送请求,然后是服务器B,接着是服务器C。 当再次轮到时,它将再次从服务器A开始。
2.IP哈希(IPHash):此策略根据客户端的IP地址进行哈希计算,然后使用这个哈希值来确定将请求发送到哪个后端服务器。 这意味着来自同一IP地址的请求将始终被发送到同一台服务器。 这对于需要保持会话持久性的应用程序特别有用。
例如,如果客户端的IP地址哈希值为5,并且后端服务器数量为3,那么nginx将使用模运算(5mod3=2)来确定将请求发送到服务器列表中的第三个服务器。
3.最少连接(LeastConnections):在这种策略中,nginx会检查每个后端服务器的当前连接数,并将新请求发送到当前连接数最少的服务器。 这有助于在处理能力不同的服务器之间平衡负载。
例如,如果服务器A有10个连接,服务器B有5个连接,服务器C有3个连接,nginx将选择服务器C来处理新的请求,因为它具有最少的连接数。
4.权重(Weighted):此策略允许为后端服务器分配不同的权重,权重越高的服务器将接收更多的请求。 这通常用于处理性能各异的服务器,高性能的服务器可以被分配更高的权重以处理更多的负载。
例如,如果服务器A的权重是1,服务器B的权重是2,那么服务器B将接收大约两倍于服务器A的请求量。
综上所述,nginx提供了多种负载均衡策略以适应不同的应用场景和需求。 选择哪种策略取决于应用程序的具体需求和后端服务器的性能特点。
贰、使用Nginx实现负载均衡
一、负载均衡的作用
1、转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
2、故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
3、恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
二、Nginx实现负载均衡
1、源地址哈希法:根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。 采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
2、轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
3、随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
4、加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。 给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
5、加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。 不同的是,它是按照权重随机请求后端服务器,而非顺序。
6、最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
三、配置说明
四、轮询
五、权重
六、iphash
七、最少链接
八、fair
九、完整代码
十、也可以使用域名