Nginx中的负载均衡策略

负载均衡策略

加权Round-Robin

以加权轮询的方式访问server指令指定的上游服务,集成在Nginx的upstream框架中。
服务访问的权重 weight
服务的最大并发数 max_conns
最大失败次数 max_fails
失败超时时间 fail_timeout

Round-Robin是其他负载均衡算法的基础,当其他负载均衡算法失效的时候,都会退化成Round-Robin算法。

哈希算法

Round-Robin的缺点:只能进行水平扩展,处理无差别的服务。

基于客户端IP的哈希算法 upstream_ip_hash模块 , 以客户端的IP地址作为hash算法的关键字,映射到特定的上游服务器。

  • 对IPV4地址使用前3个字节作为关键字,对于IPV6使用完整地址

基于任意关键字实现的Hash算法
通过指定关键字作为hash key,基于hash算法映射到特定服务器

  • 关键字可以含有变量、字符串,如用户名
一致性哈希算法

哈希算法的缺点:宕机或者扩容时,hash算法引发大量路由变更,可能导致缓存大范围失效。

  1. 首先求出memcached服务器(节点)的哈希值,并将其配置到0~2^32的圆(continuum)上。
  2. 然后采用同样的方法求出存储数据的键的哈希值,并映射到相同的圆上。
  3. 然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过232仍然找不到服务器,就会保存到第一台memcached服务器上。

从上图的状态中添加一台memcached服务器。余数分布式算法由于保存键的服务器会发生巨大变化而影响缓存的命中率,但Consistent Hashing中,只有在圆(continuum)上增加服务器的地点逆时针方向的第一台服务器上的键会受到影响

一致性哈希示意图

优先选择连接最少的上游服务器

从所有上游服务器中,找出当前并发连接数最少的一个,将请求转发到它。upstrem_lleast_conn模块

  • 如果出现多个最少连接服务器的连接数都一样,使用round-robin算法
使用共享内存使得负载均衡策略能够跨进程生效,对所有worker进程起作用

分配出共享内存,将其它upstream模块定义的负载均衡策略数据、运行时每个上游服务器的状态数据存放在共享内存上,以对所有nginx work进程生效

upstream_zone模块

### Nginx 1.27.2 版本的负载均衡策略及配置方法 Nginx负载均衡功能通过 `upstream` 块实现,支持多种内置算法来分配请求到不同的服务器。以下是关于 Nginx 1.27.2 中常见的负载均衡策略及其对应的配置示例。 #### 支持的负载均衡策略 1. **轮询 (Round Robin)** 默认情况下,Nginx 使用轮询方式分发客户端请求给后端服务器[^3]。 2. **加权轮询 (Weighted Round Robin)** 可以为每台服务器设置权重参数 (`weight`),权重越高则被分配更多请求[^4]。 3. **最少连接数 (Least Connections)** 将新请求发送至当前活动连接数最小的服务器上[^5]。 4. **IP哈希 (IP Hash)** 根据客户端 IP 地址计算散列值并始终将其映射到同一台服务器上[^6]。 5. **一致性哈希 (Consistent Hashing)** 这种高级策略通常用于缓存场景下保持会话粘性,但需借助第三方模块完成实施[^7]。 #### 配置实例展示 下面提供几个基于不同策略的具体例子: ##### 示例一:默认轮询模式 ```nginx http { upstream backend { server backend1.example.com; server backend2.example.com; } server { location / { proxy_pass http://backend; } } } ``` ##### 示例二:带权重因子的加权轮询 ```nginx http { upstream backend { server backend1.example.com weight=3; server backend2.example.com weight=1; } server { location / { proxy_pass http://backend; } } } ``` ##### 示例三:采用最少连接法 ```nginx http { upstream backend { least_conn; server backend1.example.com; server backend2.example.com; } server { location / { proxy_pass http://backend; } } } ``` ##### 示例四:利用 ip_hash 实现会话持久化 ```nginx http { upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; } server { location / { proxy_pass http://backend; } } } ``` 以上即为针对 Nginx 1.27.2 所能应用的主要几种负载均衡技术方案以及相应代码片段说明[^8]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值