zoukankan      html  css  js  c++  java
  • 利用nginx实现负载均衡

    1、安装nginx和tomcat

    我这里是使用docker安装的。安装流程可参照 dockerfile

    这里安装了两个tomcat,端口分别是42000和42001。第二个tomcat的首页随便加了些代码区分

    2、nginx配置

    #这里的域名要和下面proxy_pass的一样
    upstream  fengzp.com {   
        server    192.168.99.100:42000  weight=1; 
        server    192.168.99.100:42001  weight=2;  
    }     
    
    server {  
        listen       80; 
        server_name  192.168.99.100;  
    
    location / {  
            proxy_pass http://fengzp.com;  
            proxy_redirect default;  
        }  
    
        error_page   500 502 503 504  /50x.html;  
        location = /50x.html {  
            root   html;  
        }  
    }
    

    3、测试

    刷新页面发现页面会发生变化,证明负载配置成功。因为我配的权重第二个是第一个的两倍,所以第二个出现的概率会是第一个的两倍。

    4、后续问题

    如果关了tomcat1,再多次刷新页面,接下来出现的就会都是tomcat2的页面,但是时而快时而慢。这其中原因是当如果nginx将请求转发到tomcat2时,服务器会马上跳转成功,但是如果是转到tomcat1,因为tomcat1已经关闭了,所以会出现一段等待响应过程的过程,要等它失败后才会转到tomcat2。
    而这个等待响应的时间我们是可以配置的。

    这个时间由以下3个参数控制:
    proxy_connect_timeout:与服务器连接的超时时间,默认60s
    fail_timeout:当该时间内服务器没响应,则认为服务器失效,默认10s
    max_fails:允许连接失败次数,默认为1

    等待时间 = proxy_connect_timeout + fail_timeout * max_fails

    如果我这样配置的话,只需等待6秒就可以了。

    5、负载均衡策略

    1、轮询

    这种是默认的策略,把每个请求按顺序逐一分配到不同的server,如果server挂掉,能自动剔除。

    upstream  fengzp.com {   
    	server   192.168.99.100:42000; 
    	server   192.168.99.100:42001;  
    }
    

    2、最少连接

    把请求分配到连接数最少的server

    upstream  fengzp.com {   
    	least_conn;
    	server   192.168.99.100:42000; 
    	server   192.168.99.100:42001;  
    }
    

    3、权重

    使用weight来指定server访问比率,weight默认是1。以下配置会是server2访问的比例是server1的两倍。

    upstream  fengzp.com {   
    	server   192.168.99.100:42000 weight=1; 
    	server   192.168.99.100:42001 weight=2;  
    }
    

    4、ip_hash

    每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。

    upstream  fengzp.com {   
    	ip_hash;
    	server   192.168.99.100:42000; 
    	server   192.168.99.100:42001;  
    }
    

    ip_hash可以和weight结合使用。

  • 相关阅读:
    苹果一体机发射Wi-Fi
    iphone 屏蔽系统自动更新,消除设置上的小红点
    data parameter is nil 异常处理
    copy与mutableCopy的区别总结
    java axis2 webservice
    mysql 远程 ip访问
    mysql 存储过程小问题
    mysql游标错误
    is not writable or has an invalid setter method错误的解决
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
  • 原文地址:https://www.cnblogs.com/andyfengzp/p/6434125.html
Copyright © 2011-2022 走看看