Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)

Nginx (3.3万) 2020-08-31 14:47:11

6.2、常见的负载均衡方法

1、常见的负载均衡方法

web负载均衡的方法有很多种,下面介绍几种常见的负载均衡方式。

1-1、用户手动选择方式

这是一种较为古老的方式,通过在主站首页入口提供不同线路、不同服务器链接的方式,来实现负载均衡。这种方式在一些提供下载业务的网站中比较常见,例如:华军软件园,如图所示。

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第1张

1-2、DNS轮询方式

大多域名注册商都支持对同一主机名添加多条A记录,这就是DNS轮询,DNS服务器将解析请求按照A记录的顺序,随机分配到不同的IP上,这样就完成了简单的负载均衡。DNS轮询的成本非常低,在一些不重要的服务上,被经常使用。

虽然DNS轮询成本低廉,但是,DNS负载均衡存在两个明显的缺点。

1、可靠性低假设一个域名DNS轮询多台服务器,如果其中的一台服务器发生故障,那么所有的访问该服务器的请求将不会有所回应,这是任何人都不愿意看到的。即使从DNS中去掉该服务器的IP,但在Internet上,各地区电信、网通等宽带接入商将众多的DNS存放在缓存中,以节省访问时间,DNS记录全部生效需要几个小时,甚至更久。所以,尽管DNS轮流在一定程度上解决了负载均衡问题,但是却存在可靠性不高的缺点。

2、负载分配不均衡DNS负载均衡采用的是简单的轮询负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。DNS服务器是按照一定的层次结构组织的,本地DNS服务器会缓冲已解析的域名到IP地址的映射,这会导致使用该DNS服务器的用户在一段时间内访问的是同一台Web服务器,导致Web服务器间的负载不均衡。此外,用户本地计算机也会缓存已解析的域名到IP地址的映射。当多个用户计算机都缓存了某域名到IP地址的映射时,而这些用户又继续访问该域名下的网页,这时也会导致不同Web服务器间的负载分配不均衡。负载不均衡可能导致的后果有:某几台服务器负荷很低,而另几台服务器负荷很高、处理缓慢;配置高的服务器分配到的请求少,而配置低的服务器分配到的请求多。因此,DNS轮询方式仅适用于一些可靠性要求不高的服务器集群,例如:图片服务器集群、纯静态网页服务器集群等。

1-3、四/七层负载均衡设备

由于DNS轮询的缺点,一些对可靠性要求较高的服务器集群,则通过采用四/七层负载均衡设备来实现服务器的负载均衡。世界上第一个网络体系结构由IBM公司提出(1974年,名为SNA),以后其他公司也相继提出自己的网络体系结构如:Digital公司的DNA,美国国防部的TCP/IP等,多种网络体系结构并存,其结果是若采用IBM的结构,只能选用IBM的产品,只能与同种结构的网络互联。为了促进计算机网络的发展,国际标准化组织ISO于1977年成立了一个委员会,在现有网络的基础上,提出了不基于具体机型、操作系统或公司的网络体系结构,称为开放系统互联模型(OSI, opensystem interconnection)。这个模型把网络通信的工作分为七层(可参见图6-3)。一至四层被认为是低层,这些层与数据移动密切相关。五至七层是高层,包含应用程序级的数据。每一层负责一项具体的工作,然后把数据传送到下一层。由低到高具体分为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

OSI模型的最低层或第一层:物理层物理层包括物理连网媒介,实际上就是布线、光纤、网卡和其他用来把两台网络通信设备连接在一起的设施。它规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性及过程特性。虽然物理层不提供纠错服务,但它能够设定数据传输速率并监测数据出错率。
OSI模型的第二层:数据链路层数据链路层的主要作用是控制网络层与物理层之间的通信。它保证了数据在不可靠的物理线路上进行可靠的传递。它把从网络层接收到的数据分割成特定的可被物理层传输的帧,保证了传输的可靠性。它的主要作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。它是独立于网络层和物理层的,工作时无须关心计算机是否正在运行软件还是其他操作。数据链路层协议的主要内容包括:SDLC、HDLC、PPP、STP、帧中继等。
OSI模型的第三层:网络层很多用户经常混淆第二层和第三层的界限,简单来说,如果你在谈论一个与IP地址、路由协议或地址解析协议(ARP)相关的问题,那么这就是第三层的问题。网络层负责对子网间的数据包进行路由选择,它通过综合考虑发送优先权、网络拥塞程度、服务质量及可选路由的花费来决定一个网络中两个节点的最佳路径。另外,它还可以实现拥塞控制、网际互联等功能。网络层协议的主要内容包括:IP、IPX、RIP、OSPF等。
OSI模型的第四层:传输层传输层是OSI模型中最重要的一层,它是两台计算机经过网络进行数据通信时,第一个端到端的层次,起到缓冲作用。当网络层的服务质量不能满足要求时,它将提高服务,以满足高层的要求;而当网络层服务质量较好时,它只须进行很少的工作。另外,它还要处理端到端的差错控制和流量控制等问题,最终为会话提供可靠的、无误的数据传输。传输层协议的主要内容包括:TCP、UDP、SPX等。在IP协议栈中第四层是TCP(传输控制协议)和UDP(用户数据报协议)所在的协议层。TCP和UDP包含端口号,它可以唯一区分每个数据包包含哪些应用协议(例如HTTP、FTP、telnet等)。TCP/UDP端口号提供的附加信息可以为网络交换机所利用,四层交换机利用这种信息来区分包中的数据,这是第四层交换的基础。
OSI模型的第五层:会话层会话层负责在网络中的两节点之间建立和维持通信,并保持会话同步,它还决定通信是否中断,以及通信中断时决定从何处重新发送。
OSI模型的第六层:表示层表示层的作用是管理数据的解密与加密,如常见的系统口令处理,当你的账户数据在发送前被加密,在网络的另一端,表示层将对接收到的数据解密。另外,表示层还要对图片和文件格式信息进行解码和编码。
OSI模型的第七层:应用层简单来说,应用层就是为操作系统或网络应用程序提供访问网络服务的接口,包括文件传输、文件管理及电子邮件等的信息处理。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。
OSI网络模型如:

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第2张

