4. Nginx负载均衡

一. 介绍

这篇文章是介绍如何配置nginx的负载均衡以及几种负载均衡策略的用法,其实实现起来非常之简单,使用upstream块就能做到,不多说,我们直接上配置。

二. 负载均衡配置

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    # 设定mime类型,类型由mime.type文件定义
    include    mime.types;
    default_type  application/octet-stream;
    
    #设定负载均衡的服务器列表
    upstream backend1 {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.8.101:8080   weight=5;
        server 192.168.8.102:8080   weight=1;
        server 192.168.8.103:8080   weight=6;
    }
        
    upstream backend2 {
        #weigth参数表示权值,权值越高被分配到的几率越大
        server 192.168.8.201:8080   weight=1;
        server 192.168.8.202:8080   weight=6;
    }

    # 设定虚拟主机配置
    server {
        # 侦听80端口
        listen    80;
        # 定义使用什么虚拟主机地址访问,可以填写多个值,使用空格分开,支持通配符和正则
        server_name  localhost;

        # 定义服务器的默认网站根目录位置,支持相对路径和绝对路径,此处html为相对路径,等同于${NGINX_HOME}/html
        root html;
        # 定义首页索引文件的名称
        index index.php index.html index.htm;

        # 设定本虚拟主机的访问日志
        access_log  logs/nginx.access.log  main;
        error_log   logs/quancha.error.log;

        
        #对以/static/开始的uri请求进行负载均衡
        location ^~ /static/ {
            
            #请求转向backend1定义的服务器列表
            proxy_pass    http://backend1;
              
            # 省略一些反向代理的配置
            # ...

        }

        # 对通用请求进行负载均衡
        location / {

            #请求转向backend2定义的服务器列表
            proxy_pass  http:/backend2;
              
            # 省略一些反向代理的配置
            # ...
 
        }

    }
}

三. 负载均衡策略

Nginx的负载均衡策略可以分为两大类:内置策略和扩展策略。
在最新的Nginx版本中,常见的几种内置策略包含轮询加权轮询weightip_hashleast_connleast_time普通hash和一致性hash,在默认的情况下这两种策略是编译进nginx内核中的,只需在nginx配置中指明即可启用。
扩展策略有很多类,fairurl_hash

  • 轮询(默认)
    每个请求按顺序逐一分配到不同的后端服务器处理,如果服务器down掉,会自动剔除。
  • 加权轮询weight
    指定轮询到的几率,访问比率和weight成正比,这种策略适用于后端服务器性能不均的场景,为性能更优的服务器设置更大的权重weight。
  • ip_hash
    根据每个请求的来源IP信息做hash处理后的结果分配服务器,这种策略可以将同一个IP来源的请求固定分配到同一台机器,可以用于解决session一致性问题。
    upstream backend {
        # 可选项:ip_hash、least_conn、least_time...
        ip_hash;
        server 192.168.8.101:8080;
        server 192.168.8.102:8080;
        # ...
    }
    
  • least_conn
    将请求分配给活跃连接数最小的后端服务器,如果存在多个这样的节点,将按照加权轮询算法处理。
  • least_time
    将请求分配给平均响应时间最短和活跃连接数最小的后端服务器,如果存在多个这样的节点,将按照加权轮询算法处理。
  • 普通hash和一致性hash
    语法:hash key [consistent];
    • 普通hash
      不指定consistent参数,采用普通hash,使用这种策略时,nginx会基于key值通过内部算法计算出客户机-服务器映射表,key可以包含文本、变量及其组合。注意,从服务器列表中添加或删除节点可能会导致大多数的keys值需要重新映射到不同的服务器。
      upstream backend {
          # key设为$request_uri,将按照请求uri映射到具体某个服务器。
          hash $request_uri;
          server 192.168.8.101:8080;
          server 192.168.8.102:8080;
          # ...
      }
      
    • 一致性hash
      如果指定了consistent参数,则采用ketama一致哈希算法(点击这里了解)。该算法确保了在从服务器列表中添加或删除节点时,只有少数keys需要重新映射到不同的服务器。这有助于为缓存服务器实现更高的缓存命中率。
  • fair
    根据每个后端服务器的响应时间判断负载情况,将请求分配到响应时间最短的服务器,也就是负载最小的节点。
  • url_hash
    通过将请求url做hash处理后的结果分配后端服务器,这种策略可以将相同的url分配到同一个服务器处理,经常用于做静态资源缓存。

四. upstream相关参数

  • server:负载均衡的后端服务器地址加端口号。
upstream backend {
   # server host:port
   server 192.168.8.101:8080;
   server 192.168.8.102:8080;
   # ...
}
  • weight:设置服务器权重,默认值为1。
upstream backend {
   # server host:port
   server 192.168.8.101:8080 weight=5;
   server 192.168.8.102:8080 weight=10;
   # ...
}
  • max_fails:判断后端服务器访问失败多少次后认为已经down掉,主动剔除。
upstream backend {
   # server host:port
   server 192.168.8.101:8080 max_fails=3;
   server 192.168.8.102:8080 max_fails=5;
   # ...
}
  • fail_timeout:后端服务器被剔除后重新探测的时间。
upstream backend {
   # server host:port
   server 192.168.8.101:8080 max_fails=3 fail_timeout=30s;
   server 192.168.8.102:8080 max_fails=5;
   # ...
}
  • backup:将服务器标记为备份服务器。当主服务器不可用时,它将会处理请求。
upstream backend {
   # server host:port
   server 192.168.8.101:8080;
   server 192.168.8.102:8080;
   # 在其他主服务器可用时,192.168.8.103服务器不参与负载均衡。
   server 192.168.8.103:8080 backup;
   # ...
}
  • max_conns:允许后端服务器的最大并发连接数,默认值为0表示没有限制。

    如果启用了idle keepalive connections、多个工作进程(multiple worker)和共享内存(shared memory),代理服务器活跃和空闲连接的总数可能会超出max_conns的值。

  • slow_start:当节点恢复,不立即加入,而是等待slow_start后加入服务对列。

    The parameter cannot be used along with the hash and ip_hash load balancing methods.
    该参数不能在hash和ip_hash策略下使用。

  • down:将服务器标记为永久不可用。

upstream backend {
   # server host:port
   server 192.168.8.101:8080;
   server 192.168.8.102:8080;
   # 192.168.8.103服务器不参与负载均衡。
   server 192.168.8.103:8080 down;
   # ...
}

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值