nginx负载均衡算法

负载均衡是什么意思

通俗点讲就是多个具有相同能力的“人”去做某一件事情,并根据每个“人”所能承受的量的大小不同,来分配任务量。

有哪几种实现方式,以及它们之间的区别

LVS和nginx,前者是四层负载均衡,作用于传输层,后者是七层负载均衡,作用于应用层。

nginx负载均衡配置方法

在配置文件中做如下配置,

 1 upstream tomcats {
 2         server 192.168.0.103:8088 weight=1;
 3         server 192.168.0.104:8088 weight=2;
 4         server 192.168.0.105:8088 weight=10;
 5 }
 6 server {
 7         listen 90;
 8         server_name www.cnblogs.com;
 9 
10         location / {
11                 proxy_pass http://tomcats;
12         }
13 }

当请求访问的域名是“www.cnblogs.com”,并且端口号是90时,就会被nginx的负载均衡所拦截,依照配置(upstream)来分配具体的响应服务器。

在做了负载均衡之后,为upstream指定的名字(如:tomcats)就是访问各个上游服务器时的域名。

负载均衡—轮询、权重 weight:

轮询:是nginx负载均衡的默认策略。会将上游服务器排序,依次调用。

权重:为每一个服务器设置权重(即能力值,默认为1),权重越大则越有可能被调用。

负载均衡—max_conns:

表示每一个上游服务器可同时接收处理的连接数量,用于保护避免过载,可以起到限流的作用。

负载均衡—slow_start:

设置服务器慢速启动,将其权重从0慢慢加载到实际配置的值。即完成服务器的状态从不可用到可用甚至高可用的转变。此参数只在商业版本中有效。

  • 该参数不能使用在hash和random load balancing负载策略中。
  • 当只有一台服务器时,该参数失效。

负载均衡—down、backup:

down:标志该服务器不可用,不会处理请求。

backup:标志该服务器是备份机,只有在其他服务器无法工作时(比如宕机),才会加入到集群中提供服务。

  • backup参数不能使用在hash和random load balancing中。

负载均衡—max_fails、fail_timeout:

这两个参数需要同时声明才可以生效。例如:max_fails=2 fail_timeout=15s  ,表示在15秒内请求某一个服务器失败了2次,则认为该服务器宕机了,接下来的15秒内不会分配新请求到该服务器。15秒后再有新的请求会再次尝试连接该服务器,如果请求仍旧失败,则再次重复上述过程。

负载均衡—keepalived:

作用:用于提高系统的吞吐量。当一个请求进来时,系统需要维护其状态(打开、关闭和再打开),这样当一个请求在一定时间内多次访问服务器时会造成很大的消耗,而且服务器处理请求的速度也会降低。使用keepalived保证请求在一定时间内处于连接状态。

配置:

 1 upstream tomcats {
 2          #server 192.168.0.103:8088 max_fails=2 fail_timeout=1s;
 3          #server 192.168.0.104:8088;
 4          #server 192.168.0.105:8088;
 5          server  192.168.0.106:8080;
 6          keepalive 32;  #设置长连接处理的数量
 7  } 
 8 server {
 9          listen 90;
10          server_name www.cnblogs.com;
11           location / {
12                  proxy_pass http://tomcats;
13                  proxy_http_version 1.1;
14                  proxy_set_header Connection "";
15          }
16  }

负载均衡—ip_hash:

ip_hash可以保证用户的每次访问都可以请求到固定的服务器,前提是用户的ip没有变动。在使用ip_hash时需要注意一点,不能把后台服务器直接移除,只能标记为down。

If one of the servers needs to be temporarily removed, it should be marked with the down parameter in order to preserve the current hashing of client IP addresses.
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash
一致性hash算法:
 
如上图所示,将所有的服务器节点按照hash算法,存放在“0~2^32”地址块上。所有的用户也都是按照一定规则分布在不同的地址上。每一个用户都是按照顺时针就近访问服务器节点。当有服务器宕机时或需要新增加服务器节点时,受影响的也只是少部分用户。

负载均衡—url_hash与least_conn:

url_hash,根据每次请求的url地址不同,将会访问到不同的服务器节点,hash后访问到的服务器节点将会固定。

1 upstream tomcats {
2         #使用ip_hash作负载均衡
3         ip_hash;
4         #获取到请求的ip地址
5         hash $request_uri;
6         server 192.168.204.128:8088;
7         server 192.168.204.129:8088;
8         server 192.168.204.130:8088;
9 }

least_conn,根据每台服务器节点当前连接数不同,将请求分配到连接数最少的节点上。

1 # 最少连接数 
2 # least_conn
如有错误,恳请指出。
原文地址:https://www.cnblogs.com/monument/p/12734791.html