一种基于HAProxy的服务器节点升级方法及电子设备与流程

文档序号:16428854发布日期:2018-12-28 19:59阅读:148来源:国知局
本公开涉及互联网
技术领域
:,具体地,涉及一种基于haproxy的服务器节点升级方法及电子设备。
背景技术
:随着internet技术的不断发展,为满足日益复杂的应用需求,系统页面主要呈现为交互性动态页面形式,随之而来的就是动态网站对服务器运行环境的要求不断提升,在大多数的企业级应用中,客户端与服务器经常需要多次交互才能完成一次事务处理,由于这些交互与用户的身份紧密相关,因此,与这个客户端相关的应用请求,往往需要转发至一台服务器完成,而不能被负载均衡转发到不同服务器上进行处理。当系统进行更新时,如果停机更新,用户需要等待,如果转发至其他服务器上,用户信息的就会丢失。为了实现服务器中系统的平滑升级,我们需要在负载均衡上配置会话保持机制,以确保客户端与服务器之间的交互不会因为部署了负载均衡而发生问题。haproxy提供了三种会话保持方式:源地址hash、设置cookie和会话粘性表sticktable。sticktable是haproxy的一个非常优秀的特性,这个表里面存储的是stickiness记录,stickiness记录了客户端和服务器1:1对应的引用关系。通过这个关系,haproxy可以将客户端的请求引导到之前为它服务过的后端服务器上,实现了会话保持的功能。技术实现要素:鉴于上述问题,本公开提供了一种基于haproxy的服务器节点升级方法及电子设备,以解决服务器中应用系统不能平滑升级,造成客户端需等待更新或者丢失客户端的信息。本公开提供一种基于haproxy的服务器节点升级方法,其中,应用系统分布于多个服务器节点中,方法包括:用户访问应用系统时,haproxy将用户请求分配到第一服务器节点;所述第一服务器节点设置第一stickiness记录,并将该第一stickiness记录的副本发送至会话服务器,该会话服务器将所述副本保存为第二stickiness记录,其中,该第一stickiness记录及第二stickiness记录表示后续的用户请求被分配到所述第一服务器节点中;所述第一服务器节点进行升级时,将该用户请求重新分配到第二服务器节点;所述第二服务器节点向会话服务器查询所述第二stickiness记录,取回并保存为第三stickiness记录,所述第三stickiness记录表示后续的用户请求被分配到所述第二服务器节点中。可选地,所述第一服务器节点设置第一stickiness记录,并将该第一stickiness记录的副本发送至会话服务器,该会话服务器将所述副本保存为第二stickiness记录,还包括:若所述用户是首次访问所述第一服务器节点,所述第一服务器节点为所述用户建立新的stickiness记录,即设置所述第一stickiness记录;若所述用户不是首次访问所述第一服务器节点,所述第一服务器节点从所述会话服务器取回该会话服务器存储的stickiness记录,并设置为所述第一stickiness记录。可选地,会话数据需要更新时,在所述第一服务器节点更改所述第一stickiness记录,并将更改后的第一stickiness记录的副本发送至会话服务器,会话服务器对其保存的第二stickiness记录进行更新并保存。可选地,所述第二服务器节点向会话服务器查询所述第二stickiness记录,取回并保存为第三stickiness记录,还包括:所述会话服务器对所述第二stickiness记录进行修改并保存;所述第二服务器节点取回修改后的第二stickiness记录,并保存为第三stickiness记录。可选地,haproxy已经创建sticktable,该sticktable存储有stickiness记录对应的状态统计数据,该状态统计数据表示所述第一服务器节点和第二服务器节点与用户建立连接的状态。可选地,所述sticktable还包括所述用户和所述第一服务器节点和第二服务器节点的映射关系。可选地,当所述haproxy更新时,旧的haproxy进程会和新的haproxy进程建立tcp连接,所述旧的haproxy进程将所述sticktable推送给所述新的haproxy进程。本公开还提供一种基于haproxy的服务器节点升级的电子设备,包括:处理器;存储器,其存储有计算机可执行程序,该程序在被所述处理器执行时,使得所述处理器执行上述基于haproxy的服务器节点升级的方法。本公开还提供一种基于haproxy的服务器节点升级的系统,包括:分配模块,用于当用户访问应用系统时,haproxy将用户请求分配到第一服务器节点,并且,当所述第一服务器节点进行升级时,将该用户请求重新分配到第二服务器节点;第一服务器节点设置模块,用于为所述第一服务器节点设置stickiness记录;第二服务器节点设置模块,用于为所述第二服务器节点设置stickiness记录;存储模块,用于在所述会话服务器存储所述第一服务器节点和第二服务器节点设置的stickiness记录的副本。本公开还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现上述基于haproxy的服务器节点升级的方法。附图说明图1示意性示出了本公开实施例提供的基于haproxy的服务器节点升级方法的流程图。图2示意性示出了本公开实施例提供的基于haproxy的服务器节点升级的电子设备的框图。图3示意性示出了本公开实施例提供的基于haproxy的服务器节点升级的系统的框图。具体实施方式根据结合附图对本公开示例性实施例的以下详细描述,本公开的其它方面、优势和突出特征对于本领域技术人员将变得显而易见。在本公开中,术语“包括”和“含有”及其派生词意为包括而非限制;术语“或”是包含性的,意为和/或。在本说明书中,下述用于描述本公开原理的各种实施例只是说明,不应该以任何方式解释为限制公开的范围。参照附图的下述描述用于帮助全面理解由权利要求及其等同物限定的本公开的示例性实施例。下述描述包括多种具体细节来帮助理解,但这些细节应认为仅仅是示例性的。因此,本领域普通技术人员应认识到,在不背离本公开的范围和精神的情况下,可以对本文中描述的实施例进行多种改变和修改。此外,为了清楚和简洁起见,省略了公知功能和结构的描述。此外,贯穿附图,相同参考数字用于相似功能和操作。本公开提供了一种基于haproxy的服务器节点升级方法,在本实施例中,该方法包括一个会话服务器和至少两个服务器节点,haproxy已经创建sticktable。sticktable中使用key/value的方式保存客户端和服务器节点之间的映射关系,key是客户端的标识符,可以使用客户端的源ip、cookie以及从报文中过滤出来的部分string,value是服务器节点的标识符,通过key/value可以将客户端引导到之前为它服务过的服务器节点上,实现最基本的粘性,即实现会话保持功能。除此之外,sticktable额外存储了每个stickiness记录对应的状态统计数据,比如stickiness记录目前建立了多少和客户端的连接、平均建立连接的速度、流入流出了多少字节的数据、建立会话的数量等。sticktable可以在“双主模型”下进行复制,只要设置好对端haproxy节点,haproxy就会将新插入的、刚更新的记录通过tcp连接推送到对端节点上,避免粘性记录丢失。并且,当haproxy更新时,旧haproxy进程会和新haproxy进程建立tcp连接,将其维护的sticktable推送给新进程,这样新进程不会丢失粘性信息,和其他节点也能最大程度地保持同步,使得其他节点只需要推送该节点更新过程中新增加的stickiness记录就能完全保持同步。图1示意性示出了本公开实施例提供的基于haproxy的服务器节点升级方法的流程图。下面参考图1,结合具体实施例对本公开基于haproxy的服务器节点升级方法做进一步说明。如图1所示,方法包括如下操作:s1,收到用户y请求,分配用户请求到服务器节点a,设置stickiness记录-y(a)。在操作s1中,用户访问系统时,haproxy将用户请求分配到某个服务器节点,在本实施例中记为服务器节点a,用户访问的系统分布在服务器节点a中。进一步地,服务器节点a首先检查服务器节点a是否保存有stickiness记录-y(a),如果服务器节点a保存有stickiness记录-y(a),直接执行操作s2;如果服务器节点a没有stickiness记录-y(a),服务器节点a向会话服务器查询是否存在stickiness记录-y(n),如果stickiness记录-y(n)存在,将n修改为a,取回服务器节点a,服务器节点a保存stickiness记录-y(a),然后执行操作s2,其中stickiness记录-y(n)表示用户y分配给服务器节点n,其中n为某个可以处理用户y请求的服务器节点;如果服务器节点a没有stickiness记录-y(a),且会话服务器没有stickiness记录-y(n),则可以判断用户y第一次访问系统,在服务器节点a上为用户y建立新的stickiness记录-y(a),保存用户y的有关信息,并将新建立的stickiness记录-y(a)的副本发送到会话服务器,然后,执行操作s2。s2,更新会话,会话服务器保存stickiness记录-y(a1)。在操作s2中,会话服务器将用户y分配给服务器节点a之后,在会话服务器端注册保存stickiness记录-y(a1),此后,用户y的所有请求都将被分配给服务器节点a处理。用户y继续访问系统,其提交的请求都被分配给服务器节点a处理,系统可以直接从服务器节点a上读取stickiness记录-y(a)来获取用户y的会话信息。进一步地,如果需要更新会话数据,服务器节点a直接更改其保存的stickiness记录-y(a)的数据,并将更改后的stickiness记录-y(a)的副本发送给服务器节点,服务器节点更新stickiness记录-y(a1)并保存,使会话服务器上的stickiness记录-y(a1)与服务器节点a上的stickiness记录-y(a)始终保持一致。s3,服务器节点a更新时,分配用户请求到服务器节点b,设置stickiness记录-y(b)。在操作s3中,当服务器节点a进行升级时,此时用户y访问系统,用户y提交的请求将被重新分配给新的服务器节点处理,在本实施例中新的服务器节点被记为服务器节点b,用户访问的系统分布在服务器节点b中。进一步地,服务器节点b首先检查服务器节点b是否保存有stickiness记录-y(b),如果服务器节点b保存有stickiness记录-y(b),不用再向会话服务器查询stickiness记录-y(n)是否存在;如果服务器节点b没有stickiness记录-y(b),服务器节点b向会话服务器查询stickiness记录-y(n)是否存在,会话服务器查询到stickiness记录-y(a1)存在后,将stickiness记录-y(a1)修改为stickiness记录-y(b1),并让服务器节点b取回,在服务器节点b中保存为stickiness记录-y(b)。s4,会话服务器修改为stickiness记录-y(b1)。在操作s4中,服务器节点a进行升级时,用户y访问系统被分配给服务器节点b时,会话服务器会将其保存的stickiness记录-y(a1)修改为stickiness记录-y(b1),并进行保存。按照此操作流程,用户y访问系统,用户请求就从服务器节点a转移到服务器节点b上。本公开实施例的另一方面,还提供了一种基于haproxy的服务器节点升级的电子设备,图2示意性示出了根据本公开实施例的适于实现本公开基于haproxy的服务器节点升级的电子设备的框图。图2示出的电子设备框图仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。如图2所示,电子设备200包括处理器210和计算机可读存储介质220。该电子设备200可以执行上面参考图1描述的方法,以进行消息处理。具体地,处理器210例如可以包括通用微处理器、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(asic)),等等。处理器210还可以包括用于缓存用途的板载存储器。处理器310可以是用于执行参考图1描述的根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。计算机可读存储介质220,例如可以是能够包含、存储、传送、传播或传输指令的任意介质。例如,可读存储介质可以包括但不限于电、磁、光、电磁、红外或半导体系统、装置、器件或传播介质。可读存储介质的具体示例包括:磁存储装置,如磁带或硬盘(hdd);光存储装置,如光盘(cd-rom);存储器,如随机存取存储器(ram)或闪存;和/或有线/无线通信链路。计算机可读存储介质220可以包括计算机程序221,该计算机程序221可以包括代码/计算机可执行指令,其在由处理器210执行时使得处理器210执行例如上面结合图1所描述的方法流程及其任何变形。计算机程序221可被配置为具有例如包括计算机程序模块的计算机程序代码。例如,在示例实施例中,计算机程序221中的代码可以包括一个或多个程序模块,例如包括221a、模块221b、……。应当注意,模块的划分方式和个数并不是固定的,本领域技术人员可以根据实际情况使用合适的程序模块或程序模块组合,当这些程序模块组合被处理器210执行时,使得处理器210可以执行例如上面结合图1所描述的方法流程及其任何变形。图3示意性示出了根据本公开实施例基于haproxy的服务器节点升级的系统的框图。如图3所示,计算机系统300包括分配模块310、第一服务器节点设置模块320、第二服务器节点设置模块330、存储模块340。该计算机系统300可以执行上面参考图1描述的方法,以实现多个电子设备之间的通信。具体地,分配模块310,用于当用户访问应用系统时,haproxy将用户请求分配到第一服务器节点,并且,当所述第一服务器节点进行升级时,将该用户请求重新分配到第二服务器节点。在本实施例中,用户y访问系统时,分配模块将用户请求分配到服务器节点a中;当服务器节点a进行升级时,用户y访问系统,分配模块将用户请求分配到服务器节点b中。第一服务器节点设置模块320,用于在第一服务器节点设置stickiness记录-y(a),在本实施例中,第一服务器节点为服务器节点a。用户y第一次访问系统时,第一服务器节点设置模块320为用户y建立新的stickiness记录-y(a),保存用户y的有关信息;用户y不是第一次访问系统时,第一服务器节点设置模块320向会话服务器查询stickiness记录-y(n),将n修改为a,取回服务器节点a,保存stickiness记录-y(a)。第二服务器节点设置模块330,用于在第二服务器节点设置stickiness记录-y(b),在本实施例中,第二服务器节点为服务器节点b。用户请求被分配到服务器节点b时,第二服务器节点设置模块320向会话服务器查询stickiness记录-y(a1),将a1修改为b1,取回服务器节点b,保存stickiness记录-y(b)。存储模块340,用于在所述会话服务器存储所述第一服务器节点和第二服务器节点设置的stickiness记录的副本。在本实施例中,用于在会话服务器中保存stickiness记录-y(a1)和stickiness记录-y(b1)。可以理解的是,分配模块310、第一服务器节点设置模块320、第二服务器节点设置模块330、存储模块340可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,分配模块310、第一服务器节点设置模块320、第二服务器节点设置模块330、存储模块340中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、片上系统、基板上的系统、封装上的系统、专用集成电路(asic),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,分配模块310、第一服务器节点设置模块320、第二服务器节点设置模块330、存储模块340中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。尽管已经参照本公开的特定示例性实施例示出并描述了本公开,但是本领域技术人员应该理解,在不背离所附权利要求及其等同物限定的本公开的精神和范围的情况下,可以对本公开进行形式和细节上的多种改变。因此,本公开的范围不应该限于上述实施例,而是应该不仅由所附权利要求来进行确定,还由所附权利要求的等同物来进行限定。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1