一种防止DRBD裂脑的处理方法及相关组件转让专利
申请号 : CN202210115475.X
文献号 : CN114138208B
文献日 : 2022-04-29
发明人 : 方浩
申请人 : 苏州浪潮智能科技有限公司
摘要 :
权利要求 :
1.一种防止DRBD裂脑的处理方法,其特征在于,应用于第一节点,包括:在所述第一节点上电后获取开机时间;
从心跳盘中的第一心跳数据区域中获取最新的第一GI值和所述最新的第一GI值的产生时间,所述心跳盘的数据格式包括第一心跳数据区域和第二心跳数据区域,所述第一心跳数据区域中存储有所述第一节点的第一GI值和所述第一GI值的产生时间,所述第二心跳数据区域中存储有第二节点的第二GI值和所述第二GI值的产生时间;
在判定所述开机时间与所述最新的第一GI值的产生时间的时间差大于预设时间时,判断所述第二心跳数据区域中是否包含所述最新的第一GI值和基于所述最新的第一GI值产生的GI值;
若是,则不开启DRBD服务;
从心跳盘中的第一心跳数据区域中获取最新的第一GI值和所述最新的第一GI值的产生时间之后,还包括:
在判定所述开机时间与所述最新的第一GI值的产生时间的时间差小于预设时间时,判断所述第二心跳数据区域中是否包含所述最新的第一GI值和基于所述最新的第一GI值产生的GI值;
若是,则开启DRBD服务;
若否,则从所述第二心跳数据区域中获取最新的第二GI值并在判定所述第一心跳数据区域中包含所述最新的第二GI值和基于所述最新的第二GI值产生的GI值时,开启DRBD服务。
2.如权利要求1所述的防止DRBD裂脑的处理方法,其特征在于,所述第一心跳数据区域包括第一头部区域和N个第一数据区域,N为正整数,所述第一数据区域用于存储所述第一数据区域的编号、一个所述第一节点的第一GI值和所述第一GI值的产生时间,所述第一数据区域与所述编号一一对应;所述第一头部区域用于存储最新的所述编号;
从心跳盘中的第一心跳数据区域中获取最新的第一GI值和所述最新的第一GI值的产生时间,包括:
从心跳盘中的第一心跳数据区域中的第一头部区域中获取最新的所述编号;
获取与最新的所述编号对应的第一数据区域中的第一GI值和所述第一GI值的产生时间。
3.如权利要求2所述的防止DRBD裂脑的处理方法,其特征在于,所述第一头部区域还用于存储所述第一节点的标识,从心跳盘中的第一心跳数据区域中获取最新的第一GI值和所述最新的第一GI值的产生时间,包括:根据所述第一节点的标识确定从心跳盘中的第一心跳数据区域中获取最新的第一GI值和所述最新的第一GI值的产生时间。
4.如权利要求1所述的防止DRBD裂脑的处理方法,其特征在于,所述心跳盘的数据格式还包括元数据区域,用于存储所述心跳盘的magic、version和label。
5.如权利要求1所述的防止DRBD裂脑的处理方法,其特征在于,判断所述第二心跳数据区域中是否包含所述最新的第一GI值和基于所述最新的第一GI值产生的GI值之后,还包括:
若否,则从所述第二心跳数据区域中获取最新的第二GI值并在判定所述第一心跳数据区域中包含所述最新的第二GI值和基于所述最新的第二GI值产生的GI值时,开启DRBD服务。
6.如权利要求1至5任一项所述的防止DRBD裂脑的处理方法,其特征在于,所述第一心跳数据区域包括第一头部区域和N个第一数据区域,N为正整数,所述第一数据区域用于存储所述第一数据区域的编号、一个所述第一节点的第一GI值和所述第一GI值的产生时间,所述第一数据区域与所述编号一一对应;所述第一头部区域用于存储最新的所述编号,还包括:
从存储区域中获取所述第一节点的实时的第一GI值和所述实时的第一GI值的产生时间;
获取所述心跳盘中的第一头部区域中最新的所述编号;
获取与最新的所述编号对应的第一数据区域中的已有的第一GI值和所述已有的第一GI值的产生时间;
若所述实时的第一GI值与所述已有的第一GI值相同,则将所述已有的第一GI值的产生时间更新为所述实时的第一GI值的产生时间;
若所述实时的第一GI值与所述已有的第一GI值不同,则将所述心跳盘中的第一头部区域中存储的最新的所述编号进行加一得到更新后的编号;
将所述更新后的编号、所述实时的第一GI值和所述实时的第一GI值的产生时间存储至一个空白的第一数据区域中。
7.如权利要求6所述的防止DRBD裂脑的处理方法,其特征在于,从存储区域中获取所述第一节点的实时的第一GI值和所述实时的第一GI值的产生时间,包括:每隔预设周期从存储区域中获取所述第一节点的实时的第一GI值和所述实时的第一GI值的产生时间。
8.一种服务器,其特征在于,包括:存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序以实现如权利要求1至7任一项所述防止DRBD裂脑的处理方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述防止DRBD裂脑的处理方法的步骤。
说明书 :
一种防止DRBD裂脑的处理方法及相关组件
技术领域
背景技术
区,逻辑卷等)进行镜像。当某一个应用程序完成写操作后,DRBD不仅会将写入的数据保存
在一个节点(例如本地服务器)的块设备上,也会将该数据进行复制并通过网络传输到另一
个节点(例如远端服务器)的块设备上,因此两个节点的块设备上的数据将会保存一致,也
就是镜像功能。
另一个节点也掉电,如果重启先掉电的节点,其GI值相较于后掉电的节点的GI值可能为旧
数据,则此时开启DRBD服务就可能导致DRBD裂脑,使数据损坏。
发明内容
GI值和基于最新的第一GI值产生的GI值来判定心跳盘中存储的第一节点的第一GI值为旧
数据,此时停止开启DRBD服务,防止旧数据导致的DRBD裂脑。
一心跳数据区域中存储有所述第一节点的第一GI值和所述第一GI值的产生时间,所述第二
心跳数据区域中存储有第二节点的第二GI值和所述第二GI值的产生时间;
值产生的GI值;
和所述第一GI值的产生时间,所述第一数据区域与所述编号一一对应;所述第一头部区域
用于存储最新的所述编号;
值产生的GI值;
服务。
服务。
和所述第一GI值的产生时间,所述第一数据区域与所述编号一一对应;所述第一头部区域
用于存储最新的所述编号,还包括:
的处理方法的步骤。
一GI值的产生时间;在判定开机时间与最新的第一GI值的产生时间的时间差大于预设时间
时,判断第二心跳数据区域中是否包含最新的第一GI值和基于最新的第一GI值产生的GI
值;若是,则不开启DRBD服务。本方案在第一节点开启DRBD服务前,首先通过时间差大于预
设时间且第二心跳数据区域中包含最新的第一GI值和基于最新的第一GI值产生的GI值来
判定心跳盘中存储的第一节点的第一GI值为旧数据,此时停止开启DRBD服务,防止旧数据
导致的DRBD裂脑。
附图说明
例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获
得其他的附图。
具体实施方式
GI值和基于最新的第一GI值产生的GI值来判定心跳盘中存储的第一节点的第一GI值为旧
数据,此时停止开启DRBD服务,防止旧数据导致的DRBD裂脑。
本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员
在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
据区域中存储有第一节点的第一GI值和第一GI值的产生时间,第二心跳数据区域中存储有
第二节点的第二GI值和第二GI值的产生时间;
是,则进入S14;
的数据实时传送到另一个节点保证数据的一致性,类似RAID 1(Redundant Array of
Inexpensive Disks,独立冗余磁盘阵列);DRBD一般采用强一致性的协议保证数据一致,即
两个节点的数据写入完成才确定一个写操作完成。
步数据。GI值是由4个UUID(Universally Unique Identifier,通用唯一识别码)值组成,分
别是Current UUID,Bitmap UUID,History(1)和History(2)组成。当数据达到同步状态会
更新Current UUID ,或者有节点断开或连接时生成新的Current UUID,同时将上一次的
Current UUID写到History(1),将History(1)写到History(2)。因此,两个节点反复的连接
和断开会导致GI值仅保留最近的3次变化信息。
则此时开启DRBD服务就可能导致DRBD裂脑,使数据损坏。
启DRBD服务,防止DRBD裂脑。
务。其中,第一节点掉电前最后产生的第一GI值,即第一节点的最新的第一GI值,其产生时
间即为第一节点的掉电时间,第一节点上电后的开机时间即为当前时间,掉电时间与当前
时间的时间差即为第一节点到当前为止的掉电时长;在两个节点未掉电时,第一GI值与第
二GI值是相同的(例如第一GI值和第二GI值均为a、b和c),当第一节点先掉电后,第二节点
会生成一个新的第二GI值(例如d),新的第二GI值是基于第二节点中与第一GI值相同的最
后一个第二GI值生成的(例如d是基于c生成的,此时第一GI值为a、b和c,第二GI值为a、b、c
和d),新的第二GI值可以是与第一GI值相同的最后一个第二GI值中Current UUID进行更新
后得到的,之后第二节点在掉电前,其可能还会接收大量的数据,在新的第二GI值后继续生
成新的第二GI值(例如此时第一GI值为a、b和c,第二GI值为a、b、c、d、e、f和g)。因此当第二
心跳数据区域中存储的第二GI值中包含最新的第一GI值和基于最新的第一GI值产生的GI
值(例如第二GI值a、b、c、d、e、f和g中包含第一GI值a、b和c中最新的第一GI值c和基于c产生
的d)时,第一节点为先掉电的节点。此外,可以将第二心跳数据区域中存储的第二GI值按照
产生时间从新到旧依次与最新的第一GI值相比较,便于确定第二心跳数据区域中存储的第
二GI值中是否包含最新的第一GI值和基于最新的第一GI值产生的GI值。
GI值的产生时间,本申请需要从心跳盘中调取存储信息进行判断。以图2为例,心跳盘也就
是图2中上面的Drbd(Sentinel disk),其数据格式可以分为3个区域分别为元数据区域,第
一节点的第一心跳数据区域和第二节点的第二心跳数据区域。元数据区域在心跳盘的前
4K,包括magic,version和label,用以记录心跳盘的基础数据,校验版本信息;第一心跳数
据区域和第二心跳数据区域都是由一个header区域和32个data区域组成,每个区域都默认
占用4K的大小;header区域用于记录节点的唯一标识HOST_UUID,支持最大的data的个数
Total_num(默认最大32个),及当前已经记录的data的个数Current_num。data区域主要用
于记录其编号Num,当前的GI值数据A _GI,及当前GI值的产生时间Time。
和第二心跳数据区域中的数据清零,避免心跳盘重复使用时的数据残留。
生时间;在判定开机时间与最新的第一GI值的产生时间的时间差大于预设时间时,判断第
二心跳数据区域中是否包含最新的第一GI值和基于最新的第一GI值产生的GI值;若是,则
不开启DRBD服务。本方案在第一节点开启DRBD服务前,首先通过时间差大于预设时间且第
二心跳数据区域中包含最新的第一GI值和基于最新的第一GI值产生的GI值来判定心跳盘
中存储的第一节点的第一GI值为旧数据,此时停止开启DRBD服务,防止旧数据导致的DRBD
裂脑。
第一GI值的产生时间,第一数据区域与编号一一对应;第一头部区域用于存储最新的编号;
为32,每个区域可以默认占用4K的大小。同时第二心跳数据区域也可以包含第二头部区域
Header和N个第二数据区域data,具有与第一心跳数据区域相同的存储设置,来存储关于第
二节点的相应信息。
然,获取最新的第二GI值时也可以采用上述方法。
一心跳数据区域的总体容量。当第一数据区域的编号是从1开始依次排列的,此时第一头部
区域存储的最新的编号也就相当于第一心跳数据区域的已使用容量。
区域中获取相关数据,避免了第一心跳数据区域和第二心跳数据区域的混淆,进而能够保
证获取正确的数据。
label,来校验版本信息。
一节点掉电前最后产生的第一GI值,即第一节点的最新的第一GI值,其产生时间即为第一
节点的掉电时间,第一节点上电后的开机时间即为当前时间,掉电时间与当前时间的时间
差即为第一节点到当前为止的掉电时长。其中,本实施例考虑到掉电时长小于预设时间的
情况,当判定第二心跳数据区域中包含最新的第一GI值和基于最新的第一GI值产生的GI值
时,此时第一节点为先掉电的节点,但由于掉电时长较小,此时可以默认容忍小于预设时间
的数据的丢失,即此时舍弃在第一节点掉电后第二节点获取的新的第二GI值,认为第一节
点的第一GI值为可以容忍的旧数据,允许开启DRBD服务,其中,预设时间可以默认为15分
钟。
第二GI值和基于最新的第二GI值产生的GI值时,第二节点是先掉电的节点,也就是第一节
点为后掉电的节点,此时第一节点的第一GI值为新数据,开启DRBD服务。
判定第一心跳数据区域中包含最新的第二GI值和基于最新的第二GI值产生的GI值时,第二
节点为先掉电的节点,也就是第一节点为后掉电的节点,此时第一节点的第一GI值也就为
新数据,开启DRBD服务。
第一GI值的产生时间,第一数据区域与编号一一对应;第一头部区域用于存储最新的编号,
还包括:
成不开启DRBD服务,实现DRBD服务的高可用。
第一GI值等相关信息,并将其存储至心跳盘中的第一心跳数据区域中,对第一心跳数据区
域中的数据进行定时更新;第二节点也是如此,同时第一节点的DRBD盘通过网络与第二节
点的DRBD盘进行DRBD服务。
一心跳数据区域中的第一头部区域中存储的最新的编号;获取与最新的编号对应的第一数
据区域中的已有的第一GI值和已有的第一GI值的产生时间,可以将已有的第一GI值记录为
sentinel_uuid;可以比较drbd_uuid和sentinel_uuid,若一致,则更新已有的第一GI值的
产生时间;若不一致,则将心跳盘中的第一头部区域中存储的最新的编号进行加一得到更
新后的编号,并将更新后的编号、实时的第一GI值和实时的第一GI值的产生时间存储至一
个空白的第一数据区域中。其中,第二节点也可进行上述操作来更新第二心跳数据区域。
启DRBD服务。
素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备
所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在
包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
一般原理可以在不脱离本申请的精神或范围的情况下,在其他实施例中实现。因此,本申请
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一
致的最宽的范围。