一种无丢包零停机重启网络服务的方法和系统的制作方法

文档序号:9691122阅读:210来源:国知局
一种无丢包零停机重启网络服务的方法和系统的制作方法【
技术领域
】[0001]本发明涉及一种重启网络服务技术,更具体而言,涉及一种零停机重启网络服务的方法和系统,使得在重启网络服务时不仅能正常处理所有的新连接,而且不会造成连接中断。【
背景技术
】[0002]在现有的各种网络服务中,某些网络服务必须重新启动进程才能完成重启或者重新载入配置文件。典型的例子是在很多负载特别大的web站点中所提供的HAProxy网络服务。此网络服务通过使用S0_REUSEP0RT选项,将新进程绑定到与旧进程完全相同的IP地址和端口开始监听新的连接,再发送信号通知老进程关闭监听端口的套接字(socket)。但是,当新老两个进程都绑定到同一个IP和端口,并且老进程的监听套接字还未关闭的短暂时间间隙中新的连接可能会到来。根据Linux内核中S0_REUSEP0RT的实现,新连接的第一个报文(SYN报文)可能会被分配给新老进程中的任意一个。如果这个SYN报文被分配给老进程,而紧接着老进程的监听套接字又被关闭,根据TCP协议,服务端会发送一个TCPRST报文给客户端重置这条连接。这会造成一条正常的连接被无条件重置。虽然客户端可以重新发起连接,但这无疑增加了整个数据传输所需要的时间,也给连接客户端与服务器的网络线路增加了不必要的负担。除了在上述HAProxy网络服务中存在必须重新启动进程才能完成重启或者重新载入配置文件的问题之外,还有许多网络服务存在同样的问题,例如:nginX网络服务等。[0003]针对所述网络服务中存在的这一问题,目前已经提供了一些解决方案。一种简单的做法是在进程重载期间配置iptables规则来丢弃掉新收到的SYN报文。根据TCP协议,客户端在没有收到SYN/ACK报文一段时间后就会重新发送SYN报文,这样,重新发送的SYN报文就能被已经完成重载的新进程顺利接收,从而解决了所述问题。但是,这一方案的不足之处在于,客户端必须等待一段时间直到超时以重新发送SYN报文。而这段等待时间通常都很长,例如在1秒种以上,但进程重载的时间往往只需要几十毫秒,这就导致已经完成重载的新进程必须多等待例如1秒左右的时间才能接收到重新发送的SYN报文。因此,尽管在这一方案中的新连接不会被重置,但却带来了较长时间的延时。[0004]另一个可行的现有解决方案是利用Linux的流量控制工具(tc)。先使用iptables来标记新流入的SYN报文,再用tc工具暂时缓存这些报文。在进程完成重载之后,再释放这些SYN报文。相比于上一解决方案,这一方案所引起的延时相对较短。但是,由于tc工具只能控制流出的流量,因而使用场景受到了一定的限制。例如,在服务进程作为监听进程监听并接受客户端连接时,由于此时SYN报文为流入流量,所述的使用tc工具的方案就无法被用于解决上述问题。[0005]因此,存在一种对能够提供一种具有没有延时、对传出传入的连接都有效且使用场景不受限制等优点的重启网络服务的技术的需求。【
发明内容】[0006]为了解决现有技术中的所述缺陷,本发明提供了一种新的无丢包零停机重启网络服务的方法和系统。相比于现有的其它方法,其具有无延时,对传出传入的连接都有效且使用场景不受限制等优点。[0007]在本发明的一个方面,提供了一种重启网络服务的方法,所述方法包括:[0008]a)所述网络服务的旧进程在一端口上进行监听;[0009]b)配置并启动过渡进程,所述配置包括使得所述过渡进程在与旧进程不同的另一端口上进行监听;[0010]c)在连接跟踪模块运行的同时,添加iptables规则来将定向到所述一端口的连接重定向到所述另一端口,使得原本应连接到所述一端口上的后续连接被全部重定向到在所述另一端口上监听的所述过渡进程;d)—直等待直到所述旧进程上的已有连接全部处理完毕后,才退出所述旧进程;[0011]e)使用新的配置文件在所述一端口上启动新进程;[0012]f)重新配置iptables规则以取消端口的重定向,这样,原本应连接到所述一端口上的后续新连接不再被重定向,还是连向在所述一端口上监听的新进程;以及[0013]g)—直等待直到所述过渡进程上的已有连接全部处理完毕后,退出过渡进程。[0014]根据本发明的另一方面,提供了一种重启网络服务的系统,其特征在于,所述系统包括:[0015]服务端,所述服务端是提供各种网络服务的web站点;[0016]客户端,所述客户端向所述服务器端提出重启网络服务的请求;[0017]网络环境,通过所述网络环境,所述服务端和所述客户端可以进行数据通信;[0018]其中,所述服务端被配置为执行下述步骤以实现网络服务的重启:[0019]a)所述网络服务的旧进程在一端口上进行监听;[0020]b)配置并启动过渡进程,所述配置包括使得所述过渡进程在与旧进程不同的另一端口上进行监听;[0021]c)在连接跟踪模块运行的同时,添加iptables规则来将定向到所述一端口的连接重定向到所述另一端口,使得原本应连接到所述一端口上的后续连接被全部重定向到在所述另一端口上监听的所述过渡进程;d)—直等待直到所述旧进程上的已有连接全部处理完毕后,才退出所述旧进程;[0022]e)使用新的配置文件在所述一端口上启动新进程;[0023]f)重新配置iptables规则以取消端口的重定向,这样,原本应连接到所述一端口上的后续新连接不再被重定向,还是连向在所述一端口上监听的新进程;以及[0024]g)—直等待直到所述过渡进程上的已有连接全部处理完毕后,退出过渡进程。[0025]提供本概述是为了以简化的形式介绍将在以下详细描述中进一步描述的一些概念。本概述不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。【附图说明】[0026]为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:[0027]图1示出了在其中可以实现根据本发明的实施例的示例环境。[0028]图2示出了根据本发明的实施例的一种零停机重启网络服务的方法的流程图。【具体实施方式】[0029]下面结合附图和实施例对本发明作进一步的描述。[0030]首先,描述下实现本发明的实施例的系统环境。在图1中示出了实现根据本发明的实施例的示例环境100。在所述示例环境100中,包括网络环境110进行通信的客户端(客户机)120和服务端(服务器)130。客户端和服务器所处的网络环境可以是局域网、因特网或其它广域网。所述服务端130可以是提供各种网络服务的web站点,例如,HAProxy网络服务,其中所述网络服务必须重新启动进程才能完成重启或者重新载入配置文件。而所述客户端120则通过因特网110来向服务端130请求网络服务。[0031]在介绍完本发明的示例环境之后,现在就本发明的原理加以说明。[0032]首先,Netfilter是Linux内核中的一个与网络功能相关的子系统。它作为一个通用的、抽象的框架,提供了数据包过滤、数据包修改、网络地址转换(NetworkAddressTranslat1n,NAT)等功能。[0033]连接跟踪(conntrack)机制是Netfilter框架中的一个重要功能,也是包过滤、地址转换的基础。其基本功能是跟踪并且记录连接状态。它作为一个独立的模块运行。采用连线跟踪技术在协议栈低层截取数据包,将当前数据包及其状态信息与历史数据包及其状态信息进行比较,从而得到当前数据包的控制信息,根据这些信息决定对网络数据包的操作,达到保护网络的目的。具体而言,Linux的Netfilter框架为每一个经过网络栈的数据包,生成一个新的连接记录项。此后,所有属于此连接的数据包都被唯一地分配给这个连接,并标识连接的状态。连接跟踪是Netfi11er的状态检测的基础,同时也是实现网络地址转换(NAT)功能的前提。[0034]当下层网络接收到初始化连接同步(Synchronize,SYN)数据包后,该数据包将由netfilter规则库进行检查。该数据包将在规则链中依次序进行比较。如果该包应被丢弃,发送一个复位(Reset,RST)数据包到远端主机,否则连接被接收。这次连接的信息将被保存在连线跟踪信息表中,并表明该数据包所应有的状态。这个连线跟踪信息表位于内核模式下,其后的网络数据包就将与此连线跟踪信息表中的内容进行比较,根据信息表中的信息来决定该数据包的操作。因为数据包首先是与连线跟踪信息表进行比较,只有SYN包才与规则库进行比较,并且数据包与连线跟踪信息表的比较都是在内核模式下进行的,所以处理速度很快。[0035]而本发明正是巧妙利用了Netfilter的连接跟踪机制的所述特点:根据连接跟踪机制的实现,相关规则只匹配每条连接的第一个报文,后续的报文则由连接跟踪机制自动处理。从而,我们可以利用这一点,区分新连接和老连接,并将新连接全部引导给新进程,同时不影响与老进程上的旧连接。[0036]不过,许多线上机器出于性能方面的考虑,关闭了连接跟踪机制。因此,本发明需要在网络服务重载,进行进程切换时,临时开启连接跟踪机制来实现所述方案。在下述图2的详细步骤中,假设服务器运行时关闭了连接跟踪机制。[0037]现在参考图2,在图2中示出了根据本发明的实施例的一种零停机重启网络服务的方法200的流程图。[0038]首先,在步骤210,假设网络服务的旧进程在A端口监听。注意所述A端口仅仅是为了方便说明而起的端口名,并不是要将所述进程局限于某个特定端口。[0039]当网络服务重载而需要进行进程切换时,在步骤220,配置并启动过渡进程。修改网络服务的配置文件,配置过渡进程在与旧进程不同的端口上监听,并启动该过渡进程。此处假设过渡进程在B端口上监听。如上所述,所述B端口仅仅是为了方便说明不同于A端口的一个端口,并不是要将所述进程局限于某个特定端口。[0040]随后,由于假设服务器运行时关闭了连接跟踪机制以提高性能,因此当前第1页1 2 
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1