zoukankan      html  css  js  c++  java
  • 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
    如有错误,恳请指出。
  • 相关阅读:
    vue--todolist的实现
    vue--使用定时器的问题
    vue--动态路由和get传值
    vue--非父子组件之间的传值
    Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2
    Atitit 图像处理 公共模块 矩阵扫描器
    Atitit 文档资料管理同步解决方案
    Atitit 拦截数据库异常的处理最佳实践
    Atitit 数据处理查询 中的异常标准化草案 jpa jdbc hb  oql规范attilax总结
    Atitit oodbms的查询,面向对象的sql查询jpa jpql hql
  • 原文地址:https://www.cnblogs.com/monument/p/12734791.html
Copyright © 2011-2022 走看看