一、关于Nginx负载均衡在服务器集群中,Nginx扮演着代理服务器(即反向代理)的角色。用户请求被转发到不同的服务器。详情见我的另一篇博客。2.Nginx负载均衡策略负载均衡用于从“upstream”模块定义的后端服务器列表中选择一台服务器接受用户请求。一个基本的上游模块是这样的,模块中的服务器是一个服务器列表:#动态服务器组upstreamdynamic_zuoyu{serverlocalhost:8080;#tomcat7.0serverlocalhost:8081;#tomcat8.0serverlocalhost:8082;#tomcat8.5serverlocalhost:8083;#tomcat9.0}upstream模块配置完成后,将指定访问反向代理到服务器列表:#其他页面反向代理到tomcat容器位置~.*${indexindex.jspindex.html;proxy_passhttp://dynamic_zuoyu;}这是一个最基本的负载均衡示例,但还不足以满足实际需求;目前Nginx服务器upstream模块支持6种分配方式:负载均衡策略轮询默认方式权重权重方式ip_hash基于ip分配方式least_conn最少连接方式公平(第三方)响应时间方式url_hash(第三方)根据对URL分发方式这里只详细说明Nginx自带的负载均衡策略,第三方的就不多说了。1、轮询是最基本的配置方式。上面的例子是轮询方式,是upstream模块默认的负载均衡策略。每个请求都会按照时间顺序一一分配给不同的后端服务器。有以下参数:fail_timeout与max_fails结合使用。max_fails设置在fail_timeout参数设置的时间内失败的最大次数。如果在这段时间内对服务器的所有请求都失败了,就认为服务器宕机了,fail_time服务器就认为宕机了。默认为10秒。backup将服务器标记为备份服务器。当主服务器停止时,请求被发送到它。down将服务器标记为永久关闭。注意:在轮询中,如果服务器宕机,服务器将被自动移除。默认配置是循环策略。这种策略适用于服务器配置相似、无状态、速度快的服务。2.权重法根据轮询策略指定轮询的概率。例子如下:#Dynamicservergroupupstreamdynamic_zuoyu{serverlocalhost:8080weight=2;#tomcat7.0服务器localhost:8081;#tomcat8.0服务器localhost:8082备份;#tomcat8.5服务器localhost:8083max_fails=3fail_timeout=20s;#tomcat9.0}在这个例子中,权重参数用于指定轮询概率。权重默认值为1;权重的值与访问率成正比。比如Tomcat7.0被访问的概率是其他服务器的两倍。注意:权重越高,需要处理的请求越多。该策略可以与least_conn和ip_hash结合使用。这种策略更适用于服务器硬件配置差异较大的情况。3.ip_hash指定负载均衡器是根据客户端IP分配的。该方法确保来自同一客户端的请求始终发送到同一服务器以确保会话会话。这样每个访问者访问一个固定的后端服务器,可以解决session不能跨服务器的问题。#动态服务器组upstreamdynamic_zuoyu{ip_hash;#保证每个访客访问一个后端服务器serverlocalhost:8080weight=2;#tomcat7.0serverlocalhost:8081;#tomcat8.0serverlocalhost:8082;#tomcat8.5serverlocalhost:8083max_fails=3fail_timeout=20s;#tomcat9.0}注意:在nginx1.3.1版本之前,ip_hash中不能使用weight。ip_hash不能与备份同时使用。这种策略适用于有状态的服务,比如会话。当需要删除服务器时,必须手动将其关闭。4.least_conn将请求转发给连接数较少的后端服务器。轮询算法是将请求平均转发到各个后端,使它们的负载大致相同;但是,有些请求需要很长时间,这将导致它们所在的后端负载较高。这种情况下least_conn可以达到更好的负载均衡效果。#动态服务器组upstreamdynamic_zuoyu{least_conn;#将请求转发给连接数较少的后端服务器20s;#tomcat9.0}注:这种负载均衡策略适用于服务器因请求处理时间不同而过载的情况.5.第三方策略第三方负载均衡策略的实现需要安装第三方插件。①fair根据服务器的响应时间分配请求,响应时间短的优先。#动态服务器组upstreamdynamic_zuoyu{serverlocalhost:8080;#tomcat7.0serverlocalhost:8081;#tomcat8.0serverlocalhost:8082;#tomcat8.5serverlocalhost:8083;#tomcat9.0fair;#实现响应时间短的优先分配}②根据访问的url_hashurl哈希结果用于分配请求,使每个url指向同一个后端服务器,这应该与缓存命中结合使用。对同一个资源的多次请求可能会到达不同的服务器,造成不必要的多次下载,缓存命中率低,浪费部分资源时间。使用url_hash可以让同一个url(即同一个资源请求)到达同一个服务器。一旦资源被缓存,然后接收到请求,就可以从缓存中读取它。#动态服务器组upstreamdynamic_zuoyu{hash$request_uri;#实现每个url指向同一个后端服务器serverlocalhost:8080;#tomcat7.0serverlocalhost:8081;#tomcat8.0serverlocalhost:8082;#tomcat8.5serverlocalhost:8083;#tomcat9.0}3。总结以上就是6种负载均衡策略的实现方法,其中除了轮询和轮询权重外,都是由Nginx根据不同的算法实现的。在实际应用中,需要根据不同的场景有选择地使用,大多结合多种策略来满足实际需求。希望对大家的学习有所帮助,希望大家多多支持脚本之家。
