美文网首页
Nginx之upstream负载均衡

Nginx之upstream负载均衡

作者: 信仰与初衷 | 来源:发表于2018-05-15 21:55 被阅读0次
    • 1. 准备三台机器

    192.168.2.151 web服务器
    192.168.2.152 web服务器
    192.168.2.150 负载均衡服务器

    • 2. 三台机器都配置,其中151,152作为web服务器,150作为负载均衡

    ubuntu/debian

    sudo apt update -y
    sudo apt install nginx
    

    centos

    sudo yum install nginx -y
    

    安装成功后启动nginx

    • 3 配置负载均衡服务器:
    vim /etc/nginx/nginx.conf
    

    内容如下:

    user  www-data;  
    worker_processes  1;  
      
    error_log  /var/log/nginx/error.log warn;  
    pid        /var/run/nginx.pid;  
      
      
    events {  
        worker_connections  1024;  
    }  
      
      
    http {  
        include       /etc/nginx/mime.types;  
        default_type  application/octet-stream;  
      
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
                          '$status $body_bytes_sent "$http_referer" '  
                          '"$http_user_agent" "$http_x_forwarded_for"';  
      
        access_log  /var/log/nginx/access.log  main;  
      
        sendfile        on;  
        #tcp_nopush     on;  
      
        keepalive_timeout  65;  
      
        #gzip  on;  
        upstream your.website.name {  
              server 192.168.2.151:80;  
              server 192.168.2.152:80;  
        }  
          
      
        server {     
            listen       80;
            server_name your.website.name;       
            charset utf-8;     
            location / {        
                proxy_pass        http://your.website.name;     
                proxy_set_header  X-Real-IP  $remote_addr;     
                client_max_body_size  100m;  
            }     
        
        
            location ~ ^/(WEB-INF)/ {      
                   deny all;      
            }      
        
            error_page   500 502 503 504  /50x.html;     
            location = /50x.html {     
                root   /var/www/html/;     
            }     
        }     
    }  
    

    浏览器打开192.168.2.150,如果151、152交替显示则表明试验成功。

    • 4. 其他的功能扩展

    (1)、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    upstream your.website.name {  
          server 192.168.2.151:80;  
          server 192.168.2.152:80;  
    }
    

    (2)、weight
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如:

    upstream your.website.name {
         server 192.168.2.151 weight=5 max_fails=3 fail_timeout=20s;;
         server 192.168.2.152 weight=10 max_fails=3 fail_timeout=20s;;
    }
    

    (3)、ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。例如:

    upstream your.website.name {
         ip_hash;
         server 192.168.2.151:80;
         server 192.168.2.152:80;
    }
    

    (4)、fair(需要安装第三方库upstream-fair支持)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。

    upstream your.website.name {
         server 192.168.2.151:80;
         server 192.168.2.152:80;
         fair;
    }
    

    (5)、url_hash(需要安装第三方库Nginx_upstream_hash支持)

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

    upstream your.website.name {
         server 192.168.2.151:80;
         server 192.168.2.152:80;
          hash $request_uri;
          hash_method crc32;
    }
    

    (6)、建议

    upstream your.website.name{ #定义负载均衡设备的Ip及设备状态
          ip_hash;
          server 127.0.0.1:8000 down;
          server 127.0.0.1:8080 weight=2;
          server 127.0.0.1:6801;
          server 127.0.0.1:6802 backup;
    }
    

    解释:
    1.down 表示单前的server暂时不参与负载
    2.weight 默认为1.weight越大,负载的权重就越大。
    3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
    4.fail_timeout:max_fails次失败后,暂停的时间。
    5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    • 5.总结

    实际上,我们可以部署时,设置服务器作为backup备份,设置服务器暂时不开启(down),必要活动时在开启,跟进服务器的不同配置设置不同的比重(weight),还可以设置默认同一个ip自动进同一个服务器,这样保证session的一致性。

    相关文章

      网友评论

          本文标题:Nginx之upstream负载均衡

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