A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 chenquanyi626 于 2018-7-19 17:27 编辑

     企业在解决高并发问题时,一般有两个方向的处理策略,软件、硬件,硬件上添加负载均衡器分发大量请求,软件上可在高并发瓶颈处:数据库+web服务器两处添加解决方案,其中web服务器前面一层最常用的的添加负载方案就是使用nginx实现负载均衡。

一、负载均衡的作用
     1、转发功能
          按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
     2、故障移除
          通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
     3、恢复添加
              如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

二、安装nginx和tomcat
      1、安装了两个Tomcat
            端口分别是8089和8090。第二个tomcat的首页随便加了些代码区分,Tomcat使用的是解压版的
      2、nginx配置
[JavaScript] 纯文本查看 复制代码
#这里的域名要和下面proxy_pass的一样
upstream  fengzp.com {   
    server    192.168.50.100:8089 weight=1; 
    server    192.168.50.100:8090 weight=2;  
}     

server {  
    listen       80; 
    server_name  192.168.50.100;  

location / {  
        proxy_pass [url=http://fengzp.com]http://itheima.com[/url];  
        proxy_redirect default;  
    }  

    error_page   500 502 503 504  /50x.html;  
    location = /50x.html {  
        root   html;  
    }  
}

三、测试

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




四、后续配置问题
        如果关了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秒就可以了。

五、负载均衡策略


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

[AppleScript] 纯文本查看 复制代码
upstream  itheima.com {   
    server   192.168.50.100:8089; 
    server   192.168.50.100:8090;  
}

2、最少连接
       把请求分配到连接数最少的server
[AppleScript] 纯文本查看 复制代码
upstream  itheima.com {   
    least_conn;
    server   192.168.50.100:8089; 
    server   192.168.50.100:8090;  
}

3、权重
使用weight来指定server访问比率,weight默认是1。以下配置会是server2访问的比例是server1的两倍。
[AppleScript] 纯文本查看 复制代码
upstream  itheima.com {   
    server   192.168.50.100:8089  weight=1; 
    server   192.168.50.100:8090  weight=2;  
}

4、ip_hash
      每个请求会按照访问ip的hash值分配,这样同一客户端连续的Web请求都会被分发到同一server进行处理,可以解决session的问题。如果server挂掉,能自动剔除。
[AppleScript] 纯文本查看 复制代码
upstream  itheima.com {   
    ip_hash;
    server   192.168.50.100:8089; 
    server   192.168.50.100:8090;  
}
     ip_hash可以和weight结合使用
总而言之,负载均衡不论是各种软件或硬件上的解决方案,主要还是将大量的并发请求按照一定的规律分发给不同的服务器处理,从而减少某台服务器的瞬时压力,提高网站的抗并发能力。nginx在负载均衡的应用之所以广泛,这归功于它的灵活配置。


4 个回复

倒序浏览
优秀,奈斯
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马