四、Nginx实现负载均衡的7种方式

本文详细介绍了Nginx的多种负载均衡策略,包括轮询、服务器权重、最少连接、IPHash、通用哈希、最少时间和随机策略。每种策略都有其特定的适用场景,如轮询适用于均匀分布请求,最少连接则优先选择空闲连接少的服务器,IPHash确保同一客户端请求始终路由到同一服务器,而最少时间和随机策略则更注重响应速度和随机选择。了解这些策略有助于优化服务器集群的性能和稳定性。

Nginx实现负载均衡的几种方式

1、轮询(Round Robin 默认)

请求在服务器之间均匀分布,并考虑服务器权重。默认情况下使用此方法

upstream backend {
   # 没有为循环指定负载平衡方法
   server backend1.example.com;
   server backend2.example.com;
}

Nginx 轮询

2、 服务器权重

默认情况下,Nginx 使用 Round Robin 方法根据权重在组中的服务器之间分配请求。该指令的 weight 参数设置服务器的权重;默认是1:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server 192.0.0.1 backup;
}

Nginx 加权轮询
在这个例子中,backend1.example.com有 weight 5;其他两台服务器有默认权重(1),但有 IP 地址的那台192.0.0.1被标记为 backup 服务器,除非其他两台服务器都不可用,否则不会接收请求。上述这种权重配置,每当有6请求,5个会发送到 backend1.example.com ,1个会发送到 backend2.example.com

3、最少连接(Least Connections )

请求被发送到活动连接数最少的服务器,其次考虑服务器权重:

upstream backend {
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

4、IP Hash

请求发送到的服务器由客户端 IP 地址确定。在这种情况下,要么使用 IPv4 地址的前三个八位字节,要么使用整个 IPv6 地址来计算哈希值。该方法保证来自同一地址的请求到达同一服务器,除非它不可用。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
}

如果其中一台服务器需要暂时从负载平衡轮换中移除,则可以使用down参数对其进行标记,以保留客户端 IP 地址的当前散列。由该服务器处理的请求会自动发送到组中的下一个服务器:

upstream backend {
	ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}

Nginx iphash

5、通用哈希

通用哈希- 请求发送到的服务器由用户定义的键确定,该键可以是文本字符串、变量或组合。例如,密钥可以是成对的源 IP 地址和端口,或 URI,如本例所示:

upstream backend {
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

该指令的可选参数一致hash启用 ketama 一致性哈希负载平衡。请求根据用户定义的散列键值均匀分布在所有上游服务器上。如果将上游服务器添加到上游组或从上游组中删除,则仅重新映射少数键,从而在负载平衡缓存服务器或其他累积状态的应用程序的情况下最大限度地减少缓存未命中。

6、最短时间(Least Time)

最少的时间(Nginx Plus) - 对于每个请求,Nginx选择具有最低平均延迟和最低数量的活动连接,其中,最低平均延迟是根据以下哪一个参数计算得出的,以最短时间指令为准:

  • header:从服务器接收第一个字节的时间
  • last_byte:从服务器接收完整响应的时间
  • last_byte inflight:考虑到不完整的请求,从服务器接收完整响应的时间
upstream backend {
    least_time header;
    server backend1.example.com;
    server backend2.example.com;
}

7、Random

每个请求都将传递到随机选择的服务器。如果指定了两个参数,Nginx首先会考虑服务器权重随机选择两台服务器,然后使用指定的方法选择其中一台服务器:

  • least_conn:活动连接的最少数量
  • least_time=header(NGINX Plus):从服务器接收响应标头的最短平均时间( $upstream_header_time)
  • least_time=last_byte(NGINX Plus):从服务器接收完整响应的最小平均时间( $upstream_header_time)
upstream backend {
    random two least_time=last_byte;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}

的随机负载平衡方法应被用于在多个负载平衡器传递请求到相同组的后端分布式环境。对于负载均衡器可以查看所有请求的环境,请使用其他负载均衡方法,例如循环、最少连接和最少时间。

注意:当配置除 Round Robin 之外的任何方法时,将相应的指令(hash、ip_hash、least_conn、least_time、 或random)放在块中server指令列表的上方upstream {}。

注: Nginx Plus 是ngxin的商业版。

nginx是一种高性能的web服务器,它提供了多种方式实现负载均衡,以满足大量用户访问的需求,提升服务器的稳定性和性能。 一、基于IP Hash算法负载均衡 IP Hash算法是一种基于客户端IP地址的负载均衡策略,nginx会根据请求的客户端IP地址,将请求分配给后端的服务器。当第一次请求来自一个客户端时,nginx会取得请求中的客户端IP地址,并通过哈希算法计算得出该请求应该分配到的服务器。 二、Round Robin负载均衡 Round Robin负载均衡算法是一种按照预设的规则顺序轮流选择服务器的方法。nginx会将请求平均分配给多个服务器,在遍历完所有服务器以后从头开始重新选择。 三、Least Connections负载均衡 Least Connections算法是一种根据实时服务器的连接数动态分配请求的方法。nginx会根据服务器的连接数来判断请求应该向哪台服务器分配。该算法通常适用于后端服务器性能不一的情况下,以保证业务的稳定性和可靠性。 、ip_hash + weight负载均衡 ip_hash+weight算法是一种将IP Hash算法和Round Robin算法结合起来的方法。nginx会首先使用IP Hash算法将请求分配到特定的服务器,然后根据预先设置的权重轮流分配请求。 总之,nginx实现负载均衡有以上几种方式,不同的负载均衡策略适用于不同的应用场景,企业可以根据自身的业务特点和性能要求来选择适合的负载均衡算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值