高并发负载均衡——nginx与lvs

1、企业级web项目架构

  1、企业级web项目架构图

  

  2、架构分析

  1. 客户端经过企业防火墙发送请求
  2. 在App服务器如tomcat接收客户端请求前,面对高并发大数据量访问的企业架构,会经过加入负载均衡主备服务器将请求进行转发到不一样web服务其中。
  3. 服务器经过访问数据库进行交互,一样高并发大数据会涉及到数据库处理高并发的方案
  4. 另外会添加多台服务器用做缓存、消息处理等

  3、高并发

  一、高并发通常会发生在下面两处

  1. 负载均衡处 
  2. 数据库高并发;

  二、高并发初期解决方案

  应对高并发,解决方案大多从服务器级别和应用程序级别【硬件和软件】两个方向进行html

  第一个方向:增大服务器的CPU,增长内存,或者直接购买高性能服务器。但随着业务的不断增长,服务器性能也达到瓶颈。前端

  第二个方向:从应用程序级别也就是软件设计编码方向,如HTML静态化、图片服务器分离、分布式缓存,减小客户端访问时并发请求的数据。 nginx

  3种利用负载均衡解决高并发访问的方案web

2、DNS

  1、什么是DNS

  简单理解:Domain Name System,域名系统是因特网上做为域名和IP地址相互映射的一个分布式数据库,可以使用户更方便的访问互联网。例如咱们将程序发布到192.168.55.145 和144两台服务器上,经过DNS能够设置一个统一的访问入口,如www.Max1209.com对这两台服务器上的服务进行访问。用户直接访问www.Max1209.com主机名而不需记住机器IP,经过主机名,最终获得该主机名进行域名解析获得对应的IP地址进行访问。算法

   2、DNS实现负载均衡

  在DNS服务器中,能够为多个不一样的IP配置同一个名字,这个数据被发送给其余名字服务器,而最终查询这个名字的客户机将在解析这个名字时随机使用其中一个地址。所以,对于同一个名字,不一样的客户机会获得不一样的地址,所以不一样的客户访问的也就是不一样地址的Web服务器。数据库

  简单说,也就是一个外观,给部署了同一个网站的n多台服务器设置同一个名字,不一样地区或者不一样特色的用户访问同一个名字,实际接收客户请求的是外观里的不一样ip的服务器,从而达到负载均衡的目的。后端

  同时面对更高访问量需求,DNS能够以设置成树状,多个DNS服务器将请求分发给下一个DNS服务器,N层解析以后再访问到应用服务器,这样就能够增长应用服务器的个数,应对更大并发数据请求。缓存

   

  但使用DNS负载均衡的时候,若是服务器发生故障,DNS继续把请求发送给故障机器,一直到把故障服务器从DNS中移走为止,这样用户就只能等到DNS链接超时后才能访问到目标网站。tomcat

  3、负载均衡实现的效果

  解决方案即可以横向扩充n台应用服务器,而且客户端访问与应用服务器中间加上负载均衡配置,负载均衡能实现的效果主要有三个:服务器

  1. 转发功能:按照必定的算法【权重、轮询】,将客户端请求转发到不一样应用服务器上,减轻单个服务器压力,提升系统并发量。
  2. 故障移除:经过心跳检测的方式,判断应用服务器当前是否能够正常工做,若是服务器期宕掉,自动将请求发送到其余应用服务器。
  3. 恢复添加:如检测到发生故障的应用服务器恢复工做,自动将其添加处处理用户请求队伍中。