现代负载均衡技术通常操作于OSI网络模型的第四层或第七层。第四层负载均衡将一个Internet上合法注册的IP地址映射为多个内部服务器的IP地址,对每次TCP连接请求动态使用其中一个内部IP地址,达到负载均衡的目的。在第四层交换机中,此种均衡技术得到广泛的应用,一个目标地址是服务器群VIP(虚拟IP,Virtual IP address)连接请求的数据包流经交换机,交换机根据源端和目的IP地址、TCP或UDP端口号和一定的负载均衡策略,在服务器IP和VIP间进行映射,选取服务器群中最好的服务器来处理连接请求。

第七层负载均衡控制应用层服务的内容,提供了一种对访问流量的高层控制方式,适合对HTTP服务器群的应用。第七层负载均衡技术通过检查流经的HTTP报头,根据报头内的信息来执行负载均衡任务。

常见的四/七层负载均衡设备:

1、硬件四/七层负载均衡交换机 :
硬件四/七层负载均衡交换机的代表有:F5 BIG-IP、Citrix NetScaler、Radware、Cisco CSS、Foundry等产品,这些产品价格不菲,高达几十万元人民币。在中国大陆,采用F5 Network公司的BIG-IP负载均衡交换机的网站(有些网站为部分频道采用)最多,包括:新浪网、雅虎、百度、搜狐、凤凰网、央视国际、中华英才网、猫扑、慧聪网等。图6-4是一张F5 BIG-IP实现动、静态网页分离的负载均衡架构图,很好地描述了F5 BIG-IP是如何实现四/七层负载均衡的。

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第3张

(1)如图,假设域名blog.s135.com被解析到F5的外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一个服务器池(pool_squid),该服务器池下包含两台真实的Squid服务器(192.168.1.11和192.168.1.12)。

(2)如果Squid缓存未命中,则会请求F5的内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一个默认服务器池(pool_apache_default),该服务器池下包含两台真实的Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问另外一个服务器池(pool_apache_irules),该服务器池下同样包含两台真实的Apache服务器(192.168.1.23和192.168.1.24)。

(3)另外,所有真实服务器的默认网关指向F5的自身内网IP,即192.168.1.2。

(4)所有的真实服务器通过SNAT IP地址61.1.1.4访问互联网。

2、软件四层负载均衡
软件四层负载均衡的代表作品为LVS(Linux Virtual Server),作者为曾经在国家并行与分布式处理重点实验室工作,现在已加盟淘宝网的章文嵩博士。LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无须修改客户端和服务器端的程序。为此,在设计时要考虑系统的透明性、可伸缩性、高可用性和易管理性。

LVS负载均衡的结构如图6-5所示。

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第4张

3、软件七层负载均衡
软件的七层负载均衡大多基于HTTP反向代理方式,代表产品有Nginx、L7SW(Layer7switching)、HAProxy等。Nginx的反向代理负载均衡能够很好地支持虚拟主机,可配置性很强,可以按轮询、IP哈希、URL哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

1-4、多线多地区智能DNS解析与混合负载均衡方式

以新浪首页(www.sina.com.cn)为例,负载均衡同时用到了“多线多地区智能DNS解析、DNS轮询、四/七层负载均衡交换机”等技术。智能DNS解析能够根据用户本地设置的DNS服务器线路和地区,将对同一个域名请求解析到不同的IP上。

例如:当北京电信用户访问www.sina.com.cn时,会被新浪的DNS服务器解析到北京电信机房的IP上;当北京网通用户访问www.sina.com.cn时,会被解析到北京网通机房的IP上;当教育网的用户访问 www.sina.com.cn 时,会被解析到教育网机房的IP上;当广东电信的用户访问www.sina.com.cn 时,会被解析到广州电信机房的IP上;当湖南、湖北的电信用户访问www.sina.com.cn时,会被解析到武汉电信机房的IP上,等等。

将DNS地址设为北京电信的DNS服务器219.141.136.10,通过Linux下的dig命令可以发现,访问 www.sina.com.cn 被解析到了北京电信的多台服务器的IP上,这属于智能DNS解析+DNS轮询解决负载均衡,如下图所示。

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第5张

将DNS地址设为北京网通的DNS服务器202.106.0.20,通过Linux下的dig命令可以发现,访问www.sina.com.cn最终被解析到了北京网通的一个IP地址202.108.33.32上,这属于用智能DNS解析+四/七层负载均衡交换机解决负载均衡,该IP地址202.108.33.32是四/七层负载均衡交换机的虚拟IP,如下图所示。

Nginx高性能Web服务器:Nginx HTTP负载均衡和反向代理的配置与优化(第六章)_https://www.tiejiang.org_Nginx_第6张

THE END

Leave a Reply