• nginx


    一、内置负载策略

    Nginx负载均衡是通过upstream模块来实现的,内置实现了三种负载策略,配置还是比较简单的。官网负载均衡配置说明:http://nginx.org/en/docs/http/load_balancing.html

    • 轮循(默认)
      Nginx根据请求次数,将每个请求均匀分配到每台服务器
    • 最少连接
      将请求分配给连接数最少的服务器。Nginx会统计哪些服务器的连接数最少。
    • IP Hash
      绑定处理请求的服务器。第一次请求时,根据该客户端的IP算出一个HASH值,将请求分配到集群中的某一台服务器上。后面该客户端的所有请求,都将通过HASH算法,找到之前处理这台客户端请求的服务器,然后将请求交给它来处理。

    1> 轮循

    http {
    
        # ... 省略其它配置
    
        upstream tomcats {
            server 192.168.0.100:8080;
            server 192.168.0.101:8080;
            server example.com:8080;
        }
    
        server {
            listen 80;
    
            location / {
                proxy_pass http://tomcats;
            }
        }
    
        # ... 省略其它配置
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • proxy_pass http://tomcats:表示将所有请求转发到tomcats服务器组中配置的某一台服务器上。
    • upstream模块:配置反向代理服务器组,Nginx会根据配置,将请求分发给组里的某一台服务器。tomcats是服务器组的名称。
    • upstream模块下的server指令:配置处理请求的服务器IP或域名,端口可选,不配置默认使用80端口。通过上面的配置,Nginx默认将请求依次分配给100,101,102来处理,可以通过修改下面这些参数来改变默认的分配策略:
      • weight
        默认为1,将请求平均分配给每台server

        upstream tomcats {
        server 192.168.0.100:8080 weight=2;  # 2/6次
        server 192.168.0.101:8080 weight=3;  # 3/6次
        server 192.168.0.102:8080 weight=1;  # 1/6
        • 1
        • 2
        • 3
        • 4

        上例配置,表示6次请求中,100分配2次,101分配3次,102分配1次

      • max_fails
        默认为1。某台Server允许请求失败的次数,超过最大次数后,在fail_timeout时间内,新的请求将不会分配给这台机器。如果设置为0,Nginx会将这台Server置为永久无效状态,然后将请求发给定义了proxy_next_upstream, fastcgi_next_upstream, uwsgi_next_upstream, scgi_next_upstream, and memcached_next_upstream指令来处理这次错误的请求。

      • fail_timeout
        默认为10秒。某台Server达到max_fails次失败请求后,在fail_timeout期间内,nginx会认为这台Server暂时不可用,不会将请求分配给它

        upstream tomcats {
        server 192.168.0.100:8080 weight=2;  # 2/6次
        server 192.168.0.101:8080 weight=3;  # 3/6次
        server 192.168.0.102:8080 weight=1;  # 1/6
        • 1
        • 2
        • 3
        • 4

        192.168.0.100这台机器,如果有3次请求失败,nginx在15秒内,不会将新的请求分配给它。

      • backup
        备份机,所有服务器挂了之后才会生效

        upstream tomcats {
        server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
        server 192.168.0.101:8080 weight=3;
        
        server 192.168.0.102:8080 backup;
        
        • 1
        • 2
        • 3
        • 4
        • 5

        在100和101都挂了之前,102为不可用状态,不会将请求分配给它。只有当100和101都挂了,102才会被启用。

      • down
        标识某一台server不可用。可能能通过某些参数动态的激活它吧,要不真没啥用。

        upstream tomcats {
        server 192.168.0.100:8080 weight=2 max_fails=3 fail_timeout=15;
        
        server 192.168.0.101:8080 down;
        
        server 192.168.0.102:8080 backup;
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6

    表示101这台Server为无效状态,不会将请求分配给它。

    • max_conns
      限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置
      upstream tomcats {
      server 192.168.0.100:8080 max_conns=1000;
      
      • 1
      • 2

    表示最多给100这台Server分配1000个请求,如果这台Server正在处理1000个请求,nginx将不会分配新的请求给到它。假如有一个请求处理完了,还剩下999个请求在处理,这时nginx也会将新的请求分配给它。

    • resolve
      将server指令配置的域名,指定域名解析服务器。需要在http模块下配置resolver指令,指定域名解析服务
      http {
      resolver 10.0.0.1;
      
      upstream u {
          zone ...;
          ...
          server example.com resolve;
       }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9

    fair

    根据服务器的响应时间来分配请求,响应时间短的优先分配,即负载压力小的优先会分配。

    由于fair模块是第三方提供的,所以在编译nginx源码的时候,需要将fair添加到nginx模块中。

    2> url_hash

    按请求url的hash结果来分配请求,使每个url定向到同一个后端服务器,服务器做缓存时比较有效。

    1.7.2版本以后,url_hash模块已经集成到了nginx源码当中,不需要单独安装。之前的版本仍需要单独安装,下载地址:https://github.com/evanmiller/nginx_upstream_hash
    安装方法和fair模块一样,先下载url_hash源码,然后重新编译nginx源码,将url_hash模块添加到编译配置参数当中,最后将编译后生成的nginx二进制文件替换之前安装的nginx二进制文件即可。

  • 相关阅读:
    设计模式之状态模式
    【C/C++】动态库和静态库:性能、编译时和运行时的差异
    6.Docker网络
    ts 类型体操 Chainable Options 可链式选项
    MySQL数据库的基本操作及存储引擎的使用
    Secureboot概念
    编写内联函数求解 2x²+4x+5的值,并用主函数调用该函数
    CREO:CREO软件之零件【模型】之操作、基准、形状、扫描、工程、编辑、曲面的简介及其使用方法(图文教程)之详细攻略
    Leetcode-每日一题792. 匹配子序列的单词数(分桶)
    线程池实现简单案例(C语言)
  • 原文地址:https://blog.csdn.net/weixin_43599304/article/details/125539645