【NGINX 做负载均衡器】

ngnginx二进制包下载地址 :nginx: download

nginx功能模块帮助文档 :nginx documentation

nginx yum源配置地址: nginx: Linux packages

Nginx的特点包括 :

  1. 高性能 :Nginx使用异步非阻塞的事件驱动模型模型,可以同时处理大量的并发连接,而且在高负载和大流量情况下仍然能够保持良好的性能。
  2. 轻量级 :Nginx的代码量较少,占用的内存也较少,使其可以在资源受限的系统中运行,并且在高负载下也不易崩溃。
  3. 可扩展性 :Nginx支持众多的第三方模块,可以根据需要进行自定义开发,实现更多的功能。
  4. 高度可靠性 :Nginx是基于稳定的、成熟的事件驱动架构开发的,能够有效地避免因】代码错误或第三方库问题导致的崩溃,从而保证了服务的高可靠性。
  5. 热部署 :Nginx支持在不停止服务的情况下更新配置文件和软件升级,为用户提供了极大的便利。

在功能方面,Nginx具有

  1. HTTP代理与反向代理 :作为web服务器,Nginx最常用的功能之一是反向代理。它可以根据不同的正则匹配,采取不同的转发策略,并且能够对返回结果进行错误页跳转、异常判断等。如果被分发的服务器存在异常,Nginx可以将请求重新转发给另一台服务器。
  2. 负载均衡 :Nginx提供了多种负载均衡策略,如轮询、加权轮询和ip hash等,以优化请求的分配和处理方式,从而平均分配后端服务器的负载,提高系统的可用性和可靠性。
  3. Web缓存 :Nginx支持对不同的文件做不同的缓存处理。

Nginx 负载均衡模块

ngx_http_upstream_module:用于定义负载均衡策略和后端服务器组的模块。upstream指令用于定义后端服务器组,这些服务器组会被Nginx用来进行负载均衡。

ngx_http_proxy_module:负责将客户端的请求转发到upstream模块定义的后端服务器组。通过proxy_pass指令,Nginx可以将请求发送到指定的服务器组,从而实现负载均衡。

1.upsteram 模块配置

第一台机器:负载均衡

# upstream 配置与http块下,和server块同级。
http {
  upstream test {
          server 192.168.137.30;
          server 192.168.137.40;
  }
  
  server {
          listen 80;
          server_name 192.168.137.10;
          location / {
                  proxy_pass http://test;
                  proxy_set_header Host $http_host;
                  proxy_set_header   X-Real-IP $remote_addr;
                  proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
          }
  }
}

其他两台机器:后台真实服务器

server{
        listen 80;
        server_name localhost;

        location / {
                root /test;
                index t1.txt;
        }
}
#
nginx -t
systemctl reload nginx
访问代理服务器

2.Nginx 均衡负载策略:

轮询(Round Robin):

默认的负载均衡策略。在这种策略下,每个请求会按时间顺序逐一分配到不同的后端服务器节点,确保每个节点平均处理请求。

优点

  1. 简单高效:轮询策略实现起来相对简单,不需要复杂的算法支持,因此在处理请求时效率较高。
  2. 自动故障转移:如果某个后端服务器宕机或无法响应,Nginx能够自动检测到并将请求转发到其他健康的服务器上,这样可以提高系统的整体可用性。
  3. 均匀分配:在大多数情况下,轮询策略能够保证请求被均匀地分配到各个后端服务器上,从而提高了系统的吞吐量和资源的利用率。

缺点:

  1. 会话一致性问题:由于请求可能会被随机分配到不同的服务器上,这可能会导致同一个用户的连续请求落在不同服务器上,从而影响会话的一致性。
  2. 缺乏灵活性:轮询策略不会考虑后端服务器的实际处理能力,也不会根据请求的内容进行优化分配,这可能会导致某些服务器过载而其他服务器却处于空闲状态。
  upstream test {
       server 192.168.137.21:80;
       server 192.168.137.22:80;     
}

负载均衡状态配置参数

down; 表示不在将用户的请求转发到此主机中:即下线虚拟机

backup; 预留的备份机器。当其他所有的非backup机器出现故障时,才会请求backup机器,因此这台机器的压力最轻。

max_fails:表示允许的最大失败次数。当一个后端服务器在 fail_timeout 时间内连续失败这么多次后,Nginx 会将该服务器标记为不可用,不再向其转发请求。默认值为 1。

fail_timeout:表示失败检查的时间间隔。在这个时间段内,如果一个后端服务器的失败次数达到了 max_fails,那么 Nginx 会将其标记为不可用。默认值为 10s。

# down
http {
    upstream test {
        server 192.168.174.21 down;
        server 192.168.174.22;
    }
}

# backup;
http {
    upstream test {
        server 192.168.174.21 backup;
        server 192.168.174.22;
    }
}

# max_fails  fail_timeout
http {
    upstream test {
        server 192.168.174.21 max_fails=3 fail_timeout=30s;
        server 192.168.174.22 max_fails=3 fail_timeout=30s;
    }
}
加权轮询(Weighted Round Robin):

