负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
系列文章:
负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础
服务器负载均衡在服务器世界中并不是一个新的概念。我们已经发明了许多集群技术来实现联合计算,但是只在少数专有系统上得到应用。虽然如此,负载均衡已经成为许多领域的主流应用强有力的解决方案,包括服务器群的扩展能力,高可用性能力,安全性和可管理性。
首先,负载均衡通过在多台服务器之间分发负载的方式显著地提高了应用和服务器群的可扩展能力。
其次,负载均衡提高了应用系统的可用性因为它能够在一台服务器或者应用出现故障的时候把流量导向备用的服务器。
第三,负载均衡可以通过多种方式提高可管理性。它可以让网络或系统管理员将应用轻松地从一台服务器迁移到另外一台服务器或增加更多的服务器来运行应用程序。最后,也是相当重要的,负载均衡通过保护服务器群免受多种类型的DOS攻击从而提高了应用和服务器系统的安全性。
互联网络的到来带来了很多新的应用和服务:Web,DNS,FTP,SMTP等等。幸运的是,区分并处理互联网络的流量是非常容易的。因为互联网络有大量的客户端请求特定的服务,而且每个客户端可以通过IP地址来识别,这样一来,就使分发负载到多台运行同样软件、提供同样服务的服务器的工作具备了可行性。
本篇介绍服务器负载均衡的基本概念,并涵盖了便于读者理解负载均衡工作原理的基础知识。很多不同的应用系统都可以做负载均衡,通常采用负载均衡产品来管理Web服务器群。因此,我们就以Web服务器为例来讨论和理解负载均衡,所有这些概念也适用于其他的应用。
网络基础
首先,我们来讨论一下二三层交换、TCP和Web服务器等负载均衡的基础知识。然后在介绍负载均衡之前我们先了解一下从Web服务器获取一个页面的请求和回应的过程。
1 交换技术入门
现在简单介绍一下二层和三层交换的工作原理,为理解负载均衡概念提供必要的基础知识,关于这个话题详细的讨论不在本书所涵盖的范围之内。
MAC (介质访问控制)地址在以太网中定义了唯一一个网络硬件的实体,IP (互联网络协议)地址定义了互联网络中唯一一个主机。交换机接收数据包的端口称为入口,而交换机发送数据包的端口叫出口。交换机在其入口接收数据包,选择出口并转发数据包。不同的交换机的区别在于使用的用于选择出口的信息不同,并且有的交换机在数据包被发送出去之前会修改一些信息。 二层交换机接收到数据包之后,根据数据包的二层包头信息决定其目的地址,例如MAC地址,并转发数据包。相对的,三层交换基于第三层的包头信息,例如数据包中的IP地址。三层交换机在转发数据包之前根据数据包的目的IP地址,把目地MAC地址修改为下一跳或者目的IP地址的MAC地址。三层交换机也被称为路由器,三层交换也通常被称为路由。负载均衡器检查数据包第四层的信息甚至五至七层的信息来做交换决策,因此被称为四到七层交换机。作为负载均衡功能的一部分,负载均衡器也处理二三层交换的工作,所以有时也被称为二到七层交换机。
为了使网络更加易于管理,网络被细分为许多子网。子网通常是指在一栋楼或者一层楼内连接许多计算机或者是数据中心内连接一群服务器的网络。所有在一个子网内的通讯均可以由二层交换来实现。ARP协议(地址解析解析),在RFC 826中定义,是一个非常重要的二层交换协议。所有的以太网络设备都是采用ARP协议来学习MAC地址与IP地址的对应关系。网络设备可以通过ARP协议广播它的MAC地址和IP地址,让同一个子网中的其他设备知道它的存在。广播消息会到达同一个子网内的所有设备,因此也被称为广播域。采用ARP协议,所有的设备都能够了解这一子网中其他设备的存在。至于子网之间的通讯,需要三层交换机或者路由器之类的网关(gateway)设备。任何一台计算机必须连接到一个子网并设置缺省的网关,才能与其他子网的计算机互相通讯。
2 TCP概述
传输控制协议(TCP),在RFC 793中定义,是目前两个主机之间可靠地交换数据最常用的一种协议。TCP协议是一个有状态协议,也就是说必须经过建立TCP连接,交换数据和终止连接的过程。TCP保证了数据的有序发送,并且通过校验值保证数据的完整接收,运行在TCP协议之上的高层应用就不需要再考虑数据完整性的问题了。如图1.1中的OSI模型所示,TCP是四层协议。
TCP的工作方式如下图所示,建立TCP连接需要三次握手,在这一例子中,客户端想与服务器交换数据,客户端发送一个SYN数据包到服务器。SYN包中的重要信息包括源IP地址、源端口、目的IP地址、目的端口。源IP地址是客户端的IP地址,而源端口是由客户端随机生成的。目的IP地址是服务器的IP地址,而目的端口地址是服务器上应用的监听端口。标准应用如Web服务和文件传输协议(FTP)分别采用端口80和21。其他应用可能采用其他的端口,但是客户端必须知道应用的端口号码以便访问这一应用。SYN数据包还包含有一个起始的序列号。客户端到服务器每一个新的连接的起始序列号是逐次递增的。当服务器接收到SYN数据包时,它回应一个SYN ACK数据包,数据包中包含服务器自己的起始序列号码。客户端于是回应一个ACK数据包表示连接建立,之后客户端和服务器就可以在这个连接上交换数据了。每个TCP连接都由四个值唯一表示:源IP地址、源端口号码、目的IP地址和目的端口号码。每个给定TCP连接的数据包中这四个值是相同的。注意从客户端到服务器的数据包的源IP地址和客户端的源端口号码变成从服务器到客户端的数据包的目的IP地址和目的端口号码,源通常指的是发送数据包的主机。一旦客户端和服务器完成数据交换的工作,客户端就发送一个FIN数据包,而服务器发送一个FIN ACK数据包,这样就结束了一个TCP连接。当会话正在进行中的时候,客户端或者服务器发送一个TCP RESET给对方将中止一个TCP连接。在这种情况下,如果还需要交换数据则必须重新建立连接。
UDP协议是另外一个非常流行的四层协议,经常被流媒体之类的应用所采用。跟TCP不同,UDP是无状态协议,使用UDP交换数据时不需要建立或者结束一个会话,UDP不象TCP那样提供可靠的传输保证。在UDP上运行的应用必须自己保证数据的可靠传输。我们仍然认为两个主机间使用UDP交换数据是一个会话,但是我们无法确定UDP会话的起始和结束。一个UDP会话同样可以通过源IP地址,源端口号码,目的IP地址,目的端口号码来唯一标记。