美文网首页
nginx upstream模块小分析

nginx upstream模块小分析

作者: 鱼_cc1f | 来源:发表于2017-05-10 23:25 被阅读0次

    nginx upstream模块初始化分分析


    • 现在项目越来越多的用到了现在nginxtcp和udp的proxy功能,配置简单,也非常的好用,但在好用的同时,也有一些注意的地方,特别是配置方面。我们来看看nginx upstream有哪一些地方的配置。
    for(j =0; j < server[i].naddrs; j++) {
      peer[n].sockaddr= server[i].addrs[j].sockaddr;   /*连接的服务器地址*/
      peer[n].socklen= server[i].addrs[j].socklen;  /*长度*/
      peer[n].name= server[i].addrs[j].name;  //donamin name  
      peer[n].weight= server[i].weight;  //权值
      peer[n].effective_weight= server[i].weight ;  //可影响的权值
      peer[n].current_weight=0; //当前的权值
      peer[n].max_fails= server[i].max_fails;  //最大的失败次数
      peer[n].fail_timeout= server[i].fail_timeout;  //超时时间
      peer[n].down= server[i].down;  //down机
      peer[n].server= server[i].name;  //服务名称
    n++;
    

    可以看得很清楚,nignx在做rr负载的时候,使用了几个参数 ,weight,current_weight,effevtive_weight,三个数据来计算节点的权值

    peer->current_weight += peer->effective_weight;
    total += peer->effective_weight;
    if(peer->effective_weight < peer->weight) {
      peer->effective_weight++;
    }
    

    每一次请求的时候,给的所有的effective_weight都是0,在每一次请求的时候,都会给各自的currevt_weight + 上effective_weight,在小于这一个值的时候,权值会再加+,直到小于所配定的权值。一个动态去调整的权值,保证整体的数据可以分流到各个服务上。若某台压力会比较大,就可以轻松的调整权值,等到压力小的时候,也可以自动的分配到原本timeout的节点。(所以为什么有的时候,请求周期长的服务器会请求量比其他的少一些。就是这个情况,因为请求生命周期太长)
    再看一个配置的检测,关于配置了Backup的配置:

    for (i = 0; i < us->servers->nelts; i++) {
    
    if (server[i].backup) {
    
    continue;
    
    }
    
    n += server[i].naddrs;
    
    w += server[i].naddrs * server[i].weight;
    
    }
    
    if (n == 0) {
    
    ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
    
    "no servers in upstream \"%V\" in %s:%ui",
    
    &us->host, us->file_name, us->line);
    
    return NGX_ERROR;
    
    }
    

    上面的代码用于reaload的时候,做配置检测,在检测的时候,会把backup的节点排除在外,若你的upstream里面只配置了backup的节点,就无法启动。而某个国内的开源的版本,少了上一段 ,所以在configTest的时候,少了上面这一段 (backup 的节点并不算实地的存活节点,在初始化的时候,作为链表放在单独的链表上了,backup->peer。 实际使用的是perrs->peer),会在实际reload nginx的时候,会导致nginx炸掉。。 项目质量很重要。。很重要。。很重要。。


    源文件地址:
    https://github.com/nginx/nginx/blob/branches/stable-1.10/src/http/ngx_http_upstream_round_robin.c 1.2

    相关文章

      网友评论

          本文标题:nginx upstream模块小分析

          本文链接:https://www.haomeiwen.com/subject/ctsntxtx.html