精华内容
下载资源
问答
  • 负载均衡详解

    2018-03-22 16:06:00
    目录 负载均衡简介 负载均衡分类 二层负载均衡 三层负载均衡 四层负载均衡 四层、七层负载均衡对比 四层与七层技术原理上的区别 七层应用需要考虑的问题 ...@(Linux服务)[负载均衡详解...

    @(Linux服务)[负载均衡详解]
    负载均衡详解
    ----

    负载均衡简介

     负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。我们比较常用的例如:HAPoryx、LVS、nginx这三种。

    负载均衡分类

     我们最常见的负载均衡通常是四层和七层负载均衡。下面介绍四种:

    二层负载均衡

     负载均衡服务器对外依然提供一个VIP(虚拟IP),在集群中不同的机器采用相同IP地址,但是机器的MAC地址不一样。当负载均衡服务器接收到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

    三层负载均衡

     和二层负载均衡类似,负载均衡服务器对外提供一个VIP(虚拟IP),但是集群中不同的机器采用不同的IP地址。负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过ip将请求转发至不同的真实服务器。

    四层负载均衡

    四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口以及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

    七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radiuus、dns等。七层负载均衡就可以基于这些协议来负载。这些应用层协议中包含很多有意义的内容。比如同一个web服务器的负载均衡,除了根据IP加端口进行负载外,还可以根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
    对于一般的应用来说,有nginx就够了。nginx也可以用于七层负载均衡。但是对于一些大的网站。一般采用的是DNS+四层负载均衡+七层负载均衡的方式进行多层次负载均衡。

    四层、七层负载均衡对比

    所谓的四层即传输层,就是基于IP+端口的负载均衡(修改包头目标地址+修改源地址转发);
    七层即应用层,即使基于URL等应用层信息的负载均衡(proxy code代理);
    二层负载均衡,即基于MAC地址
    三层负载均衡基于IP;

    也可以这样理解:
    二层负载均衡会通过一个虚拟的MAC地址接受请求,然后在分配到真实的MAC地址;

    三层负载均衡通过一个虚拟的IP地址接收请求,然后在分配到真是的IP地址;

    四层负载均衡虚拟 IP + 端口接收请求,然后再分配到真实的服务器;

    七层负载均衡通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。

     所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。

    四层负载均衡就是通过发布的三层地址(VIP),然后加四层的端口号来决定那些流量需要做负载均衡。对需要处理的流量进行 NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,
    后续这个连接的所有流量都同样转发到同一台服务器处理。

    七层的负载均衡,就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征, 比如同一个 Web 服务器的负载均衡,除了根据 VIP 加 80 端口辨别是否需要处理的流量, 还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。

    负载均衡器通常成为四层交换机或七层交换机

    四层交换机主要分析IP层及TCP/UDP层,实现四层流量负载均衡。七层交换机除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URL或者Cookie信息。

    要明白 4 层负载均衡本质是转发,而 7 层负载本质是内容交换和代理

    四层与七层技术原理上的区别

    四层负载均衡:
    负载均衡设备在接收到第一个来自客户端的 SYN 请求时,选择一个最佳的服务器, 并对报文中的目标 IP 地址进行修改(改为后端服务器 IP),直接转发给该服务器。 TCP 的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。

    为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。
    七层负载均衡:
    主要通过报文中的真正有意义的应用层内容,负载均衡设备如果要根据真正的应用层内容再选择服务器,只能先代理最终的服务器和客户端建立连接(TCP 三次握手)后,才可能接收到客户端发送的真正应用层内容的报文, 然后再根据该报文中的特定字段,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。

    七层应用需要考虑的问题

    七层应用的确可以提高流量智能化,同时必不可免的带来设备配置复杂,负载均衡压力增高以及故障排查上的复杂性等问题。在设计系统时需要考虑四层七层同时应用的混杂情况。

    是否真的可以提高安全性。例如 SYN Flood 攻击,七层模式的确将这些流量从服务器屏蔽,但负载均衡设备本身要有强大的抗 DDoS 能力,
    否则即使服务器正常而作为中枢调度的负载均衡设备故障也会导致整个应用的崩溃。

    是否有足够的灵活度。七层应用的优势是可以让整个应用的流量智能化,但是负载均衡设备需要提供完善的七层功能,满足客户根据不同情况的基于应用的调度。

    最简单的一个考核就是能否取代后台 Nginx 或者 Apache 等服务器上的调度功能。

    能够提供一个七层应用开发接口的负载均衡设备,可以让客户根据需求任意设定功能,才真正有可能提供强大的灵活性和智能性。

    参考地址:http://mp.weixin.qq.com/s/MA6qsSUKp2YMg6_RyLlwxQ

    转载于:https://www.cnblogs.com/xiaogongzi/p/8624489.html

    展开全文
  • 下面小编就为大家分享一篇windows第四层负载均衡_基于NLB负载均衡详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 下面小编就为大家分享一篇windows第七层负载均衡_基于IIS的ARR负载均衡详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • windows第第四四层层负负载载均均衡衡_基基于于NLB负负载载均均衡衡详详解解 下面小编就为大家分享一篇windows第四层负载均衡_基于NLB负载均衡详解具有很好的参考价值希望对大家 有所帮助 一起跟随小编过来看看吧 ...
  • 负载均衡详解

    大型网站架构系列:负载均衡详解(上)

    负载均衡(上)

    面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。


    从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,从集中到分布的问题,但是每个部署的独立业务还存在单点的问题和访问统一入口问题,为解决单点故障,我们可以采取冗余的方式。将相同的应用部署到多台机器上。解决访问统一入口问题,我们可以在集群前面增加负载均衡设备,实现流量分发。


    负载均衡(Load Balance),意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。


    本文是负载均衡详解的第一篇文章,介绍负载均衡的原理,负载均衡分类(DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡,混合型P负载均衡)。部分内容摘自读书笔记。


    本次分享大纲


    1.负载均衡原理


    2.DNS负载均衡


    3.HTTP负载均衡


    4.IP负载均衡


    5.链路层负载均衡


    6.混合型P负载均衡


    一、负载均衡原理


    系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。这就是典型的集群和负载均衡架构:如下图:



    应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。


    负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)


    负载均衡的作用(解决的问题):


    1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);


    2.提供故障转移,实现高可用;


    3.通过添加或减少服务器数量,提供网站伸缩性(扩展性);


    4.安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)


    二、负载均衡分类


    根据实现技术不同,可分为DNS负载均衡,HTTP负载均衡,IP负载均衡,链路层负载均衡等。


    2.1DNS负载均衡


    最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。如下图:




    优点


    1. 使用简单:负载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦


    2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;


    缺点


    1. 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;


    2. 扩展性低:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;


    3. 维护性差:也不能反映服务器的当前运行状态;支持的算法少;不能区分服务器的差异(不能根据系统与服务的状态来判断负载)


    实践建议


    将DNS作为第一级负载均衡,A记录对应着内部负载均衡的IP地址,通过内部负载均衡将请求分发到真实的Web服务器上。一般用于互联网公司,复杂的业务系统不合适使用。如下图:




    1.3  IP负载均衡


    在网络层通过修改请求目标地址进行负载均衡。


    用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为,获得的真实ip地址,不需要经过用户进程处理。


    真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的ip地址,发送给用户浏览器。如下图:




    IP负载均衡,真实物理服务器返回给负载均衡服务器,存在两种方式:(1)负载均衡服务器在修改目的ip地址的同时修改源地址。将数据包源地址设为自身盘,即源地址转换(snat)。(2)将负载均衡服务器同时作为真实物理服务器集群的网关服务器。


    优点:


    (1)在内核进程完成数据分发,比在应用层分发性能更好;


    缺点:


    (2)所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽;


    2.4链路层负载均衡


    在通信协议的数据链路层修改mac地址,进行负载均衡。


    数据分发时,不修改ip地址,指修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。


    实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。如下图:




    优点:性能好;


    缺点:配置复杂;


    实践建议:DR模式是目前使用最广泛的一种负载均衡方式。


    2.5混合型负载均衡


    由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。将这种方式称之为混合型负载均衡。


    此种方式有时也用于单台均衡设备的性能不能满足大量连接请求的情况下。是目前大型互联网公司,普遍使用的方式。


    方式一,如下图:




    以上模式适合有动静分离的场景,反向代理服务器(集群)可以起到缓存和动态请求分发的作用,当时静态资源缓存在代理服务器时,则直接返回到浏览器。如果动态页面则请求后面的应用负载均衡(应用集群)。


    方式二,如下图:




    以上模式,适合动态请求场景。


    因混合模式,可以根据具体场景,灵活搭配各种方式,以上两种方式仅供参考。


    三、负载均衡算法


    常用的负载均衡算法有,轮询,随机,最少链接,源地址散列,加权等方式;


    3.1 轮询


    将所有请求,依次分发到每台服务器上,适合服务器硬件同相同的场景。


    优点:服务器请求数目相同;


    缺点:服务器压力不一样,不适合服务器配置不同的情况;


    3.2 随机


    请求随机分配到各个服务器。

    优点:使用简单;


    缺点:不适合机器配置不同的场景;


    3.3 最少链接


    将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。


    优点:根据服务器当前的请求处理情况,动态分配;


    缺点:算法实现相对复杂,需要监控服务器请求连接数;


    3.4 Hash(源地址散列)


    根据IP地址进行Hash计算,得到IP地址。


    优点:将来自同一IP地址的请求,同一会话期内,转发到相同的服务器;实现会话粘滞。


    缺点:目标服务器宕机后,会话会丢失;


    3.5 加权


    在轮询,随机,最少链接,Hash’等算法的基础上,通过加权的方式,进行负载服务器分配。


    优点:根据权重,调节转发服务器的请求数目;


    缺点:使用相对复杂;


    四、硬件负载均衡


    采用硬件的方式实现负载均衡,一般是单独的负载均衡服务器,价格昂贵,一般土豪级公司可以考虑,业界领先的有两款,F5和A10。


    使用硬件负载均衡,主要考虑一下几个方面:


    (1)功能考虑:功能全面支持各层级的负载均衡,支持全面的负载均衡算法,支持全局负载均衡;


    (2)性能考虑:一般软件负载均衡支持到5万级并发已经很困难了,硬件负载均衡可以支持


    (3)稳定性:商用硬件负载均衡,经过了良好的严格的测试,从经过大规模使用,在稳定性方面高;


    (4)安全防护:硬件均衡设备除具备负载均衡功能外,还具备防火墙,防DDOS攻击等安全功能;


    (5)维护角度:提供良好的维护管理界面,售后服务和技术支持;


    (6)土豪公司:F5 Big Ip 价格:15w~55w不等;A10 价格:55w-100w不等;


    缺点


    (1)价格昂贵;


    (2)扩展能力差;


    4.4小结


    (1)一般硬件的负载均衡也要做双机高可用,因此成本会比较高。


    (2)互联网公司一般使用开源软件,因此大部分应用采用软件负载均衡;部分采用硬件负载均衡。


    比如某互联网公司,目前是使用几台F5做全局负载均衡,内部使用Nginx等软件负载均衡。

    展开全文
  • Nginx 代理与负载均衡详解  nginx除了可以做网站的虚拟主机之外,还可以做代理器,并且, nginx在代理器的基础上可以做到负载均衡。   一、代理器:  所谓代理器,即接受请求,将请求进行转发,得到结果然后...
  • Nginx 反向代理与负载均衡详解
  • 主要介绍了Java Grpc实例创建负载均衡详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 大型网站架构系列:负载均衡详解
  • Nginx负载均衡详解

    千次阅读 多人点赞 2019-06-05 13:44:46
    Nginx负载均衡详解Nginx的负载均衡策略轮询权重weightip_hashleast_conn第三方策略 接上一篇的入门,本篇主要介绍Nginx的负载均衡策略 Nginx的负载均衡策略 轮询 描述: 所有请求按照时间顺序地轮流分配到应用...

    接上一篇的入门,本篇主要介绍Nginx的负载均衡策略


    Nginx的负载均衡策略

    轮询

    • 描述: 所有请求按照时间顺序地轮流分配到应用服务器上,它可以均衡的将负载分散在后端服务器上,但是并不关心后端服务器的连接数和系统负载,它是默认的负载均衡策略。在轮序中如果服务器宕机了会自动移除服务器。一般用于后端服务器性能均等的情况下。
    • 参数:
    参数名用途
    fail_timeout设置的时间内服务器没有响应则认为服务器失效,默认10s
    max_fails允许连接失败的次数,默认1
    fail_time服务器被移除轮询队列的时间,默认10s(在移除的时间内不再被轮询请求)
    backup标记该服务器为备用服务器,当主服务器宕机时,它将会代替主服务器接收请求
    down标记此服务器永久停机
    • 配置范例:
    upstream xx.com{
    	server 192.168.12.100:5000 fail_timeout=2s max_fails=1;
    	server 192.168.12.101:5000 fail_timeout=2s max_fails=1;
    }
    
    server {
    	listen 80;
    	server_name 192.168.12.101;
    
    	location / {
    		proxy_pass http://xx.com;
    		proxy_redirect default;
    		proxy_connect_timeout 2s;
    	}
    	
    	.......省略
    }
    

    在上述配置中,如果一台服务器出现了宕机,那么等待的时间为:
    time = proxy_connect_timeout + fail_timeout * max_fails = 2 + 2 * 1 = 4s

    权重weight

    • 概述: 在轮询算法的基础上指定轮询的概率。权重越高被分配的记录越大,适合服务器硬件配置有一定差距的情况
    • 配置范例:
    upstream xx.com{
    	server 192.168.12.100:5000 weight=1;
    	server 192.168.12.101:5000 weight=1;
    	server 192.168.12.101:5000 weight=3;
    }
    

    如上图中的配置,权重为1和3,那么权重为3的服务器被轮询的几率为1的3倍。

    • 加权轮询算法

    • 概述: 加权轮询算法看似简单,例如上述的配置中,有10个请求,假设权重为1的服务器为a,b,权重为3的服务器为c。他们分配的顺序可能为:a,a,b,b,c,c,c,c,c,c。那么对b服务器将会有连续的多个请求,分布并不均匀,容器造成负载突然上升。
      所以在Nginx中目前使用的是平滑的加权轮询,它会将请求分散开不再是多个连续的,例如:c,a,b,c,c,a,c,b,c,c。

    • 算法介绍:
      首先介绍算法中的几个参数

    • weight: 配置文件中配置的weight值。
    • effective_weight: 服务器的有效权重,初始值为weight,Nginx如果发现与后端的请求中出现超时或者错误将会减少有效权重的值,降低以后再接收请求如果正常则会逐渐增加,直到等于weight。这个参数主要是为了在出现错误时降低权重值。
    • current_weight: 服务器的当前权重,初始值为0,并且在每次轮询选取服务器时会动态的调整。

    每次选取时会先遍历后端服务器,并对每个服务器的权重执行运算,current_weight = current_weight + effective_weight。(当前权重 + 有效权重)同时设定Total的值为当前所有服务器的effective_weight和

    每次选定了current_weight值最大的服务器处理请求后,将此服务器的current_weight = current_weight - total。(当前权重 - 总权重),没有被选定的权重不变。

    • 案例
      现在假设,三台服务器a,b,c的权重分别为4,2,1。那么在7此的轮询中a会被选中4次、b会被选中2次、c会被选中1次,且分布平滑
      为了方便计算,假设所有的服务器都良好可用,那么effective_weight = weight,total = weight1 + weight2 + weight3 = 7。
    次数选取时的权重值选定结果选定后的权重
    1a=0+4=4,b=0+2=2,c=1aa=4-7=-3,b=2,c=1
    2a= -3+4=1,b=2+2=4,c=1+1=2ba=1,b=4-7=-3,c=2
    35,-1,3a-2,-1,3
    42,1,4c2 ,1,-3
    56,3,-2a-1,3,-2
    63,5,-1b3,-2,-1
    77,0,0a0,0,0

    最终的顺序为a,b,a,c,a,b,a。符合预期。

    ip_hash

    • 概述: 通过对IP的Hash值进行计算然后选择分配的服务器。这个方法可以使客户端的请求发送到相同的服务器以保证session会话,并且可以使用权重。
    • 算法简介: 看不懂C语言,只能大致了解了Hash算法是将IP的前三段进行计算的
    for (i = 0; i < 3; i++) {  
    	hash = (hash * 113 + iphp->addr[i]) % 6271;  //iphp->addr[i]为ip的点分十进制法的第i段
    }
    

    根据计算出来的Hash值进行分配。

    • 配置:
    upstream xx.com{
            ip_hash;    #保证每个访客固定访问一个后端服务器
            server localhost:8080   weight=2; 
            server localhost:8081;  
            server localhost:8082;  
            server localhost:8083   max_fails=3 fail_timeout=20s;  
        }
    
    • 注意:
    1. 使用IP_Hash需要Nginx是最前端的服务器,否则无法获取到正确的客户端IP。
    2. 如果在IP_Hash的Nginx服务器之后还有其他的负载均衡,那么具体请求落在某一台服务器就无法确定了。

    least_conn

    • 概述: 最小连接算法,它会选择后台服务器中积压的连接数最少的服务器来处理当前请求。
    • 算法简介: 详细的源码分析参考这篇:https://blog.csdn.net/zhangskd/article/details/50242241。

      nginx内部会记录每个后台服务器当前的连接数和权重,使用最小连接算法时,会选出后台服务器中连接数/权重最小的服务器处理请求。

    第三方策略

    • fair: 按照服务端响应时间来分配请求,响应时间最短的优先分配。
    • url_hash: 根据URL的hash结果来分配请求,它会使每个URL定向到同一个后端服务器中
    展开全文
  • 服务器负载均衡详解及示例,tomcat集群、jvm适配等
  • IIS负载均衡详解

    2014-05-28 10:50:30
    IIS负载均衡-Application Request Route详解 1.ARR介绍 2.创建与配置Server Farm 3.使用ARR进行Http请求的负载均衡(上) 4.使用ARR进行Http请求的负载均衡(下) 5.使用ARR实现三层部署架构
  • 负载均衡详解(3)

    2017-05-24 08:45:05
    本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越,...本文参考大量文档,部分为直接拷贝,参考出处见负载均衡详解(4)。 二、Ng

    本次分享大纲

    1. 软件负载均衡概述
    2. Ngnix负载均衡
    3. Lvs负载均衡
    4. Haproxy负载均衡
    5. 本次分享总结

    一、软件负载均衡概述

    硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有Nginx,Lvs,HaProxy等。本文参考大量文档,部分为直接拷贝,参考出处见负载均衡详解(4)。

    二、Ngnix负载均衡

    Ngnix是一款轻量级的Web服务器/反向代理服务器,工作在七层Http协议的负载均衡系统。具有高性能、高并发、低内存使用等特点。是一个轻量级的Http和反向代理服务器。Nginx使用epoll and kqueue作为开发模型。能够支持高达 50,000 个并发连接数的响应。

    操作系统:Liunx,Windows(Linux、FreeBSD、Solaris、Mac OS X、AIX以及Microsoft Windows)

    开发语言:C

    并发性能:官方支持每秒5万并发,实际国内一般到每秒2万并发,有优化到每秒10万并发的。具体性能看应用场景。

    2.1.特点

    1.模块化设计:良好的扩展性,可以通过模块方式进行功能扩展。

    2.高可靠性:主控进程和worker是同步实现的,一个worker出现问题,会立刻启动另一个worker。

    3.内存消耗低:一万个长连接(keep-alive),仅消耗2.5MB内存。

    4.支持热部署:不用停止服务器,实现更新配置文件,更换日志文件、更新服务器程序版本。

    5.并发能力强:官方数据每秒支持5万并发;

    6.功能丰富:优秀的反向代理功能和灵活的负载均衡策略

    2.2.功能

    2.2.1基本功能

    • 支持静态资源的web服务器。
    • http,smtp,pop3协议的反向代理服务器、缓存、负载均衡;
    • 支持FASTCGI(fpm)
    • 支持模块化,过滤器(让文本可以实现压缩,节约带宽),ssl及图像大小调整。
    • 内置的健康检查功能
    • 基于名称和ip的虚拟主机
    • 定制访问日志
    • 支持平滑升级
    • 支持KEEPALIVE
    • 支持url rewrite
    • 支持路径别名
    • 支持基于IP和用户名的访问控制。
    • 支持传输速率限制,支持并发数限制。

    2.2.2扩展功能

    2.2.3性能

    Nginx的高并发,官方测试支持5万并发连接。实际生产环境能到2-3万并发连接数。10000个非活跃的HTTP keep-alive 连接仅占用约2.5MB内存。三万并发连接下,10个Nginx进程,消耗内存150M。淘宝tengine团队测试结果是“24G内存机器上,处理并发请求可达200万”。

    2.3架构

    2.3.1Nginx的基本工作模式

     

    一个master进程,生成一个或者多个worker进程。但是这里master是使用root身份启动的,因为nginx要工作在80端口。而只有管理员才有权限启动小于低于1023的端口。master主要是负责的作用只是启动worker,加载配置文件,负责系统的平滑升级。其它的工作是交给worker。那么当worker被启动之后,也只是负责一些web最简单的工作,而其他的工作都是有worker中调用的模块来实现的。

    模块之间是以流水线的方式实现功能的。流水线,指的是一个用户请求,由多个模块组合各自的功能依次实现完成的。比如:第一个模块只负责分析请求首部,第二个模块只负责查找数据,第三个模块只负责压缩数据,依次完成各自工作。来实现整个工作的完成。

    他们是如何实现热部署的呢?其实是这样的,我们前面说master不负责具体的工作,而是调用worker工作,他只是负责读取配置文件,因此当一个模块修改或者配置文件发生变化,是由master进行读取,因此此时不会影响到worker工作。在master进行读取配置文件之后,不会立即的把修改的配置文件告知worker。而是让被修改的worker继续使用老的配置文件工作,当worker工作完毕之后,直接当掉这个子进程,更换新的子进程,使用新的规则。

    2.3.2Nginx支持的sendfile机制

    Sendfile机制,用户将请求发给内核,内核根据用户的请求调用相应用户进程,进程在处理时需要资源。此时再把请求发给内核(进程没有直接IO的能力),由内核加载数据。内核查找到数据之后,会把数据复制给用户进程,由用户进程对数据进行封装,之后交给内核,内核在进行tcp/ip首部的封装,最后再发给客户端。这个功能用户进程只是发生了一个封装报文的过程,却要绕一大圈。因此nginx引入了sendfile机制,使得内核在接受到数据之后,不再依靠用户进程给予封装,而是自己查找自己封装,减少了一个很长一段时间的浪费,这是一个提升性能的核心点。

     

    以上内容摘自网友发布的文章,简单一句话是资源的处理,直接通过内核层进行数据传递,避免了数据传递到应用层,应用层再传递到内核层的开销。

    目前高并发的处理,一般都采用sendfile模式。通过直接操作内核层数据,减少应用与内核层数据传递。

    2.3.3Nginx通信模型(I/O复用机制)

    开发模型:epoll和kqueue。

    支持的事件机制:kqueue、epoll、rt signals、/dev/poll 、event ports、select以及poll。

    支持的kqueue特性包括EV_CLEAR、EV_DISABLE、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码.

    支持sendfile、sendfile64和sendfilev;文件AIO;DIRECTIO;支持Accept-filters和TCP_DEFER_ACCEP.

    以上概念较多,大家自行百度或谷歌,知识领域是网络通信(BIO,NIO,AIO)和多线程方面的知识。

    2.4均衡策略

    nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、通用hash、consistent hash等,默认不编译进nginx内核。由于在nginx版本升级中负载均衡的代码没有本质性的变化,因此下面将以nginx1.0.15稳定版为例,从源码角度分析各个策略。

    2.4.1. 加权轮询(weighted round robin)

    轮询的原理很简单,首先我们介绍一下轮询的基本流程。如下是处理一次请求的流程图:

     

    图中有两点需要注意,第一,如果可以把加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;第二,当所有后端机器都down掉时,nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态,从而导致整个前端被夯住。

    2.4.2. ip hash

    ip hash是nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是其中的算法和具体的策略有些变化,如下图所示:

     

    2.4.3. fair

    fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用。

    2.4.4 通用hash、一致性hash

    这两种也是扩展策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采用了nginx内置的一致性hash环,可以支持memcache。

    2.5场景

    Ngnix一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用。以下架构示例,仅供参考,具体使用根据场景而定。

    2.5.1入口负载均衡架构

     

    Ngnix服务器在用户访问的最前端。根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)

    2.5.2内部负载均衡架构

     

    LVS作为入口负载均衡,将请求转发到二级Ngnix服务器,Ngnix再根据请求转发到具体的应用服务器。

    2.5.3Ngnix高可用

     

    分布式系统中,应用只部署一台服务器会存在单点故障,负载均衡同样有类似的问题。一般可采用主备或负载均衡设备集群的方式节约单点故障或高并发请求分流。

    Ngnix高可用,至少包含两个Ngnix服务器,一台主服务器,一台备服务器,之间使用Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。

    DNS解析公网的IP实际为VIP。

    展开全文
  • 负载均衡详解(2)

    2017-05-24 08:44:23
    本文是负载均衡详解的第一篇文章,介绍负载均衡算法, 硬件负载均衡。部分内容摘自读书笔记。 三、负载均衡算法 常用的负载均衡算法有,轮询,随机,最少链接,源地址散列,加权等方式; 3.1 轮询 将所有请求,...
  • 大型网站架构系列:负载均衡详解(2) 原文:大型网站架构系列:负载均衡详解(2)本文是负载均衡详解的第一篇文章,介绍负载均衡算法, 硬件负载均衡。部分内容摘自读书笔记。 三、负载均衡算法 ...
  • <!-- @Author: starkwang @Contact me: ... @Date: 2019-10-23 16:48:24 @LastEditors: starkwang @LastEditTime: 2019-10-23 17:02:31 @Description: nginx负载均衡详解与搭建 --> 为什么要使...
  • nginx 负载均衡详解

    2015-05-19 16:42:18
    nginx不单可以作为强大的web服务器,也可以作为一个反向代理服务器,而且nginx还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端...
  • EtherChannel负载均衡详解

    千次阅读 2009-03-30 03:15:00
    EtherChannel负载均衡详解 EtherChannel支持跨越多个接口的流量负载均衡。常见的负载均衡技术有:基于目标IP/MAC、基于源IP/MAC、基于4层TCP/UDP端口作为负载均衡。 Catalyst交换机负载均衡算法支持的参数: 
  • 本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法。具体参考文章,详见最后的链接。   三、LVS负载均衡 LVS是一个开源的软件,由毕业于国防科技...
  • 大型网站架构系列:负载均衡详解(3) 本次分享大纲 软件负载均衡概述Ngnix负载均衡Lvs负载均衡Haproxy负载均衡本次分享总结 一、软件负载均衡概述 硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,095
精华内容 16,038
关键字:

负载均衡详解