CN108268266A - 一种升级方法和装置 - Google Patents
一种升级方法和装置 Download PDFInfo
- Publication number
- CN108268266A CN108268266A CN201611250134.4A CN201611250134A CN108268266A CN 108268266 A CN108268266 A CN 108268266A CN 201611250134 A CN201611250134 A CN 201611250134A CN 108268266 A CN108268266 A CN 108268266A
- Authority
- CN
- China
- Prior art keywords
- server
- file
- finger daemon
- function
- static heat
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种升级方法,所述方法包括:当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于所述第一服务器的升级信息,生成静态热补丁文件并存储在所述第一服务器中;使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,完成对所述守护进程的升级。本发明的实施例同时还公开了一种升级装置。
Description
技术领域
本发明涉及通信领域中的信息处理技术,尤其涉及一种升级方法和装置。
背景技术
随着云计算时代的到来,各种云计算解决方案层出不穷。其中,分布式存储系统是云计算系统中最重要的一部分,因为它承载着整个系统的数据业务,分布式存储系统出现一点小问题对整个云计算系统的影响都是难以估计的。但是作为一个软件系统来说,分布式存储系统相比于单机独立运行的软件系统复杂度要高出许多。
分布式存储系统一般在集群的每台第一服务器上都会部署一个守护进程,现有的升级方法一般是逐个升级第一服务器上的守护进程。升级过程中,每升级一台第一服务器,需要先停止正在运行的守护进程,然后替换软件程序文件,再将守护进程重新启动,从而恢复集群的正常工作。但是这种升级方式需要停止正在运行的守护进程,对集群来说相当于有一台第一服务器发生了故障,发生故障之后,集群会进入一个故障恢复的过程,这个过程会对集群所服务的上层业务产生一定的影响,业务性能会降低。
发明内容
为解决上述技术问题,本发明实施例期望提供一种升级方法和装置,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
本发明的技术方案是这样实现的:
一种升级方法,所述方法包括:
当检测到第一服务器需要升级时,获取第一服务器的升级信息;
基于所述第一服务器的升级信息,生成静态热补丁文件,并存储在所述第一服务器中;
使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,完成对所述守护进程的升级。
可选的,所述当检测到第一服务器需要升级时,获取第一服务器的升级信息,包括:
当检测到所述第一服务器需要升级时,获取所述守护进程的原始代码文件;
相应的,所述基于所述第一服务器的升级信息,生成静态热补丁文件,并存储在所述第一服务器中,包括:
对所述守护进程的原始代码文件中的第一代码进行编译得到第一编译文件;
基于所述第一服务器的升级需求,修改所述原始代码文件中的所述第一代码得到第二代码;
对所述第二代码进行编译得到第二编译文件;
基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件,并存储在所述第一服务器中。
可选的,所述基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件,并存储在所述第一服务器中,包括:
比较所述第一编译文件和所述第二编译文件,获得所述第二编译文件与所述第一编译文件的内容差异;
基于所述内容差异生成所述静态热补丁文件;
将所述静态补丁文件映射到所述第一服务器的内存空间中。
可选的,所述使用所述静态热补丁文件进行守护进程的函数地址替换,完成对所述第一服务器的守护进程的升级,包括:
设置所述静态热补丁文件中的代码与所述第一服务器的守护进程的函数的对应关系;
停止所述第一服务器的守护进程中除主线程之外的其它线程;
使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换;
替换完成后,恢复所述第一服务器的守护进程中除主线程之外的其它线程,完成对所述守护进程的升级。
可选的,所述使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,包括:
根据所述静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置所述守护进程的原始函数的跳转地址为所述静态热补丁文件中的对应函数的地址;
通过所述静态热补丁文件中与所述守护进程的原始函数对应的函数执行所述守护进程的升级过程。
可选的,所述方法还包括:
接收客户端的升级指令,并响应所述升级指令生成升级通知信息;
发送所述升级通知信息至第二服务器,以便于所述第二服务器使用所述静态热补丁文件进行所述第二服务器的守护进程的升级;其中,所述第二服务器为与所述第一服务器属于同一集群中的除所述第一服务器外的至少一个服务器,所述第二服务器中存储有所述静态热补丁文件。
一种升级装置,所述装置包括:获取单元、第一处理单元和第二处理单元,其中:
所述获取单元,用于当检测到第一服务器需要升级时,获取第一服务器的升级信息;
所述第一处理单元,用于基于所述第一服务器的升级信息,生成静态热补丁文件,并存储在所述第一服务器中;
所述第二处理单元,用于使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,完成对所述守护进程的升级。
可选的,所述获取单元具体用于:
当检测到所述第一服务器需要升级时,获取所述守护进程的原始代码文件;
相应的,所述第一处理单元包括:获取模块、修改模块和第一处理模块,其中:
所述获取模块,用于对所述守护进程的原始代码文件中的第一代码进行编译得到第一编译文件;
所述修改模块,用于基于所述第一服务器的升级需求,修改所述原始代码文件中的所述第一代码得到第二代码;
所述获取模块,还用于对所述第二代码进行编译得到第二编译文件;
所述第一处理模块,用于基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件,并存储在所述第一服务器中。
可选的,所述处理模块具体用于:
比较所述第一编译文件和所述第二编译文件,获得所述第二编译文件与所述第一编译文件的内容差异;
基于所述内容差异生成所述静态热补丁文件;
将所述静态补丁文件映射到所述第一服务器的内存空间中。
可选的,所述第二处理单元包括:设置模块、第二处理模块和替换模块,其中:
所述设置模块,用于设置所述静态热补丁文件中的代码与所述第一服务器的守护进程的函数的对应关系;
所述第二处理模块,用于停止所述第一服务器的守护进程中除主线程之外的其它线程;
所述替换模块,用于使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换;
所述第二处理模块,还用于替换完成后,恢复所述第一服务器的守护进程中除主线程之外的其它线程,完成对所述守护进程的升级。
可选的,所述替换模块具体用于:
根据所述静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置所述守护进程的原始函数的跳转地址为所述静态热补丁文件中的对应函数的地址;
通过所述静态热补丁文件中与所述守护进程的原始函数对应的函数执行所述守护进程的升级过程。
可选的,所述装置还包括:接收单元和发送单元,其中:
所述接收单元,用于接收客户端的升级指令,并响应所述升级指令生成升级通知信息;
所述发送单元,用于发送所述升级通知信息至第二服务器,以便于所述第二服务器使用所述静态热补丁文件进行所述第二服务器的守护进程的升级;其中,所述第二服务器为与所述第一服务器属于同一集群中的除所述第一服务器外的至少一个服务器,所述第二服务器中存储有所述静态热补丁文件。
本发明的实施例所提供的升级方法和装置,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
附图说明
图1为本发明的实施例提供的一种升级方法的流程示意图;
图2为本发明的实施例提供的另一种升级方法的流程示意图;
图3为本发明的实施例提供的一种服务器中的守护进程的原始代码编译前后示意图;
图4为本发明的实施例提供的一种服务器中的守护进程的原始代码修改后得到的代码编译前后示意图;
图5为本发明的实施例提供的一种对编译得到的第一编译文件和第二编译文件对应的机器代码示意图;
图6为本发明的实施例提供的又一种升级方法的流程示意图;
图7为本发明的实施例提供的一种静态热补丁文件加载中的函数链接示意图;
图8为本发明的实施例提供的一种服务器的守护进程的函数地址替换原理示意图;
图9为本发明的另一实施例提供的一种升级方法的流程示意图;
图10为本发明的实施例提供的一种升级方法中将升级指令广播给集群中的所有服务器的流程示意图;
图11为本发明的实施例提供的一种升级装置的结构程示意图;
图12为本发明的实施例提供的另一种升级装置的结构程示意图;
图13为本发明的实施例提供的又一种升级装置的结构程示意图;
图14为本发明的另一实施例提供的一种升级装置的结构程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
本发明的实施例提供一种升级方法,该方法可以应用于分布式存储系统的服务器的守护进程的升级过程中,参照图1所示,该方法包括以下步骤:
步骤101、当检测到第一服务器需要升级时,获取第一服务器的升级信息。
具体的,步骤101当检测到第一服务器需要升级时,获取第一服务器的升级信息可以是通过升级装置来实现的,该升级装置可以包括第一服务器,第一服务器可以为分布式存储系统中的任意一个服务器,并且该第一服务器为分布式存储系统中的需要升级守护进程的服务器,即该服务器需要升级。第一服务器的升级信息包括第一服务器中的守护进程的升级信息。
步骤102、基于第一服务器的升级信息,生成静态热补丁文件并存储在第一服务器中。
具体的,步骤102基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中可以是由升级装置来实现的;第一服务器对得到的自己的守护进程的升级信息进行分析,生成静态热补丁文件;该静态热补丁文件中存储的是该第一服务器的守护进程实现升级的功能对应的软件实现过程。
步骤103、使用静态热补丁文件进行第一服务器的守护进程的函数地址替换,完成对守护进程的升级。
具体的,步骤103使用静态热补丁文件进行第一服务器的守护进程的函数地址替换,完成对守护进程的升级可以是由升级装置来实现的;可以将分布式存储系统中的需要升级的第一服务器中的守护进程中执行守护进程升级功能的函数地址通过静态热补丁文件替换为另一函数,这样可以由静态热补丁文件中的函数完成守护进程的升级,进而就不需要停止正在运行的守护进程了。
本发明的实施例所提供的升级方法,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
本发明的实施例提供一种升级方法,该方法可以应用于分布式存储系统的服务器的守护进程的升级过程中,参照图2所示,该方法包括以下步骤:
步骤201、当检测到第一服务器需要升级时,升级装置获取守护进程的原始代码文件。
具体的,原始代码文件可以是需要升级的第一服务器的守护进程的函数A的原始代码。
步骤202、升级装置对守护进程的原始代码文件中的第一代码进行编译得到第一编译文件。
具体的,可以通过机器编译语言将守护进程的函数A的原始代码进行编译,就可以得到第一编译文件,第一编译文件可以是一个二进制对象文件。例如,如图3中所示,需要升级的第一服务器的守护进程的函数A的原始代码为code1.c,对这个原始代码code1.c进行编译之后可以得到机器指令code1.o(即第一编译文件)。
步骤203、升级装置基于第一服务器的升级需求,修改原始代码文件中的第一代码得到第二代码。
具体的,可以根据第一服务器的守护进程的函数A需要改进的信息,对函数A的原始代码进行修改得到修改后的第二代码。
步骤204、升级装置对第二代码进行编译得到第二编译文件。
具体的,可以通过机器编译语言将守护进程的函数A’的原始代码进行编译,就可以得到第二编译文件,第二编译文件可以是一个二进制对象文件。例如,如图4中所示,需要升级的第一服务器的守护进程的函数A修改后的函数A’的原始代码为code1.c’,对这个原始代码code1.c’进行编译之后可以得到机器指令code1.o’(即第二编译文件)。第一编译文件和第二编译文件都是可执行和可链接格式(Executable and Linking Format,ELF)的文件。
其中,code1.o和code1.o’的区别如图5中所示,编译的时候给编译器gcc指定了参数“-pg-mfentry”,所以函数A的第一个调用会是“call_fentry_”。这条指令调用的函数_fentry_是gcc定义的内部函数,目的是供外部工具统计函数执行信息用。_fentry_函数将会被替换为自定义的代理函数,用来完成函数A到函数A’的转移过程。
步骤205、升级装置基于第一编译文件和第二编译文件,生成静态热补丁文件并存储在第一服务器中。
具体的,比较得到的第一编译文件和第二编译文件,查找第二编译文件中与第一编译文件中的不同,并根据不同之处生成静态热补丁文件。
步骤206、升级装置设置静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系。
步骤207、升级装置停止第一服务器的守护进程中除主线程之外的其它线程。
具体的,主线程是第一服务器的守护进程中执行函数地址替换的线程。
步骤208、升级装置使用静态热补丁文件进行第一服务器的守护进程的函数地址替换。
步骤209、替换完成后,升级装置恢复第一服务器的守护进程中除主线程之外的其它线程完成对守护进程的升级。
需要说明的是,本实施例中与其它实施例中相同步骤或概念的解释可以参照其它实施例中的描述,此处不再赘述。
本发明的实施例所提供的升级方法,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
本发明的实施例提供一种升级方法,该方法可以应用于分布式存储系统的服务器的守护进程的升级过程中,参照图6所示,该方法包括以下步骤:
步骤301、当检测到第一服务器需要升级时,升级装置获取守护进程的原始代码文件。
步骤302、升级装置对守护进程的原始代码文件中的第一代码进行编译得到第一编译文件。
步骤303、升级装置基于第一服务器的升级需求,修改原始代码文件中的第一代码得到第二代码。
步骤304、升级装置对第二代码进行编译得到第二编译文件。
步骤305、升级装置比较第一编译文件和第二编译文件,获得第二编译文件与第一编译文件的内容差异。
步骤306、升级装置基于内容差异生成静态热补丁文件。
具体的,第一服务器可以将得到的内容差异重定向到静态热补丁文件中得到静态热补丁文件,并将得到的静态热补丁文件记为livepatch.o。
步骤307、升级装置将静态补丁文件映射到第一服务器的内存空间中。
具体的,第一服务器加载得到的静态热补丁文件,即将静态热补丁文件映射到第一服务器的一块内存空间中。
步骤308、升级装置设置静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系。
具体的,第一服务器加载完静态文件之后,可以完成静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,实现所有变量、函数的链接,即让热补丁文件中的代码段可以访问到原程序内存空间中的函数,同时原程序也能访问到热补丁内存空间中的函数。如图7所示,函数A’调用了函数B,但是函数B存在于原来的进程空间中,所以现在需要在原来的进程空间中查找函数B,并把函数B的地址写入到函数A’对应的调用命令“callfunctionB”中。这样函数A’就能够调用到原来进程空间中的函数了。
步骤309、升级装置停止第一服务器的守护进程中除主线程之外的其它线程。
步骤310、升级装置根据静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置守护进程的原始函数的跳转地址为静态热补丁文件中的对应函数的地址。
具体的,如图8所示,函数A是原始代码修改之前的函数,函数A’是修改之后得到的函数。函数A在服务器守护进程内存空间中,函数A’在静态热补丁内存空间中。具体函数地址替换过程包括:将函数A的第一条“call_fentry_”命令里面的_fentry_函数地址改成自定义的代理函数proxy的地址。当调用者下次调用函数A的时候,先会进入代理函数proxy,代理函数proxy会调用重定向函数redirect,重定向函数redirect会将代理函数proxy自身的返回地址改成函数A’的地址。代理函数proxy返回地址为函数A’的地址,所以代理函数返回之后就跳到了函数A’。函数A’执行完成,会直接返回到调用者即函数A的返回地址。因为此时函数调用栈上面最顶端的是函数A的返回地址,函数A’执行结束,返回,正好读取到了函数A的返回地址。这样,函数A’就代替函数A去执行了实际的工作,而函数A没有做任何事情。
步骤311、升级装置通过静态热补丁文件中与守护进程的原始函数对应的函数执行守护进程的升级过程。
步骤312、替换完成后,升级装置恢复第一服务器的守护进程中除主线程之外的其它线程,完成对守护进程的升级。
基于前述实施例,在本发明的其它实施例中,参照图9所示,该升级方法还包括以下步骤:
步骤313、升级装置接收客户端的升级指令,并响应升级指令生成升级通知信息。
具体的,升级指令是需要给分布式存储系统中的服务器的守护进程升级的时候由客户端发送给服务器的;该第一服务器中可以包括有集群管理软件,由集群管理软件根据升级指令生成升级通知信息,并以广播的形式将升级通知信息发送至集群中的所有服务器中,当然该服务器包括第一服务器和第二服务器。
步骤314、升级装置发送升级通知信息至第二服务器,以便于第二服务器使用静态热补丁文件进行第二服务器的守护进程的升级。
其中,第二服务器是与第一服务器属于同一集群中的任一服务器,第二服务器中存储有静态热补丁文件。
具体的,第二服务器接收到集群管理软件发送的升级通知信息后,可以按照预先存储的升级方法(即第一服务器的升级过程)使用静态热补丁文件完成第二服务器的守护进程的升级。当然,在本发明的其它实施例中,如图10所示,集群管理软件可以是安装在一个主服务器中,第一服务器接收到客户的发送的升级指令之后,可以将升级指令转发至主服务器的集群管理软件。然后,主服务器的集群管理软件根据升级指令生成升级通知信息,并以广播的形式将升级通知信息发送至集群中的所有服务器中,所有服务器完成守护进程的升级之后,将对应的结果返回客户端。
可以预先将生成的静态热补丁文件拷贝到集群中的所有服务器上,然后从客户端发送升级指令到一台服务器。这样就完成了整个集群的升级工作,期间所有服务器上的守护进程都没有停止工作,也没有触发任何集群故障恢复,对集群承载的数据业务没有影响。
需要说明的是,本实施例中与其它实施例中相同步骤或相关概念的解释,可以参照其它实施例中的描述,此处不再赘述。
本发明的实施例所提供的升级方法,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
本发明的实施例提供一种升级装置4,该升级装置可以应用于图1~2、6、9对应的实施例提供的一种升级方法中,参照图11所示,该装置可以包括:获取单元41、第一处理单元42和第二处理单元43,其中:
获取单元41,用于当检测到第一服务器需要升级时,获取第一服务器的升级信息。
第一处理单元42,用于基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中。
第二处理单元43,用于使用静态热补丁文件进行第一服务器的守护进程的函数地址替换,完成对守护进程的升级。
本发明的实施例所提供的升级装置,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
进一步,获取单元41具体用于执行以下步骤:
当检测到第一服务器需要升级时,获取守护进程的原始代码文件。
相应的,参照图12所示,第一处理单元42包括:获取模块421、修改模块422和第一处理模块423,其中:
获取模块421,用于对守护进程的原始代码文件中的第一代码进行编译得到第一编译文件。
修改模块422,用于基于第一服务器的升级需求,修改原始代码文件中的第一代码得到第二代码。
第一处理模块423,用于基于第一编译文件和第二编译文件,生成静态热补丁文件并存储在第一服务器中。
进一步,第一处理模块423具体用于执行以下步骤:
比较第一编译文件和第二编译文件,获得第二编译文件与第一编译文件的内容差异。
基于内容差异生成静态热补丁文件。
将静态补丁文件映射到第一服务器的内存空间中。
具体的,参照图13所示,第二处理单元43包括:设置模块431、第二处理模块432和替换模块433,其中:
设置模块431,用于设置静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系。
第二处理模块432,用于停止第一服务器的守护进程中除主线程之外的其它线程。
替换模块433,用于使用静态热补丁文件进行第一服务器的守护进程的函数地址替换。
第二处理模块432,还用于替换完成后,恢复第一服务器的守护进程中除主线程之外的其它线程,完成对守护进程的升级。
进一步,替换模块433具体用于执行以下步骤:
根据静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置守护进程的原始函数的跳转地址为静态热补丁文件中的对应函数的地址。
通过静态热补丁文件中与守护进程的原始函数对应的函数执行守护进程的升级过程。
进一步,参照图14所示,该装置还包括:接收单元44和发送单元45,其中:
接收单元44,用于接收客户端的升级指令,并响应升级指令生成升级通知信息。
发送单元45,用于发送升级通知信息至第二服务器,以便于第二服务器使用静态热补丁文件进行第二服务器的守护进程的升级。
其中,第二服务器是与第一服务器属于同一集群中的任一服务器,第二服务器中存储有静态热补丁文件。
需要说明的是,本实施例中各个单元和模块之间的交互过程,可以参照图1~2、6、9对应的实施例提供的一种升级方法中的交互过程,此处不再赘述。
本发明的实施例所提供的升级装置,当检测到第一服务器需要升级时,获取第一服务器的升级信息;基于第一服务器的升级信息,生成静态热补丁文件,并存储在第一服务器中;使用静态热补丁文件进行第一服务器的守护进程的函数地址替换完成对守护进程的升级;这样,在给分布式存储系统中的守护进程进行升级的时候不需要停止守护进程,解决了现有技术中的分布式存储系统中的服务器的守护进程的升级方案要停止守护进程的问题,避免集群进入故障恢复过程,避免对集群中的业务的影响,保证了业务的性能。
在实际应用中,所述获取单元41、第一处理单元42、第二处理单元43、获取模块421、修改模块422、第一处理模块423、设置模块431、第二处理模块432、替换模块433、接收单元44和发送单元45均可由位于无线数据发送设备中的中央处理器(Central ProcessingUnit,CPU)、微处理器(Micro Processor Unit,MPU)、数字信号处理器(Digital SignalProcessor,DSP)或现场可编程门阵列(Field Programmable Gate Array,FPGA)等实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (12)
1.一种升级方法,其特征在于,所述方法包括:
当检测到第一服务器需要升级时,获取第一服务器的升级信息;
基于所述第一服务器的升级信息,生成静态热补丁文件并存储在所述第一服务器中;
使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,完成对所述守护进程的升级。
2.根据权利要求1所述的方法,其特征在于,所述当检测到第一服务器需要升级时,获取第一服务器的升级信息,包括:
当检测到所述第一服务器需要升级时,获取所述守护进程的原始代码文件;
相应的,所述基于所述第一服务器的升级信息,生成静态热补丁文件,并存储在所述第一服务器中,包括:
对所述守护进程的原始代码文件中的第一代码进行编译得到第一编译文件;
基于所述第一服务器的升级需求,修改所述原始代码文件中的所述第一代码得到第二代码;
对所述第二代码进行编译得到第二编译文件;
基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件,并存储在所述第一服务器中。
3.根据权利要求2所述的方法,其特征在于,所述基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件并存储在所述第一服务器中,包括:
比较所述第一编译文件和所述第二编译文件,获得所述第二编译文件与所述第一编译文件的内容差异;
基于所述内容差异生成所述静态热补丁文件;
将所述静态补丁文件映射到所述第一服务器的内存空间中。
4.根据权利要求1所述的方法,其特征在于,所述使用所述静态热补丁文件进行守护进程的函数地址替换,完成对所述第一服务器的守护进程的升级,包括:
设置所述静态热补丁文件中的代码与所述第一服务器的守护进程的函数的对应关系;
停止所述第一服务器的守护进程中除主线程之外的其它线程;
使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换;
替换完成后,恢复所述第一服务器的守护进程中除主线程之外的其它线程,完成对所述守护进程的升级。
5.根据权利要求4所述的方法,其特征在于,所述使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,包括:
根据所述静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置所述守护进程的原始函数的跳转地址为所述静态热补丁文件中的对应函数的地址;
通过所述静态热补丁文件中与所述守护进程的原始函数对应的函数执行所述守护进程的升级过程。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收客户端的升级指令,并响应所述升级指令生成升级通知信息;
发送所述升级通知信息至第二服务器,以便于所述第二服务器使用所述静态热补丁文件进行所述第二服务器的守护进程的升级;其中,所述第二服务器为与所述第一服务器属于同一集群中的除所述第一服务器外的至少一个服务器,所述第二服务器中存储有所述静态热补丁文件。
7.一种升级装置,其特征在于,所述装置包括:获取单元、第一处理单元和第二处理单元,其中:
所述获取单元,用于当检测到第一服务器需要升级时,获取第一服务器的升级信息;
所述第一处理单元,用于基于所述第一服务器的升级信息,生成静态热补丁文件并存储在所述第一服务器中;
所述第二处理单元,用于使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换,完成对所述守护进程的升级。
8.根据权利要求7所述的装置,其特征在于,所述获取单元具体用于:
当检测到所述第一服务器需要升级时,获取所述守护进程的原始代码文件;
相应的,所述第一处理单元包括:获取模块、修改模块和第一处理模块,其中:
所述获取模块,用于对所述守护进程的原始代码文件中的第一代码进行编译得到第一编译文件;
所述修改模块,用于基于所述第一服务器的升级需求,修改所述原始代码文件中的所述第一代码得到第二代码;
所述获取模块,还用于对所述第二代码进行编译得到第二编译文件;
所述第一处理模块,用于基于所述第一编译文件和所述第二编译文件,生成静态热补丁文件并存储在所述第一服务器中。
9.根据权利要求8所述的装置,其特征在于,所述第一处理模块具体用于:
比较所述第一编译文件和所述第二编译文件,获得所述第二编译文件与所述第一编译文件的内容差异;
基于所述内容差异生成所述静态热补丁文件;
将所述静态补丁文件映射到所述第一服务器的内存空间中。
10.根据权利要求1所述的装置,其特征在于,所述第二处理单元包括:设置模块、第二处理模块和替换模块,其中:
所述设置模块,用于设置所述静态热补丁文件中的代码与所述第一服务器的守护进程的函数的对应关系;
所述第二处理模块,用于停止所述第一服务器的守护进程中除主线程之外的其它线程;
所述替换模块,用于使用所述静态热补丁文件进行所述第一服务器的守护进程的函数地址替换;
所述第二处理模块,还用于替换完成后,恢复所述第一服务器的守护进程中除主线程之外的其它线程,完成对所述守护进程的升级。
11.根据权利要求10所述的装置,其特征在于,所述替换模块具体用于:
根据所述静态热补丁文件中的代码与第一服务器的守护进程的函数的对应关系,设置所述守护进程的原始函数的跳转地址为所述静态热补丁文件中的对应函数的地址;
通过所述静态热补丁文件中与所述守护进程的原始函数对应的函数执行所述守护进程的升级过程。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:接收单元和发送单元,其中:
所述接收单元,用于接收客户端的升级指令,并响应所述升级指令生成升级通知信息;
所述发送单元,用于发送所述升级通知信息至第二服务器,以便于所述第二服务器使用所述静态热补丁文件进行所述第二服务器的守护进程的升级;其中,所述第二服务器为与所述第一服务器属于同一集群中的除所述第一服务器外的至少一个服务器,所述第二服务器中存储有所述静态热补丁文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611250134.4A CN108268266A (zh) | 2016-12-29 | 2016-12-29 | 一种升级方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611250134.4A CN108268266A (zh) | 2016-12-29 | 2016-12-29 | 一种升级方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108268266A true CN108268266A (zh) | 2018-07-10 |
Family
ID=62753993
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611250134.4A Pending CN108268266A (zh) | 2016-12-29 | 2016-12-29 | 一种升级方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108268266A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032643A (zh) * | 2018-07-26 | 2018-12-18 | 北京百度网讯科技有限公司 | 软件更新的方法和装置 |
CN110275722A (zh) * | 2019-06-21 | 2019-09-24 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN111949292A (zh) * | 2020-07-30 | 2020-11-17 | 锐捷网络股份有限公司 | 一种热补丁装载方法、装置、电子设备及存储介质 |
CN113872803A (zh) * | 2021-09-22 | 2021-12-31 | 新华三信息安全技术有限公司 | 固件升级方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110005A (zh) * | 2011-02-28 | 2011-06-29 | 上海华为技术有限公司 | 软件升级方法、装置及系统 |
CN103955363A (zh) * | 2014-04-08 | 2014-07-30 | 国云科技股份有限公司 | 一种程序升级安装包的制作方法 |
CN104239082A (zh) * | 2013-06-20 | 2014-12-24 | 上海博达数据通信有限公司 | 嵌入式系统的热补丁实现方法 |
CN105468395A (zh) * | 2014-09-10 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 更新方法、装置及系统 |
US20160196116A1 (en) * | 2012-11-30 | 2016-07-07 | Huawei Technologies Co., Ltd. | Method and Apparatus for Detecting Code Change |
-
2016
- 2016-12-29 CN CN201611250134.4A patent/CN108268266A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110005A (zh) * | 2011-02-28 | 2011-06-29 | 上海华为技术有限公司 | 软件升级方法、装置及系统 |
US20160196116A1 (en) * | 2012-11-30 | 2016-07-07 | Huawei Technologies Co., Ltd. | Method and Apparatus for Detecting Code Change |
CN104239082A (zh) * | 2013-06-20 | 2014-12-24 | 上海博达数据通信有限公司 | 嵌入式系统的热补丁实现方法 |
CN103955363A (zh) * | 2014-04-08 | 2014-07-30 | 国云科技股份有限公司 | 一种程序升级安装包的制作方法 |
CN105468395A (zh) * | 2014-09-10 | 2016-04-06 | 阿里巴巴集团控股有限公司 | 更新方法、装置及系统 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109032643A (zh) * | 2018-07-26 | 2018-12-18 | 北京百度网讯科技有限公司 | 软件更新的方法和装置 |
CN110275722A (zh) * | 2019-06-21 | 2019-09-24 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN110275722B (zh) * | 2019-06-21 | 2023-08-08 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN111949292A (zh) * | 2020-07-30 | 2020-11-17 | 锐捷网络股份有限公司 | 一种热补丁装载方法、装置、电子设备及存储介质 |
CN111949292B (zh) * | 2020-07-30 | 2023-03-21 | 锐捷网络股份有限公司 | 一种热补丁装载方法、装置、电子设备及存储介质 |
CN113872803A (zh) * | 2021-09-22 | 2021-12-31 | 新华三信息安全技术有限公司 | 固件升级方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Seifzadeh et al. | A survey of dynamic software updating | |
CN108268266A (zh) | 一种升级方法和装置 | |
US20110231440A1 (en) | Application specific runtime environments | |
US20140032628A1 (en) | Dynamic optimization of command issuance in a computing cluster | |
JP2021002317A (ja) | アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体 | |
CN103077070B (zh) | 云计算管理系统以及云计算系统的管理方法 | |
CN103092742A (zh) | 程序日志记录优化方法和系统 | |
US8904234B2 (en) | Determination of items to examine for monitoring | |
US20200379880A1 (en) | Embedded quality indication data for version control systems | |
CN109564521A (zh) | 用于类层级分析的混合去优化机制 | |
CN104765621A (zh) | 一种在集群节点中部署程序的方法和系统 | |
CN106528427A (zh) | 代码质量检查方法和系统 | |
US20220107792A1 (en) | Methods, systems, articles of manufacture and apparatus to identify code semantics | |
CN113127050B (zh) | 一种应用资源打包过程监控方法、装置、设备和介质 | |
GB2518894A (en) | A method and a system for operating programs on a computer cluster | |
CN109542444B (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN104166570B (zh) | 一种在线更新文件的方法、设备及系统 | |
CN109144834A (zh) | 用户行为数据的采集方法及装置、安卓系统及终端设备 | |
CN112434008A (zh) | 分布式数据库升级方法、设备及介质 | |
CN105872842A (zh) | 一种多桌面独立升级方法及装置 | |
CN104462342A (zh) | 数据库快照同步处理方法及装置 | |
US9442818B1 (en) | System and method for dynamic data collection | |
EP3835946A1 (en) | Unified installer | |
US20190190981A1 (en) | Intelligent trace generation from compact transaction runtime data | |
CN112613792A (zh) | 数据处理方法、系统、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180710 |
|
RJ01 | Rejection of invention patent application after publication |