3、nginx

  1、nginx简介

  一、nginx应用

  Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特色是占有内存少,并发能力强,中国大陆使用nginx网站用户有:百度、新浪、网易、腾讯等。

  二、nginx的优势

  1. 能够运行在多个平台:Linux、Windows等
  2. 在高并发状况下,Nginx 可支持高达50000个并发链接数的响应。

  2、nginx如何实现负载均衡

  一、Nginx反向代理

  Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,而后将请求转发给内部网络上的应用服务器,并将从服务器上获得的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理。

  二、Nginx转发策略:upstream目前支持的分配算法

  Nginx转发请求可按照调度规则经过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器作负载均衡,同时还支持后端服务器的健康检查,也就是上面讲的故障移除和恢复添加功能。

    一、轮询(默认)       

  每一个请求按时间顺序逐一分配到不一样的应用服务器,若是应用服务器down掉,能自动剔除。

    二、权重   

  经过配置权重,指定轮询概率,权重和访问比率成正比,用于应用服务器性能不均的状况。 

    三、ip_哈希算法

  每一个请求按访问ip的hash结果分配,这样每一个访客固定访问一个应用服务器,能够解决session共享的问题。

  3、配置Nginx的负载均衡与分发策略:upstream配置

  扩展知识点:Nginx配置4层负载

  https://www.aliyun.com/jiaocheng/130203.html

  https://blog.csdn.net/hu2010shuai/article/details/54668471

  总结:

  默认支持七层代理转发:基于HTTP;--with-stream为四层代理转发:基于TCP,UDP;

 

  Nginx TCP负载均衡原理上和LVS等是一致的,工做在更为底层,性能会高于原来HTTP负载均衡很多。可是,不会比LVS更为出色,LVS被置于内核模块,而Nginx工做在用户态,并且,Nginx相对比较重。

  一、经过在upstream参数中添加的应用服务器IP后添加指定参数便可实现

upstream tomcatserver1 {  
    server 192.168.72.49:8080 weight=3;  
    server 192.168.72.49:8081;  
}   
  
 server {  
        listen       80;  
        server_name  8080.max.com;  
        #charset koi8-r;  
        #access_log  logs/host.access.log  main;  
        location / {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        }  
}   

  经过以上配置,即可以实现,在访问8080.max.com这个网站时,因为配置了proxy_pass地址,全部请求都会先经过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 tomcatsever1的地址,读取分发策略,配置tomcat1权重为3,因此nginx会将大部分请求发送给49服务器上的tomcat1,也就是8080端口;较少部分给tomcat2来实现有条件的负载均衡,固然这个条件就是服务器一、2的硬件指数处理请求能力。 

  二、upstream深刻配置

upstream myServer {    
  
    server 192.168.72.49:9090 down;   
    server 192.168.72.49:8080 weight=2;   
    server 192.168.72.49:6060;   
    server 192.168.72.49:7070 backup;   
}  
    一、down

  表示单前的server暂时不参与负载

    二、Weight

  默认为1.weight越大,负载的权重就越大。

    三、max_fails

  容许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

    四、fail_timeout

  max_fails 次失败后,暂停的时间。

    五、Backup

  其它全部的非backup机器down或者忙的时候,请求backup机器。因此这台机器压力会最轻。

  4、Nginx的高可用

  除了要实现网站的高可用,也就是提供n多台服务器用于发布相同的服务,添加负载均衡服务器分发请求以保证在高并发下各台服务器能相对饱和的处理请求。一样,负载均衡服务器也须要高可用,以防若是负载均衡服务器挂掉了,后面的应用服务器也紊乱没法工做。

  实现高可用的方案:添加冗余。添加n台nginx服务器以免发生上述单点故障。具体方案详见下文:keepalive+nginx实现负载均衡高可用

4、LVS

  1、LVS简介

  一、什么是LVS

  Linux Virtual Server,Linux虚拟服务器,主要使用集群技术实现和Linux操做系统实现一个高性能、高可用的服务器虚拟的服务器集群系统。

  二、LVS主要组成部分

    一、负载调度器(load balancer/ Director)

  它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(咱们可称之为虚拟IP地址)上的。简单理解这个调度器跟Nginx的反向代理服务、DNS的域名解析实现的是一样功能。对外提供统一虚拟IP,实际用户访问的是LVS经过转发请求到指定服务器上的应用。

    二、服务器池(server pool/ Realserver)

  一组真正执行客户请求的服务器,执行的服务通常有WEB、MAIL、FTP和DNS等。

    三、共享存储(shared storage)

  它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。这也是LVS跟Nginx区别之处:LVS可经过共享存储结构实现多个应用服务器间的session共享。

  三、LVS如何实现负载均衡

  LVS主要经过IP负载均衡技术VS/NAT、VS/TUN、VS/DR实现负载均衡。简单介绍第一个VS/NAT,它是一种最简单的方式,全部的RealServer只须要将本身的网关指向Director便可。客户端能够是任意操做系统,但此方式下,一个Director可以带动的RealServer比较有限。在VS/NAT的方式下,Director也能够兼为一台RealServer。

  2、LVS+Keepalived高可用

   http://www.javashuo.com/article/p-meastvjx-eb.html

相关文章
相关标签/搜索