具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,图示了根据本发明实施方式的用于集群计算机系统的投票仲裁方法流程示意图,本发明提供的用于集群计算机系统的投票仲裁方法包括:
当所述集群计算机系统发生分裂时,根据所述分裂后子集群内节点上的资源票数和节点票数为分裂后合法子集群的确定进行仲裁以使所述仲裁得到的合法子集群继续提供服务,其中
所述资源票数可根据节点上运行的应用资源的启动时间进行设置。
本发明的实施方式中,当集群计算机系统发生故障分裂时,根据分裂后各子集群内节点上的资源票数和节点票数为分裂后合法集群的确定(即子集群的接管)进行仲裁以使仲裁得到的合法子集群继续提供服务。其中,所述故障可能是因节点间的心跳检测故障而导致的集群分裂,也可能是因某一节点自身故障而导致的集群分裂。例如,双节点集群系统因两节点间的心跳检测故障发生分裂,分裂为子集群1(包括节点1)和子集群2(包括节点2)。
本发明实施方式中,分裂后子集群内的节点票数可以采用每个节点投一票或一票以上的形式实施,例如上述的双节点集群系统中,可以采用每个节点投一票,子集群1仅包括1个节点(即节点1),则其节点票数为1票,子集群2包括1个节点(即节点2),则其节点票数也为1票。节点上的资源票数是节点上运行的应用资源的票数之和,可以根据节点上各个应用资源的启动时间进行资源票数设置,例如节点1上有应用资源app1和app2,应用资源app1的启动时间20S(S为时间度量单位秒),可设置资源票数为1票,应用资源app2的启动时间为40S,可设置资源票数为2票,节点1上的资源票数为该节点上应用资源app1和app2的资源票数之和,即3票。值得指出的是,本领域技术人员可以根据应用需要设置应用资源启动时间与资源票数之间的对应关系,并不限于本发明实施方式中所提到的对应关系。
本发明实施方式中,分裂后子集群的资源票数为该子集群内各节点的资源票数之和,例如子集群1内包括节点1和节点2,节点1的资源票数为2票,节点2的资源票数为3票,则子集群1的资源票数为该子集群内节点1和节点2的资源票数之和,即5票。
本发明的一些实施方式中,以四节点集群计算机系统为例,因故障分裂为两个子集群,子集群1(包括节点1和节点2)和子集群2(包括节点3和节点4),节点1的资源票数为4票,节点2的资源票数为2票,节点3的资源票数为1票,节点4的资源票数为1票,采用每个节点投一票的形式,子集群1包括两个节点,其节点票数为2票,子集群2包括两个节点,其节点票数同样为两票,通过本发明提供的投票仲裁方法根据分裂后子集群内节点上的资源票数和节点票数确定合法子集群,子集群1和子集群2的节点票数相同,通过节点票数比较不能确定出合法子集群,通过比较子集群1(资源票数为6票)和子集群2(资源票数为2票)的资源票数,可知子集群1的资源票数大于子集群2的资源票数,将子集群1确定为合法子集群,由确定出的合法子集群1接管子集群2。
本发明的所述分裂后子集群内节点上的资源票数的确定可以采用图2所示的流程设置。参见图2,图示了根据本发明实施方式的集群内节点上的资源票数设置的流程示意图,具体可以包括:
S200,资源启动单元启动所述节点上的应用资源;
S202,监测单元通过监测脚本监测所述应用资源的启动时间;
S204,资源投票分数设置器根据监测得到的启动时间设置所述应用资源的资源票数。
需要说明的是,本发明实施方式中的资源启动单元、监测单元和资源投票分数设置器可部署于用于管理集群计算系统的设备内。本发明的实施方式中,为使节点上运行的应用资源参与投票,其中应用资源包括httpd应用资源、tomcat应用资源等。可以在资源启动单元启动应用资源后,根据监测脚本监测到的启动时间为各节点上的应用资源设置相应的票数,其中票数设置的高低与监测脚本监测得到的资源的启动时间有关,监测脚本监测得到的启动时间越长,资源投票分数设置器为所述应用资源设置的资源票数越高。例如,在本发明的一些实施方式中,资源启动时间与资源票数可以是如下表1所示,表中启动时间为T,S为时间度量单位秒。
表1
启动时间T/S |
资源票数 |
0S<T<=10S |
0票 |
10S<T<=30S |
1票 |
30S<T<=50S |
2票 |
50S<T<=70S |
3票 |
70S<T<=90S |
4票 |
90S<T |
5票 |
需要说明的是,本领域技术人员可以根据应用需要设置启动时间和资源票数之间的关系,并不限于本发明实施方式中表1所示的对应关系。
本发明的实施方式中,考虑到应用资源启动后随着业务量的增加资源的启动时间会增加的问题,可以在监测脚本中加入监测资源的业务量的功能。本发明实施方式中的应用资源还可以包括甲骨文数据库应用资源,即oracle应用资源,对于oracle应用资源,业务量的大小是影响资源启动时间的主要因素。在oracle资源的资源票数设置过程中,本发明的方法可以包括:
通过监测脚本获取所述应用资源的业务量,当所述业务量超过预定的阈值时,资源投票分数设置器为所述应用资源重新设置资源票数。
具体地,可以在监测脚本中加入获取业务量的命令来获取应用资源的业务量,当业务量超过预定的阈值时,启动资源投票分数设置器为所述资源重新设置资源票数。其中,所述预定的阈值可以由技术人员根据应用需要进行设置。
本发明的高可用集群计算机系统可以包括双节点高可用集群计算机系统。参见图3,图示了根据本发明实施方式的双节点高可用集群计算机系统的组网模型示意图。当双节点集群计算机系统出现故障分裂时,需要借助第三方(磁盘、仲裁服务器等)确定哪一个节点是合法节点,并由合法节点接管另一节点上运行的服务。在图2所示的双节点集群中,可以采用表1中所示的启动时间和资源票数对应关系,资源app1的启动时间为80S,可设置票数为4票,资源app2的启动时间为30S,可设置票数为2票,资源app3的启动时间为20S,可设置票数为1票,其中S为时间度量单位秒。当发生故障时,可以通过比较所述双节点高可用集群计算机系统内两节点上的资源票数确定出具有最大资源票数的节点,将确定出的具有最大资源票数的节点(节点1)作为合法子集群接管非法子集群(节点2)以使合法子集群可以继续对外提供服务,由于在双节点集群系统中两节点的节点票数相同,因而可以在仲裁过程中不进行比较。通过比较节点1和节点2的资源票数确定出节点1为合法节点,由节点1获取磁盘的控制权接管节点2上运行的资源,即在节点1上重新启动资源app2、app3,所需的时间大约为30S。需要说明的是,为了保证分裂后的双节点子集群继续对外提供服务,如果确定出资源票数高的节点(节点1)应当接管另一节点(节点2)上的服务,但是当节点1发生故障无法进行接管时,可以采用节点2进行接管以继续对外提供服务。在图3所示的组网模型下,采用现有的节点投票方式进行仲裁,节点2至少有50%的机会获取磁盘的控制权接管节点1上的运行的资源app1,其所需时间为大约80S。显然,本发明提供的方法有效地降低了资源切换的处理时间,提高了集群系统的连续对外服务时间。
本发明的集群计算机系统不仅可以包括双节点高可用集群计算机系统,还可以包括含有三个以上节点的高可用集群计算机系统。需要说明的是,在三节点集群系统中,当集群分裂为两个子集群,子集群1包括两个节点,子集群2包括一个节点时,为了避免集群中的单点故障,首先考虑集群分裂后子集群的节点票数,将包括两个节点的子集群1确定为合法子集群。
优选地,以四节点集群系统为例,说明本发明的根据分裂后各子集群内节点上的资源票数和节点票数为分裂后各子集群的接管进行仲裁以继续提供服务的方法。四节点集群计算机系统中,各节点上存有集群内所有节点的资源票数信息及对应的节点票数信息,节点1上运行资源app1,节点2上运行资源app2和app3,节点3上运行资源app4,节点4上运行资源app5,其中各节点上资源的启动时间和资源票数对应关系可以如表2所示,集群中每个节点上可存有如表3所示的资源票数和节点票数信息。
表2
资源名 |
启动时间 |
资源票数 |
app1 |
15S |
1票 |
app2 |
35S |
2票 |
app3 |
20S |
1票 |
app4 |
80S |
4票 |
app5 |
60S |
3票 |
表3
资源名 |
运行节点 |
资源票数 |
app1 |
节点1 |
1票 |
app2 |
节点2 |
2票 |
app3 |
节点2 |
1票 |
app4 |
节点3 |
4票 |
app5 |
节点4 |
3票 |
本发明实施方式中,发生故障时,分裂为子集群1(包括节点1和节点2),子集群2(包括节点3和节点4)。按照本发明提供方法根据分裂后子集群内的节点上的资源票数和节点票数为合法子集群的确定进行仲裁,子集群1和子集群2的节点票数相同,均为2票,子集群1的资源票数为其各节点的资源票数之和为4票,而子集群2其各节点的资源票数之和为7票,子集群2的资源票数高于子集群1的资源票数,可以确定出子集群2为合法集群,由确定出的子集群2接管子集群1上运行的资源,所需的切换时间为大约50S。若采用现有的节点投票方案,子集群1具有50%的机会接管子集群2上运行的资源,其所需的资源切换时间大约为140S,显然,本发明所提供的根据分裂后子集群节点票数和资源票数结合的方法显著地减少了合法子集群接管过程中资源切换所需要的处理时间,提高了集群系统的连续对外服务时间。
本发明实施方式可以通过比较分裂后子集群内的节点上的资源票数和节点票数来确定合法子集群,例如可以通过比较分裂后子集群内各子集群的节点票数来确定出节点票数占集群的总节点票数三分之二以上的子集群,如果分裂后子集群中包括符合上述节点票数条件的子集群,则将该子集群确定为合法子集群,如果分裂后子集群中不包括符合上述节点票数条件的子集群,则进一步判断分裂后子集群内是否包括节点票数占集群的总节点票数三分之一以上且包括最大资源票数节点的子集群,如果分裂后子集群内包括符合上述节点票数条件和资源票数条件的子集群,则将该子集群确定为合法子集群,如果没有包括符合上述节点票数和资源票数条件的子集群,则集群系统宕机,无法继续服务。
以五节点集群系统为例,节点1上运行资源app1,节点2上运行资源app2,节点3上运行资源app3,节点4上运行资源app4,节点5上运行资源app5,各节点上运行的资源的启动时间与资源票数对应关系可以如表4所示,节点上存有的资源票数和节点票数信息如表5所示。
表4
资源名 |
启动时间 |
资源票数 |
app1 |
15S |
1票 |
app2 |
20S |
1票 |
app3 |
40S |
2票 |
app4 |
60S |
3票 |
app5 |
120S |
5票 |
表5
资源名 |
运行节点 |
资源票数 |
app1 |
节点1 |
1票 |
app2 |
节点2 |
1票 |
app3 |
节点3 |
2票 |
app4 |
节点4 |
3票 |
app5 |
节点5 |
5票 |
本发明的一些实施方式中,发生故障后,分裂为子集群1(包括节点1,节点2,节点3和节点4),子集群2(仅包括节点5),根据本发明提供的上述仲裁方案,子集群1的节点票数(4票)大于集群的总节点票数(5票)的三分之二,可以确定子集群1为合法集群。本发明的另外一些实施方式中,分裂为子集群1(包括节点1,节点2和节点3),子集群2(包括节点4和节点5),根据本发明提供的上述仲裁方案,在确定没有节点票数大于集群的总节点票数三分之二的子集群后,进一步判断是否包括节点票数大于集群的总节点票数三分之一且包括最大资源票数的节点的子集群,通过比较节点票数和资源票数,可以确定出子集群2为合法集群,由于该子集群内包括了具有资源票数最大(启动时间最长的资源app5)的节点,其接管的另外的子集群的资源启动时间都比最大资源票数的启动时间短,因而可以在子集群接管过程中缩短资源切换的处理时间,提高集群连续对外服务时间。值得指出的是,本发明实施方式中的节点票数判断除了可以采用提到的三分之二和三分之一之外,还可以采用其他的分数,本领域技术人员可根据应用情况进行相应的设置。
以上结合附图和图表对本发明的用于集群计算机系统的投票仲裁方法进行了说明,下面将结合附图对本发明的用于集群计算机系统的投票仲裁装置进行说明。
参见图4,图示了根据本发明实施方式的用于集群计算机系统的投票仲裁装置的结构示意图,所述装置400包括:
仲裁模块402,用于当所述集群计算机系统发生分裂时,根据所述分裂后子集群内节点上的资源票数和节点票数为分裂后合法子集群的确定进行仲裁以使所述仲裁得到的合法子集群继续提供服务,其中
所述资源票数可根据节点上运行的应用资源的启动时间进行设置。
需要说明的是,本发明实施方式中的仲裁模块402可部署于用于管理集群计算机系统的设备内。本发明的实施方式中,当集群计算机系统发生分裂时,仲裁模块402可以用于根据各分裂后子集群内节点上的资源票数和节点票数为分裂后合法子集群的确定进行仲裁以使仲裁得到的合法子集群继续对外提供服务。
本发明实施方式中,分裂后子集群内的节点票数可以采用每个节点投一票或一票以上的形式实施,例如上述的双节点集群系统中,可以采用每个节点投一票,子集群1仅包括1个节点(即节点1),则其节点票数为1票,子集群2包括1个节点(即节点2),则其节点票数也为1票。节点上的资源票数是节点上运行的应用资源的票数之和,可以根据节点上各个应用资源的启动时间进行资源票数设置,例如节点1上有应用资源app1和app2,应用资源app1的启动时间20S(S为时间度量单位秒),可设置资源票数为1票,应用资源app2的启动时间为40S,可设置资源票数为2票,节点1上的资源票数为该节点上应用资源app1和app2的资源票数之和,即3票。值得指出的是,本领域技术人员可以根据应用需要设置应用资源启动时间与资源票数之间的对应关系,并不限于本发明实施方式中所提到的对应关系。
本发明实施方式中,分裂后子集群的资源票数为该子集群内各节点的资源票数之和,例如子集群1内包括节点1和节点2,节点1的资源票数为2票,节点2的资源票数为3票,则子集群1的资源票数为该子集群内节点1和节点2的资源票数之和,即5票。
本发明的一些实施方式中,以四节点集群计算机系统为例,因故障分裂为两个子集群,子集群1(包括节点1和节点2)和子集群2(包括节点3和节点4),节点1的资源票数为4票,节点2的资源票数为2票,节点3的资源票数为1票,节点4的资源票数为1票,采用每个节点投一票的形式,子集群1包括两个节点,其节点票数为2票,子集群2包括两个节点,其节点票数同样为两票,通过本发明提供的仲裁模块402根据分裂后子集群内节点上的资源票数和节点票数确定合法子集群,子集群1和子集群2的节点票数相同,通过节点票数比较不能确定出合法子集群,通过比较子集群1(资源票数为6票)和子集群2(资源票数为2票)的资源票数,可知子集群1的资源票数大于子集群2的资源票数,将子集群1确定为合法子集群,由确定出的合法子集群1接管子集群2。
本发明的实施方式中,所述用于集群计算机系统的投票仲裁装置不仅包括图4所示的模块,还可以包括资源票数设置模块。参见图5,图示了根据本发明实施方式的资源票数设置模块的结构示意图,所述资源票数设置模块500具体可以包括:
资源启动单元502,用于启动所述节点上的应用资源;
监测单元504,用于通过监测脚本监测所述应用资源的启动时间;
资源投票分数设置器506,用于根据监测单元监测得到的启动时间设置所述应用资源的资源票数。
需要说明的是,本发明实施方式中的资源启动单元502、监测单元504和资源投票分数设置器506可以部署于用于管理集群计算机系统的设备内。本发明实施方式中,为使节点上运行的应用资源参与投票,其中应用资源包括httpd应用资源、tomcat应用资源等。可以利用资源启动单元502启动节点上的应用资源,监测单元504通过监测脚本监测应用资源的启动时间,然后通过资源投票分数设置器506根据监测单元504监测得到的启动时间为所述应用资源设置资源票数。其中,资源票数设置与监测得到的资源启动时间有关,监测单元504监测得到的启动时间越长,资源投票分数设置器506为所述应用资源设置的资源票数越高。
本发明实施方式中的应用资源还可以包括甲骨文数据库应用资源,即oracle应用资源,对于oracle应用资源,业务量的大小是影响资源启动时间的主要因素,考虑到资源启动后随着业务量的增加资源的启动时间会增加的问题。监测单元504,还用于通过监测脚本获取所述应用资源的业务量,当所述业务量超过预定的阈值时,启动资源投票分数设置器506为所述应用资源重新设置资源票数。具体而言,可以在监测脚本中加入获取业务量的命令来获取应用资源的业务量,当业务量超过预定的阈值时,启动资源投票分数设置器为所述资源重新设置资源票数,其中预定的阈值可以由技术人员根据应用需要进行设置。
本发明实施方式中的集群计算机系统可以包括双节点高可用集群计算机系统,可以是如图3所示的双节点高可用集群计算机系统。对于双节点高可用集群计算机系统,所述仲裁模块402可以用于实现:通过比较所述双节点高可用集群计算机系统内两节点上的资源票数确定出具有最大资源票数的节点,将确定出的具有最大资源票数的节点作为合法子集群以使所述合法子集群继续提供服务。在如图3所示的资源票数设置的双节点集群系统中,在发生故障时,仲裁模块402通过比较节点1和节点2的资源票数确定出节点1为合法节点,由节点1获取磁盘的控制权接管节点2上运行的资源,即在节点1上重新启动资源app2、app3,所需的时间大约为30S。
本发明的集群计算机系统不仅可以包括双节点高可用集群计算机系统,还可以包括含三个以上节点的高可用集群计算机系统。本发明实施方式的仲裁模块可以通过比较分裂后子集群内的节点上的资源票数和节点票数来确定合法集群,例如可以通过比较分裂后子集群内各子集群的节点票数来确定出节点票数占集群的总节点票数三分之二以上的子集群,如果分裂后子集群中包括符合上述节点票数条件的子集群,则将该子集群确定为合法子集群,如果分裂后子集群中不包括符合上述节点票数条件的子集群,则进一步判断分裂后子集群内是否包括集群节点票数占集群的总节点票数三分之一以上且包括最大资源票数节点的子集群,如果分裂后子集群内包括符合上述节点票数条件和资源票数条件的子集群,则将该子集群确定为合法子集群,如果没有包括符合上述节点票数和资源票数条件的子集群,则集群系统宕机,无法继续服务。以五节点集群系统为例,节点1上运行资源app1,节点2上运行资源app2,节点3上运行资源app3,节点4上运行资源app4,节点5上运行资源app5,各节点上运行的资源的启动时间与资源票数对应关系可以如表4所示,节点上存有的资源票数和节点票数信息如表5所示。
本发明的一些实施方式中,发生故障后,分裂为子集群1(包括节点1,节点2,节点3和节点4),子集群2(仅包括节点5),仲裁模块可以通过比较分裂后子集群1和子集群2的节点票数确定出,子集群1的节点票数(4票)大于集群的总节点票数(5票)的三分之二,可以确定子集群1为合法集群。本发明的另外一些实施方式中,分裂为子集群1(包括节点1,节点2和节点3),子集群2(包括节点4和节点5),根据本发明提供的上述仲裁方案,在确定没有节点票数大于集群的总节点票数三分之二的子集群后,进一步判断是否包括节点票数大于集群的总节点票数三分之一且包括最大资源票数的节点的子集群,仲裁模块通过比较节点票数和资源票数,可以确定出子集群2为合法集群,由于该子集群内包括了具有资源票数最大(启动时间最长的资源app5)的节点,其接管的另外的子集群的资源启动时间都比最大资源票数的启动时间短,因而可以在子集群接管过程中缩短资源切换的处理时间,提高集群连续对外服务时间。值得指出的是,本发明实施方式中的节点票数判断除了可以采用提到的三分之二和三分之一之外,还可以采用其他的分数,本领域技术人员可根据应用情况进行相应的设置。
实施本发明的用于集群计算机系统的投票仲裁方法及装置,根据集群内节点上的应用资源的启动时间为节点资源设置资源票数,并将资源票数与节点票数结合为分裂后合法子集群的确定(即子集群的接管)进行仲裁,有效地减少了合法子集群接管过程中资源切换所需要的处理时间,提高了集群系统的连续服务时间。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和变化,这些改进和变化也视为本发明的保护范围。