根据服务器的性能为其分配权重,性能更好的服务器可以处理更多的请求。

优点:

  • 性能优化:允许性能更强的服务器处理更多的请求,这样可以充分利用资源,提高整体的处理能力。
  • 灵活性:可以根据实际情况调整服务器的权重,以适应不同的负载需求和服务器性能。
  • 适应性:在服务器性能差异较大时,能够更好地平衡负载,避免某些服务器过载而其他服务器空闲的情况发生。

缺点:

  • 压力集中:在系统启动初期,高权重的节点可能会承受较大的压力,导致机器负载突然增高,而其他机器则处于低负载状态,这可能会影响服务的平滑性。
  • 复杂性:相比简单的轮询策略,加权轮询需要更多的配置和管理,增加了系统的复杂性。
  • 会话一致性:尽管加权轮询考虑了服务器的性能,但仍然可能导致同一用户的请求被分配到不同服务器,影响会话一致性。
# weight:设置权重
http {
  upstream test {
      server 192.168.174.21 weight=2;
      server 192.168.174.22 weight=1;
    }
}
最少链接(Least Connections):

Nginx会将新请求分配给当前连接数最少的服务器,这样可以保证服务器间的负载更加均衡。

优点:

  • 提高服务器利用率:在高负载情况下,将请求转发给当前连接数较少的后端服务器,可以更有效地利用服务器资源,避免某些服务器过载。
  • 适应性强:适用于处理时间不确定或服务器性能差异较大的环境,能够根据实际情况动态调整请求分配,提高整体的处理能力和效率。
  • 减少响应时间:通过将请求分配给当前连接数较少的服务器,可以减少用户的等待时间,提高服务的响应速度。

缺点:

  • 可能导致空闲:在某些情况下,如果某个服务器的处理能力非常强,可能会导致其他服务器长期处于空闲状态,从而影响其性能和稳定性。
  • 可能不公平:如果服务器的处理能力不同,仅仅根据连接数来分配请求可能会导致某些服务器承担更多的负载,而其他服务器则相对较少,这在一定程度上违背了负载均衡的公平性原则。
http {
  upstream test{
	  least_conn;
	  server 192.168.137.21;
	  server 192.168.137.22;
  }
}
IP Hash:

根据客户端IP地址的哈希值来选择服务器,这样可以确保同一用户的请求总是被发送到同一台服务器,有助于实现会话保持。

优点:

  • 会话保持:根据客户端IP的哈希值来分配请求,确保来自同一IP的请求被发送到相同的后端服务器。这有助于维持客户端与服务器之间的会话状态,特别是对于需要保持登录状态或其他会话信息的应用来说非常重要。
  • 减少响应时间:由于同一用户的请求被定向到同一台服务器,可以减少因服务器间会话恢复而产生的延迟,提高应用的响应速度。

缺点:

  • 无法处理高并发:当某个客户端的请求量异常增加时,可能会导致该客户端对应的后端服务器负载过高,而其他服务器却处于相对空闲的状态。
# ip_hash; 声明IP Hash
http {
  upstream test {
	  ip_hash;
      server 192.168.174.21; 
      server 192.168.174.22;   
  }
}
URL Hash:

优点:

  • 会话保持:确保相同URL的请求始终被分配到同一台后端服务器,有助于保持会话的一致性,特别适用于需要维护用户登录状态等场景。
  • 提高效率:由于相同URL的请求被定向到同一服务器,这可以减少服务器间状态复制的需要,提高缓存效率,尤其适用于后端服务器使用缓存的场景。

缺点:

  • 服务器动态变化敏感:如果后端服务器列表发生变化(如增加或减少服务器),可能会导致哈希结果的变化,进而影响到之前已经分配的服务器,这需要在使用中特别注意。
# hash $request_uri; 声明URL Hash
http {
  upstream test {
	  hash $request_uri;
      server 192.168.174.21; 
      server 192.168.174.22;   
  }
}
Fair:

根据后端服务器的响应时间进行动态分配请求,实现更合理的负载均衡。nginx本身不支持fair,需要独立安装upstream_fair模块

优点

  • 动态调整:Fair策略能够动态地根据服务器的实际处理能力来分配请求,这样可以更合理地利用服务器资源,提高整体的处理效率。
  • 适应性强:对于那些处理能力不一或处理时间不确定的服务器集群,Fair策略能够更好地平衡负载,避免某些服务器过载而其他服务器空闲的情况发生。

缺点

  • 对突发流量敏感:由于Fair策略是根据服务器当前的响应时间来分配请求,因此对于突发流量的处理可能不够迅速,需要一段时间来调整分配策略。
  • 可能引起资源分配不均:在服务器性能差异较大的情况下,Fair策略可能会导致性能较好的服务器承担更多的请求,而性能较差的服务器则可能处于较为空闲的状态。
# fair; 声明fair
http {
    upstream test {
        fair;
        server 192.168.174.21;
        server 192.168.174.21;
    }
}

参考链接:GitHub - gnosek/nginx-upstream-fair: The fair load balancer module for nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值