当前位置: 首页 > Linux

Nginx服务器负载均衡策略(6种)

时间:2023-04-06 18:41:33 Linux

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