论文部分内容阅读
Internet正在以超过摩尔定律的速度发展,各种应用和服务迫切的需要更为高效,更为可靠的系统提供支撑。尤其在网络核心,关键业务的应用(如WWW,FTP,VOD),都遇到了单台服务器负载过高的现象,从而无法确保网络的正常应用。集群系统是支撑这些应用长远发展的解决方案之一,也是性价比很高的方案。将集群技术应用到网络核心关键应用中去,可以解决性能瓶颈,保障服务质量,提高技术竞争力。这是应用需求扩大的结果,充分体现了技术驱动和应用拉动的事务发展规律。负载均衡(Load Balance)建立在现有网络结构之上,它提供了有效透明的方法扩展网络设备和服务器带宽、增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。负载均衡是一种策略,这种策略可以针对网络结构中的不同层次而有不同的具体实现,它主要完成以下任务:合理的业务量分配,对外统一服务,解决网络拥塞问题,服务就近提供,实现地理位置无关性 ;为用户提供更好的访问质量;提高服务器响应速度;提高服务器及其他资源的利用效率;避免了网络关键部位出现单点失效。在网络服务集群这一研究领域,已有了很多研究成果。早期的循环DNS系统可以将负载分摊到多台机器上,但是不能做到均匀。Berkeley的MagicRouter使用一种类似“本地交换机”的装置来分发负载,实现了较精细的负载平衡。但是该模型中的分发装置在重载时成为性能的瓶颈,因此可扩展性不好。在IBM的eNetwork系统中,类似的分发装置只需完成一部分工作,因此性能瓶颈得到缓解。本论文在参考了上述技术之后,针对网络服务这一专用领域的集群系统进行了研究,提出一种优化的方案——“环状应答”。环状应答的原理和过程如下, 在集群服务器中,关键的流程是一个称为“环状应答”的过程,客户发起请求,服务器1接受请求,并根据自身的负载情况和其他服务器负载情况决定是否自己处理请求和转发请求,假设服务器1转发了请求,服务器2产生应答。根据TCP/IP的原理,服务器2在应答时,必须伪装成服务器1,即应答数据包的源IP地址必须是服务器1的地址。只有这样,客户端才会认为应答是合法的,不至于扔掉数据包。这要求,服务器2在接收到转发数据包时,要同时知道客户端和服务器1的IP地址。IP包头部中只有一个源地址字段,因此普通的IP包不能满足上述要求。通过IP-IP封装技术或MAC修改技术可以实现。比如IP-IP封装技术,服务器2接收到的是一个被封装的IP包,它有两个IP包头。通过分析这两个头部,可以得到服务器1和客户端的IP地址。一旦转发,服务器1必须能够记住这条连接,并将客户端后续发来的数据包都转发到服务器2。在这个环状的应答过程中,客户始终是被蒙蔽的,它不<WP=90>需要知道是谁为自己服务,因此也无须任何修改。但是,服务器1和2使用了非正常的IP数据包发送方式,因此内核中的TCP/IP协议栈需要修改。在此模型上,作者研究了RFC2003。采用RFC 2003中的封装技术。当服务器1要把数据包转发时,它在该数据包的基础上,再追加一个IP头部,该IP头部中包含新服务器2的IP地址,并包含特殊的协议类型编码。服务器2收到该数据包后可以通过IP头部中的协议类型来判断该数据包是否经过封装,从而知道该数据包是否直接来自于客户端。服务器2在解开封装后,得到原始的数据包,其中包含数据和客户端的IP地址。服务器2应该直接对客户端发回应答,这里要对应答的IP数据包进行重写。虽然有多种方案可用,但采用IP-IP封装技术是最具扩展性的,因为封装后的数据包还是合法的IP包,它甚至可以穿越WAN,从而实现更大规模的集群。本策略是一个基于Linux的PC集群负载均衡策略,通过修改Linux内核中的TCP/IP协议栈,使得集群中各节点能自动平衡网络负载。实现方案采用完全分散的设计模式,不采用集中式的分发管理中心,因此适合于PC集群。在设计中,每个节点既有服务的能力,又有转发的能力。每个节点记录其它节点的负载情况,本节点的连接和转发情况,并依据这些信息做出转发决策,使得用户请求被均匀分散到各个节点。集群的内部通讯协议保障各节点的信息同步,并具有探测节点故障的能力。当节点出现故障时,可采取多种应对手段,进一步提高了系统可用性。另外,本系统能够保持用户态编程接口不变,基于本系统的应用程序开发将会很容易。作者对Linux的TCP/IP协议栈进行了必要的分析,内容涉及TCP/IP各层的实现及主要数据结构,数据接收和发送的过程,协议栈的初始化过程,中断和系统调用。此外,还对该领域的相关研究做了介绍,并比较了本系统和它们的异同点。最后,介绍了测试环境和结果。实验表明,本系统运行稳定,性能随集群规模线性增长,具有较好的可扩展性和可移植性。