【Nginx四】Nginx作为HTTP负载均衡服务器

 Nginx的另一个常用的功能是作为负载均衡服务器。一个典型的web应用系统,通过负载均衡服务器,可以使得应用有多台后端服务器来响应客户端的请求。一个应用配置多台后端服务器,可以带来很多好处:

 

负载均衡的好处

  • 增加可用资源
  • 增加吞吐量
  • 加快响应速度,降低延时
  • 出错的重试验机制

Nginx主要支持三种均衡算法:

  • round-robin
  • least-connected 负载饱和度算法,Nginx会将请求转发到链接数最少的那太机器上
  • ip-hash  基于访问IP的hash值进行请求分发,适用于一个session的请求必须发送到同一台机器(比如有些Service是有状态)

负载均衡默认配置(round-robin)

 

http {
    upstream loadbalancer1 {
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80; 

        location / {
            proxy_pass http://loadbalancer1;
        }
    }
}
  • 默认的负载均衡服务器采用的是均衡算法是round-robin,按顺序依次处理请求
  • 以上配置将发送给Nginx的所有请求转发给代理服务器loadbalancer1,而loadbalancer1是一个配置了三个server的集群环境,每个请求由srv1,srv2,srv3中的一台机器来处理

 

负载均衡配置(最少链接)

 

http {
    upstream loadbalancer1 {
        least_conn;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80; 

        location / {
            proxy_pass http://loadbalancer1;
        }
    }
}
Least-Connected均衡策略适用于请求的场景是有些请求时间长,有些请求时间很多,这样,每次分发时,可以将请求分发到由于执行时间短而空闲的机器
 

负载均衡配置(IP Hash)

 

http {
    upstream loadbalancer1 {
        ip_hash;
        server srv1.example.com;
        server srv2.example.com;
        server srv3.example.com;
    }

    server {
        listen 80; 

        location / {
            proxy_pass http://loadbalancer1;
        }
    }
}
ip_hash均衡策略适用于,将一个客户端(来自同一个IP)的连续请求发送到同一个机器上,这样间接的实现了session保持的功能

 

负载均衡加权配置

http {
    upstream loadbalancer1 {
        server srv1.example.com;
        server srv2.example.com weight=3;
        server srv3.example.com;
    }

    server {
        listen 80; 

        location / {
            proxy_pass http://loadbalancer1;
        }
    }
}

 

通过weight指令,可以为某台机器设置一个权重,如果一个机器的权重设置的比较高,那么这台机器响应请求的可能性就会相应的变大。这通常适用于几台机器的性能不同,让性能好的机器多处理一些请求,让性能差的机器少处理一些请求

说明

上面的配置是针对默认的round-robin的,假如有5个请求来,那么srv1和srv3每个分到一个请求,而srv2将分得3个请求。从这个角度上看,对于round-robin均衡下的weight,应该是用了类似虚拟节点的概念,给srv2分配三个虚拟节点

如果是ip_hash的那么加上weight之后会影响hash算法的计算,因此基于ip_hash的负载均衡,一开始没加weight,后来加了,则会应用ip hash结果,即本来由srv处理的请求结果变成有srv2处理了,在这种情况下,通过reload不停机的方法加载weight选项,可能会导致一些问题

 

 

 

 

 

 

 

 

你可能感兴趣的:(nginx)