一种服务器切换方法及装置与流程

文档序号:15847468发布日期:2018-11-07 09:18阅读:184来源:国知局
一种服务器切换方法及装置与流程

本申请涉及负载均衡技术领域,特别是涉及一种服务器切换方法及装置。

背景技术

服务器负载均衡,是指由多台具有同等服务功能的服务器组成服务器集合,服务器集合中的各个服务器通过lb(loadbalance,负载均衡设备对外提供相同的服务,从而提高服务承载能力。对lb设备,很重要的工作是在接收到客户端的服务请求报文后,采用一定的调度策略,从服务器集合中选择一台服务器,由所选择的服务器为客户端提供服务。

但当服务器集合中的一台服务器故障时,该故障的服务器所提供的服务中断,也就是,与该故障的服务器连接的客户端所需的服务中断。客户端需要重新发送连接请求,与服务器集合中有效的服务器连接,才能继续获取服务。此时,客户端可感知到服务中断,用户感受不佳。



技术实现要素:

本申请实施例的目的在于提供一种服务器切换方法及装置,以在服务器集合中出现故障服务器时,实现服务器的无缝平滑切换,提高用户感受。具体技术方案如下:

一方面,本申请实施例提供了一种服务器切换方法,应用于lb设备,所述方法包括:

当检测到服务器集合中的第一服务器故障时,从本地存储的会话列表中,获取包括所述第一服务器的第一地址信息的第一会话;所述第一会话还包括与所述第一服务器连接的第一客户端的第三地址信息;

从所述服务器集合中除所述第一服务器外的服务器中,选择第二服务器;

将所述第一会话中的所述第一地址信息更新为所述第二服务器的第二地址信息;

根据所述第二地址信息和所述第三地址信息,向所述第二服务器发送代理连接请求报文,以使所述第二服务器根据所述代理连接请求报文与所述第一客户端建立连接。

二方面,本申请实施例提供了一种服务器切换装置,应用于lb设备,所述装置包括:

第一获取单元,用于当检测到服务器集合中的第一服务器故障时,从本地存储的会话列表中,获取包括所述第一服务器的第一地址信息的第一会话;所述第一会话还包括与所述第一服务器连接的第一客户端的第三地址信息;

选择单元,用于从所述服务器集合中除所述第一服务器外的服务器中,选择第二服务器;

第一更新单元,用于将所述第一会话中的所述第一地址信息更新为所述第二服务器的第二地址信息;

发送单元,用于根据所述第二地址信息和所述第三地址信息,向所述第二服务器发送代理连接请求报文,以使所述第二服务器根据所述代理连接请求报文与所述第一客户端建立连接。

三方面,本申请实施例提供了一种lb设备,包括处理器和机器可读存储介质,所述机器可读存储介质存储有能够被所述处理器执行的机器可执行指令,所述处理器被所述机器可执行指令促使执行上述任一服务器切换方法步骤。

四方面,本申请实施例提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,所述机器可执行指令促使所述处理器执行上述任一服务器切换方法步骤。

本申请实施例中,当检测到服务器集合中的第一服务器故障时,lb设备从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话,并将第一会话中的第一地址信息更新为服务器集合中第二服务器的第二地址信息。第二服务器为有效的服务器,第一会话还包括与第一服务器连接的第一客户端的第三地址信息。进而,lb设备代替第一客户端向第二服务器发送代理连接请求报文。第二服务器根据代理连接请求报文与第一客户端建立连接。

这样,就可以由第二服务器继续为第一客户端提供服务,第一客户端不必重新发送连接请求报文,客户端感知不到服务中断,实现了服务器的无缝平滑切换,提高了用户感受。当然,实施本申请的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的服务器集合组网的一种示意图;

图2为本申请实施例提供的服务器集合组网的另一种示意图;

图3为本申请实施例提供的服务器切换方法的一种流程示意图;

图4为本申请实施例提供的服务器切换装置的一种结构示意图;

图5为本申请实施例提供的lb设备的一种结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

正向:为客户端至服务器的方向。例如,客户端向服务器发送的报文为正向报文。

反向:为服务器至客户端的方法。例如,服务器向客户端反馈的响应报文为反向报文。

lb设备:为实现负载均衡的交换机、路由器等网络设备。lb设备可以直接与客户端和服务器连接,如图1所示的服务器集合组网示意图。lb设备也可以与一个网络设备连接,该网络设备与客户端和服务器连接,如图2所示服务器集合组网示意图。图2中lb设备4与交换机7连接,交换机7与客户端5-6和服务器1-3连接。

下面结合图1所示的服务器集合组网进行说明。图1中,服务器集合包括服务器1、服务器2和服务器3,lb设备4,以及客户端5和客户端6。其中,服务器集合的虚拟ip地址为vip,服务器1的ip地址为ip1、服务器2的ip地址为ip2,服务器3的ip地址为ip3,客户端5的ip地址为ip4,客户端6的ip地址为ip5。

lb设备4中建立有会话列表中可包括多个会话,每个会话包括的信息可参考表1所示。

表1

表1中,id,为identity,标识。每一会话都有唯一一个id。

prop,为protocol,表示报文的协议类型。

state,表示会话的状态,也可以理解为会话对应的连接的状态。例如,客户端与服务器进行tcp(transmissioncontrolprotocol,传输控制协议)交互,建立tcp连接时,客户端向服务器发送了第一个syn(synchronize,同步)报文后,state为syn状态。服务器向客户端回应了syn-ack(acknowledgement,确认)报文后,state为recv(receive,接收)状态。客户端向服务器回应了ack报文,state为est状态,即稳态。est状态的会话,表示会话对应的客户端与服务器间的连接已建立完成。syn状态的会话或recv状态的会话,表示会话对应的客户端与服务器间的连接未建立完成。

req_sip,requestsourceinternetprotocol,请求源网络协议地址。即为正向报文的源ip地址,也就是,客户端发送的报文的源ip地址。这里,req_sip为客户端的ip地址。

req_sport,requestsourceport,请求源端口。即为正向报文的源端口,也就是,客户端发送的报文的源端口。这里,req_sport为客户端的端口。

req_dip,requestdestinationinternetprotocol,请求目的网络协议地址。即为正向报文的目的ip地址,也就是,客户端发送的报文的目的ip地址。这里,req_dip为服务器集合的虚拟ip地址。

req_dport,requestdestinationport,请求目的端口。即为正向报文的目的端口,也就是,客户端发送的报文的目的端口。这里,req_dport为服务器集合的虚拟端口。

res_sip,respondsourceinternetprotocol,响应源网络协议地址,即为反向报文的源ip地址,也就是,服务器回应的报文的源ip地址。这里,res_sip为服务器集合中一服务器的真实ip地址。

res_sport,respondsourceport,响应源端口,即为反向报文的源端口,也就是,服务器回应的报文的源端口。这里,res_sport为服务器集合中一服务器的真实端口。

res_dip,responddestinationinternetprotocol,响应目的网络协议地址,即为反向报文的目的ip地址,也就是,服务器回应的报文的目的ip地址。这里,res_dip为客户端的ip地址。

res_dport,responddestinationport,响应目的端口,即为反向报文的源目的端口,也就是,服务器向客户端发送的报文的目的端口。这里,res_dport为客户端的端口。

基于图1所示的服务器集合组网,若lb设备4接收到客户端5发送的目的ip地址为vip的连接请求报文1后,根据预设的负载均衡算法,从服务器1-3中共选中一个服务器,例如选择了服务器1,建立如表1所示的会话h1。其中,会话h1中req_sip为客户端5的ip地址为ip4,req_dip为vip,res_sip为ip1,res_dip为ip4。lb设备4建立客户端5与服务器1间的连接。

lb设备4在接收到客户端5发送的服务请求报文1时,获取服务请求报文1的源ip地址、源端口、目的ip地址、目的端口和协议类型的五元组。以会话h1为例。

lb设备将服务请求报文1的源ip地址与会话h1的req_sip匹配。

lb设备将服务请求报文1的源端口与会话h1的req_sport匹配。

lb设备将服务请求报文1的目的ip地址与会话h1的req_dip匹配。

lb设备将服务请求报文1的目的端口与会话h1的req_dport匹配。

lb设备将服务请求报文1的协议类型与会话h1的prop匹配。

若上述服务请求报文1的五元组信息与会话h1均匹配成功,则lb设备4确定服务请求报文1与会话h1匹配,将服务请求报文1中的目的ip地址更新为会话h1中res_sip,将服务请求报文1中的目的端口替换为会话h1中res_sport。进而lb设备4将服务请求报文1发送给ip地址为res_sip的服务器,也就是,lb设备4将服务请求报文1发送给服务器1。

lb设备4在接收到服务器集合中的服务器1发送的服务响应报文1时,获取服务响应报文1的源ip地址、源端口、目的ip地址、目的端口和协议类型的五元组。仍以会话h1为例。

lb设备将服务响应报文1的源ip地址与会话h1的res_sip匹配。

lb设备将服务响应报文1的源端口与会话h1的res_sport匹配。

lb设备将服务响应报文1的目的ip地址与会话h1的res_dip匹配。

lb设备将服务响应报文1的目的端口与会话h1的res_dport匹配。

lb设备将服务响应报文1的协议类型与会话h1的prop匹配。

若上述服务响应报文1的五元组信息与会话h1均匹配成功,则lb设备4确定服务响应报文1与会话h1匹配,将服务响应报文1中的源ip地址替换为会话h1中req_dip,将服务响应报文1中的源端口替换为会话h1中req_dport。进而lb设备将服务响应报文1发送给ip地址为res_dip的客户端,也就是,将服务响应报文1发送给客户端5。这样,客户端5可以从服务器1中获取到服务。

然而,当服务器1故障时,服务器1所提供的服务中断,即客户端5所需的服务中断。客户端5需要重新发送连接请求,与服务器集合中有效的服务器(如服务器2和服务器3)连接,才能继续获取服务。此时,客户端可5感知到服务中断,用户感受不佳。

为在服务器集合中出现故障服务器时,实现服务器的无缝平滑切换,提高用户感受,本申请实施例提供了一种服务器切换方法。该服务器切换方法应用于lb设备。

该服务器切换方法中,若检测到服务器集合中的第一服务器故障,lb设备从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话,并将第一会话中的第一地址信息更新为服务器集合中第二服务器的第二地址信息。第二服务器为有效的服务器,第一会话还包括与第一服务器连接的第一客户端的第三地址信息。进而,lb设备代替第一客户端向第二服务器发送代理连接请求报文。第二服务器根据代理连接请求报文,与第一客户端建立连接。这样,就可以由第二服务器继续为第一客户端提供服务,第一客户端不必重新发送连接请求报文,客户端感知不到服务中断,实现了服务器的无缝平滑切换,提高了用户感受。

下面通过具体实施例,对本申请进行说明。

参考图3,图3为本申请实施例提供的服务器切换方法的一种流程示意图,应用于lb设备,该方法包括如下步骤。

步骤301,当检测到服务器集合中的第一服务器故障时,lb设备从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话。第一会话还包括与第一服务器连接的第一客户端的第三地址信息。

其中,第一地址信息可包括第一服务器的ip地址、mac(mediaaccesscontrol,媒体访问控制)地址、端口等信息。第三地址信息可包括第一客户端的ip地址、mac地址、端口等信息。

lb设备定时的检测服务器集合中的各个服务器是否故障。若检测到服务器集合中的第一服务器故障,则lb设备从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话。这里,lb设备可以获取到一个或多个第一会话。每一第一会话均分别执行步骤301-304。

在本申请的一个实施例中,lb设备可通过定时地向服务器集合中的各个服务器发送探测请求报文,实现对服务器集合中的各个服务器是否故障的检测。具体的,lb设备定时地向服务器集合中的各个服务器发送探测请求报文。若服务器为有效服务器,则这个服务器会向lb设备反馈探测请求报文的探测响应报文。lb设备接收到探测响应报文后,确定发送探测响应报文的这个服务器为有效服务器。

若服务器为失效服务器,也就是,服务器为故障服务器,则这个服务器不会向lb设备反馈探测请求报文的探测响应报文。lb设备若在向服务器发送了探测请求报文的预设时长后,仍未接收到这个服务器反馈的探测响应报文,则确定这个服务器为为故障服务器。lb设备将故障服务器作为第一服务器。

本申请的实施例中,会话列表中可包括多个会话,每个会话包括的信息可参考表2所示。

表2

表2中,id、prop、state、req_sip、req_sport、req_dip、req_dport、res_sip、res_sport、res_dip和res_dport可参考表1的描述。

type,表示会话类型。例如,type为0,表示正常会话。type为1,表示故障会话,即表示该会话原来对应的服务器出现故障,运行服务器切换处理后的会话。

seq,sequence,序列号,表示客户端向lb设备发送的报文的tcp序列号。该信息只有在type=1时有用。type=0时,seq可为空。

ack,确认号,表示客户端向lb设备发送的报文的tcp确认号。该信息只有在type=1时有用。type=0时,ack可为空。

proxyseq,代理序列号,表示lb设备代理客户端向服务器发送的报文的tcp序列号。该信息只有在type=1时有用。type=0时,proxyseq可为空。

proxyack,代理确认号,表示lb设备代理客户端向服务器发送的报文的tcp确认号。该信息只有在type=1时有用。type=0时,proxyack可为空。

reseq,回应序列号,表示lb设备向客户端回应的报文的tcp序列号。该信息只有在type=1时有用。type=0时,reseq可为空。

reack,回应确认号,表示lb设备向客户端回应的报文的tcp确认号。该信息只有在type=1时有用。type=0时,reack可为空。

reproxyseq,回应代理序列号,表示服务器向lb设备回应的报文的tcp序列号。该信息只有在type=1时有用。type=0时,reproxyseq可为空。

reproxyack,回应代理确认号,表示服务器向lb设备回应的报文的tcp确认号。该信息只有在type=1时有用。type=0时,reproxyack可为空。

基于表2所示会话,当检测到服务器集合中的第一服务器故障时,lb设备可从本地存储的会话列表中,获取res_sip为第一服务器的第一地址信息的第一会话。另外,lb设备可将第一会话中的type设置为1

以图1所示的服务器集合组网为例,lb设备4建立的针对客户端5与服务器1建立连接的会话h1中包括了type、seq、ack、reseq、reack、proxyseq、proxyack、reproxyseq和reproxyack。在客户端5与服务器1间的连接建立后,将会话h1中的type设置为0。之后,若检测到服务器1故障,则lb设备4获取从本地存储的会话列表中,获取res_sip为ip1的会话h1,并将会话h1中的type设置为1。

在本申请的一个实施例中,为减轻lb设备的负担,第一会话对应的连接已建立。具体的,当检测到服务器集合中的第一服务器故障时,lb设备从本地存储的会话列表中,获取包括第一地址信息的、已建立对应的连接的第一会话。对于包括第一地址信息的、未建立对应的连接的第二会话,lb设备可直接删除第二会话。

这里,第一会话对应的连接为:ip地址为第一会话中req_sip地址的客户端和ip地址为第一会话中res_sip地址的服务器间的连接。也就是,第一会话对应的连接为:第一客户端与第一服务器间的连接。如表2所示,第一会话对应的连接已建立,即为第一会话中state为est状态。第二会话对应的连接未建立,即为第二会话中state为syn状态或recv状态。

步骤302,lb设备从服务器集合中除第一服务器外的服务器中,选择第二服务器。

第二地址信息可包括第二服务器的ip地址、mac地址、端口等信息。

lb设备在确定第一服务器故障后,按照预设的负载分担算法,从服务器集合中除第一服务器外有效的服务器中,选择一个服务器,作为第二服务器。

仍以图1所示的服务器集合组网为例,lb设备4建立会话h1后,若检测到服务器1故障,则lb设备4按照预设的负载分担算法,从服务器2和服务器3中选择一个服务器,如选择了服务器2。

本申请实施例中,在确定了第一服务器故障的情况下,不限定步骤301和步骤302的执行顺序。

步骤303,lb设备将第一会话中的第一地址信息更新为第二服务器的第二地址信息。

lb设备清除第一会话中res_sip中的第一地址信息,将第一会话中res_sip更新为第二服务器的第二地址信息。

仍以步骤302中的例子为例。服务器1的ip地址为ip1,服务器2的ip地址为ip2。当检测到服务器1故障时,lb设备4按照预设的负载分担算法,从服务器2和服务器3中选择服务器2。lb设备4清除会话h1中res_sip中的ip1,将会话h1中res_sip更新为ip2。

步骤304,lb设备根据第二地址信息和第三地址信息,向第二服务器发送代理连接请求报文。

第二服务器接收到代理连接请求报文后,根据代理连接请求报文与第一客户端建立连接。

具体的,lb设备使能代理功能,代理第一客户端向第二服务器发送连接请求报文。该连接请求报文即为代理连接请求报文。第二服务器根据代理连接请求报文与第一客户端建立连接。这里,代理连接请求报文包括syn报文、ack报文等。

仍以步骤303中的例子为例。lb设备4将会话h1中res_sip更新为ip2。会话h1中req_sip为客户端5的ip地址。lb设备4使能代理功能,代理客户端5向服务器2发送syn报文。lb设备4接收到服务器2回应的syn-ack报文后,代理客户端5向服务器2发送ack报文。此时,客户端5与服务器2之间的连接建立完成,会话h1中的state更新为est状态。

在本申请的一个实施例中,为避免出现丢包的问题,lb设备当检测到第一服务器故障后,在第二服务器与第一客户端之间的连接建立之前,则缓存第一客户端向第二服务器发送的第一服务请求报文。

lb设备在检测到第二服务器与第一客户端之间的连接建立后,获取缓存的第一服务请求报文;根据第一会话中包括的第二地址信息,将第一服务请求报文发送给第二服务器。

一个示例中,为了便于获取缓存的第一服务请求报文,lb设备为每一会话配置缓存队列。在第一服务器故障的情况下,若lb设备接收到第一客户端发送的与第一会话匹配的服务请求报文,如第一服务请求报文,lb设备检测第二服务器与第一客户端之间的连接是否建立。

若检测到第二服务器与第一客户端之间的连接已建立,则lb设备直接据第一会话中包括的第二地址信息,将第一服务请求报文发送给第二服务器。

若检测到第二服务器与第一客户端之间的连接未建立,也就是,检测到第一会话的state为syn状态或recv状态,则lb设备将第一服务请求报文缓存至为第一会话配置的缓存队列。在检测到第二服务器与第一客户端之间的连接建立后,也就是,检测到第一会话的state为est状态,则lb设备从第一会话的缓存队列中获取第一服务请求报文,根据第一会话中包括的第二地址信息,将第一服务请求报文发送给第二服务器。

在本申请的一个实施例中,第一服务器故障后,为了保证客户端能够获取到服务,lb设备记录第一序列号和第一确认号,以及记录第二序列号和第二确认号。其中,第一序列号和第一确认号用于lb设备与第二服务器间的报文交互。第二序列号和第二确认号用于lb设备与第一客户端间的报文交互。

lb若接收到第一客户端发送的与第一会话匹配的服务请求报文,如第二服务请求报文,将第二服务请求报文的tcp头中的序列号更新为第一序列号,并将第二服务请求报文的tcp头中的确认号更新为第一确认号。另外,lb设备计算更新后的第二服务请求报文的tcp头的第一校验值,进而利用第一校验值将第二服务请求报文发送给第二服务器。第一客户端发送的与第一会话匹配的服务请求报文,即为第一客户端向第二服务器发送的服务请求报文。

第二服务器在接收到第一客户端发送的服务请求报文后,向第一客户端回应服务响应报文,如第一服务响应报文。lb设备接收到第二服务器发送的与第一会话匹配的第一服务响应报文后,可将第一服务响应报文的tcp头中的序列号更新为第二序列号,并将第一服务响应报文的tcp头中的确认号更新为第二确认号。另外,lb设备计算第一服务响应报文的更新后的tcp头的第二校验值,进而利用第二校验值将第一服务响应报文发送给第一客户端。第二服务器发送的与第一会话匹配的第一服务响应报文,即为第二服务器向第一客户端发送的第一服务响应报文。

在本申请实施例中,上述第一序列号、第一确认号、第二序列号和第二确认号可依据表1中seq、ack、reseq、reack、proxyseq、proxyack、reproxyseq和reproxyack确定。

一个示例中,lb设备获取向第二服务器发送的用于建立第二服务器与第一客户端之间连接的最后一个报文。lb设备从这最后一个报文中提取第三序列号和第三确认号,将第三序列号作为第一会话的proxyseq和reproxyack,将第三确认号作为第一会话的proxyack和reproxyseq。

在第一客户端和第二服务器之间的连接已建立的情况下,当lb设备接收到第一客户端发送的与第一会话匹配的第二服务请求报文时,若第二服务请求报文是第一客户端发送的第一个与第一会话匹配的服务请求报文,则lb设备从第二服务请求报文中提取第四序列号和第四确认号。lb设备将第四序列号作为第一会话的seq和reack,将第四确认号作为第一会话的ack和reseq。另外,lb设备将第一会话中的proxyseq作为第一序列号,将第一会话中的proxyack作为第一确认号,将第二服务请求报文的tcp头中的序列号更新为第一序列号,将第二服务请求报文的tcp头中的确认号更新为第一确认号。lb设备更新了第二服务请求报文的tcp头之后,计算第二服务请求报文的tcp头的第一校验值,利用第一校验值将第二服务请求报文发送给第二服务器。

一个示例中,在第一客户端和第二服务器之间的连接已建立的情况下,当lb设备接收到第一客户端发送的与第一会话匹配的第二服务请求报文时,若第二服务请求报文不是第一客户端发送的第一个与第一会话匹配的服务请求报文,则lb设备从第二服务请求报文中提取第四序列号和第四确认号。lb设备先后执行如下公式(1)-(2)-(3),更新第一会话中seq、ack、proxyseq和proxyack。

其中,se.seq为第一会话中的seq,se.ack为第一会话中的ack,se.proxyseq为第一会话中的proxyseq,se.proxyack为第一会话中的proxyack,seq4为第四序列号,ack4为第四确认号。

在更新第一会话中的seq、ack、proxyseq和proxyack后,lb设备将更新后的第一会话中的proxyseq作为第一序列号,将更新后的第一会话中的proxyack作为第一确认号。进而,lb设备将第二服务请求报文中的序列号更新为第一序列号,lb设备将第二服务请求报文中的确认号更新为第一确认号。lb设备更新第二服务请求报文的tcp头后,计算第二服务请求报文的tcp头的第一校验值,利用第一校验值将第二服务请求报文发送给第二服务器。

一个示例中,在第一客户端和第二服务器之间的连接已建立的情况下,当lb设备接收到第二服务器发送的与第一会话匹配的第一服务响应报文时,lb设备从第一服务响应报文中提取第五序列号和第五确认号。lb设备先后执行如下公式(4)-(5)-(6),更新第一会话中reseq、reack、reproxyseq和reproxyack。

其中,se.reseq为第一会话中的reseq,se.reack为第一会话中的reack,se.reproxyseq为第一会话中的reproxyseq,se.reproxyack为第一会话中的reproxyack,seq5为第五序列号,ack5为第五确认号。

在更新第一会话中reseq、reack、reproxyseq和reproxyack后,lb设备将更新后的第一会话中的reseq作为第二序列号,将更新后的第一会话中的reack作为第二确认号。进而,lb设备将第一服务响应报文中的序列号更新为第二序列号,lb设备将第一服务响应报文中的确认号更新为第二确认号。lb设备更新第一服务响应报文的tcp头后,计算第一服务响应报文的tcp头的第二校验值,利用第二校验值将第一服务响应报文发送给第一客户端。

下面结合图1所示的服务器集合组网,对本申请实施例提供的服务器切换方法进行说明。服务器集合的虚拟ip地址为vip,服务器1的ip地址为ip1、服务器2的ip地址为ip2,服务器3的ip地址为ip3,客户端5的ip地址为ip4,客户端6的ip地址为ip5。lb设备4建立针对客户端5与服务器1间连接的会话h1,以及客户端6与服务器1间连接的会话h2。

其中,会话h1可参考表3所示,会话h2可参考表4所示。

表3

表4

步骤1,lb设备4定时地向服务器集合中的服务器1-3发送探测请求报文。若在发送了探测请求报文后的预设时长后,lb设备4未接收到服务器1回应的探测响应报文,则获取res_sip为ip1的会话,则lb设备4可获取到会话h1和会话h2。

步骤2,会话h2中state为syn状态,也就是,客户端6与服务器1间的连接未建立完成,lb设备4删除会话h2。

会话h1中state为est状态,客户端5与服务器1间的连接已建立完成。针对会话h1,lb设备4将会话h1的type设置为1,从服务器集合中的服务器2和3中选择一个服务器,如选择了服务器2。

步骤3,lb设备4将会话h1中的服务器1的地址信息更新为服务器2的地址信息。如表5所示。

表5

步骤4,lb设备4使能代理功能,代理客户端5向服务器2发送syn报文1。在接收到服务器2回应的syn-ack报文1时,lb设备4代理客户端5向服务器2发送ack报文1,进而实现客户端5与服务器2建立连接。

另外,lb设备4获取ack报文1中的序列号seq11和确认号ack11。lb设备4将seq11作为会话h1的proxyseq和reproxyack,将ack11作为会话h1的proxyack和reproxyseq,更新会话h1,如表6所示。

表6

步骤5,lb设备4接收到客户端5发送的与会话h1匹配的服务请求报文x1,服务请求报文x1为首个与会话h1匹配的,且来自客户端的报文,则获取服务请求报文x1中的序列号seq12和确认号ack12。lb设备4将seq12作为会话h1的seq和reack,将ack12作为会话h1的ack和reseq,更新会话h1,如表7所示。

表7

基于表7,lb设备4将服务请求报文x1的目的ip地址更新为ip2,将服务请求报文x1的目的端口更新为port5。另外,lb设备4将服务请求报文x1的tcp头中的序列号更新为seq11,将服务请求报文x1的tcp头中的确认号更新为ack11。进而lb设备4重新计算tcp头的校验值1,利用校验值1将服务请求报文x1发送给服务器2。

步骤6,lb设备4接收到服务器2发送的与会话h1匹配的服务响应报文x2,则获取服务响应报文x2中的序列号seq13和确认号ack13。lb设备4根据seq13和ack13,以及公式(4)-(6),更新会话h1中的reseq、reack、reproxyseq和reproxyack。如表8所示。

表8

基于表8,lb设备4将服务响应报文x2的源ip地址更新为vip,将服务响应报文x2的源端口更新为port2。另外,lb设备4将服务响应报文x2的tcp头中的序列号更新为ack12+seq13-ack11,将服务响应报文x2的tcp头中的确认号更新为seq12+ack13-seq11。进而lb设备4重新计算tcp头的校验值2,利用校验值2将服务响应报文x2发送给客户端5。

步骤7,lb设备4接收到客户端5发送的与会话h1匹配的服务请求报文x3,服务请求报文x3为非首个与会话h1匹配的,且来自客户端的报文,则获取服务请求报文x3中的序列号seq14和确认号ack14。lb设备4根据seq14和ack14,以及公式(1)-(3),更新会话h1中的seq、ack、proxyseq和proxyack。如表9所示。

表9

基于表9,lb设备4将服务请求报文x3的目的ip地址更新为ip2,将服务请求报文x3的目的端口更新为port5。另外,lb设备4将服务请求报文x3的tcp头中的序列号更新为seq11+seq14-seq12,将服务请求报文x3的tcp头中的确认号更新为ack11+ack14-ack12。进而lb设备4重新计算tcp头的校验值3,利用校验值3将服务请求报文x3发送给服务器2。

之后,lb设备4接收到来自客户端5的报文的处理过程可参考步骤9,接收到来自服务器2的报文的处理过程可参考步骤8,此处不再赘述。

可见,本申请实施例中,当检测到服务器集合中的第一服务器故障时,lb设备代替第一客户端向第二服务器发送代理连接请求报文。第二服务器根据代理连接请求报文与第一客户端建立连接。这样,就可以由第二服务器继续为第一客户端提供服务,第一客户端不必重新发送连接请求报文,客户端感知不到服务中断,实现了服务器的无缝平滑切换,提高了用户感受。

基于相同的发明构思,本申请实施例还提供了一种服务器切换装置,参考图4,图4为本申请实施例提供的服务器切换装置的一种结构示意图,该装置包括。

第一获取单元401,用于当检测到服务器集合中的第一服务器故障时,从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话;第一会话还包括与第一服务器连接的第一客户端的第三地址信息;

选择单元402,用于从服务器集合中除第一服务器外的服务器中,选择第二服务器;

第一更新单元403,用于将第一会话中的第一地址信息更新为第二服务器的第二地址信息;

发送单元404,用于根据第二地址信息和第三地址信息,向第二服务器发送代理连接请求报文,以使第二服务器根据代理连接请求报文与第一客户端建立连接。

在一种实施方式中,第一会话对应的连接已建立。

在一种实施方式中,上述服务器切换装置还可以包括:

缓存单元,用于在第二服务器与所述第一客户端之间的连接建立之前,则缓存第一客户端向第二服务器发送的第一服务请求报文;

第二获取单元,用于在检测到第二服务器与第一客户端之间的连接建立后,获取缓存的第一服务请求报文;根据第一会话中包括的第二地址信息,将第一服务请求报文发送给第二服务器。

在一种实施方式中,上述服务器切换装置还可以包括:

接收单元,用于接收第一客户端发送的与第一会话匹配的第二服务请求报文;

第二更新单元,用于将第二服务请求报文的tcp头中的序列号更新为第一序列号,并将第二服务请求报文的tcp头中的确认号更新为第一确认号;第一序列号和第一确认号用于lb设备与第二服务器间的报文交互;

计算单元,用于计算第二服务请求报文的tcp头的第一校验值;

发送单元,还用于根据第一会话中包括的第二地址信息,利用第一校验值将第二服务请求报文发送给第二服务器。

在一种实施方式中,上述服务器切换装置还可以包括:

接收单元,用于接收第二服务器发送的与第一会话匹配的第一服务响应报文;

第二更新单元,用于将第一服务响应报文的tcp头中的序列号更新为第二序列号,并将第一服务响应报文的tcp头中的确认号更新为第二确认号;第二序列号和第二确认号用于lb设备与第一客户端间的报文交互;

计算单元,用于计算第一服务响应报文的tcp头的第二校验值;

发送单元,还用于根据第一会话中包括的第三地址信息,利用第二校验值将第一服务响应报文发送给第一客户端。

可见,本申请实施例中,当检测到服务器集合中的第一服务器故障时,lb设备代替第一客户端向第二服务器发送代理连接请求报文。第二服务器根据代理连接请求报文与第一客户端建立连接。这样,就可以由第二服务器继续为第一客户端提供服务,第一客户端不必重新发送连接请求报文,客户端感知不到服务中断,实现了服务器的无缝平滑切换,提高了用户感受。

基于相同的发明构思,本申请实施例还提供了一种lb设备,如图5所示,包括处理器501和机器可读存储介质502,机器可读存储介质502存储有能够被处理器501执行的机器可执行指令。处理器501被机器可执行指令促使执行上述图3所示实施例提供的服务器切换方法。该服务器切换方法包括:

当检测到服务器集合中的第一服务器故障时,从本地存储的会话列表中,获取包括第一服务器的第一地址信息的第一会话;第一会话还包括与第一服务器连接的第一客户端的第三地址信息;

从服务器集合中除第一服务器外的服务器中,选择第二服务器;

将第一会话中的第一地址信息更新为第二服务器的第二地址信息;

根据第二地址信息和第三地址信息,向第二服务器发送代理连接请求报文,以使第二服务器根据代理连接请求报文与第一客户端建立连接。

本申请实施例中,当检测到服务器集合中的第一服务器故障时,lb设备代替第一客户端向第二服务器发送代理连接请求报文。第二服务器根据代理连接请求报文与第一客户端建立连接。这样,就可以由第二服务器继续为第一客户端提供服务,第一客户端不必重新发送连接请求报文,客户端感知不到服务中断,实现了服务器的无缝平滑切换,提高了用户感受。

机器可读存储介质502可以包括ram(randomaccessmemory,随机存取存储器),也可以包括nvm(non-volatilememory,非易失性存储器),例如至少一个磁盘存储器。另外,机器可读存储介质502还可以是至少一个位于远离前述处理器的存储装置。

处理器501可以是通用处理器,包括cpu(centralprocessingunit,中央处理器)、np(networkprocessor,网络处理器)等;还可以是dsp(digitalsignalprocessing,数字信号处理器)、asic(applicationspecificintegratedcircuit,专用集成电路)、fpga(field-programmablegatearray,现场可编程门阵列)或其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

基于相同的发明构思,本申请实施例还提供了一种机器可读存储介质,存储有机器可执行指令,在被处理器调用和执行时,机器可执行指令促使处理器执行上述图3所示实施例提供的服务器切换方法。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于服务器切换装置、lb设备、机器可读存储介质实施例而言,由于其基本相似于服务器切换方法实施例,所以描述的比较简单,相关之处参见服务器切换方法实施例的部分说明即可。

以上所述仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1