一种解决双机集群脑裂的方法及装置的制造方法

文档序号:9711589阅读:707来源:国知局
一种解决双机集群脑裂的方法及装置的制造方法
【技术领域】
[0001]本发明涉及一种解决双机集群脑裂的方法及装置,特别涉及一种双机集群存储系统使用后端共享存储时防止脑裂的方法及装置,适用于双机集群存储系统,属于海量数据存储技术领域。
【背景技术】
[0002]在现代存储领域,为了提高存储数据的可靠性和改善存储系统的输入、输出性能,人们设计了多种数据存储方案,这些数据存储方案通常是各种类型的独立磁盘冗余阵列(Redundant Arrays of Independent Disks,RAID)。通过使用特定的硬件或软件,RAID把多个物理存储设备如磁盘,联合起来,形成一个统一的逻辑存储设备。基于双机集群的技术大多数用于应用系统,将双机集群技术和应用技术紧密结合,形成应用集群,采用串口或者以太网络在集群之间进行心跳同步传输。如图3所示,传统的双机集群存储通过心跳网络进行心跳传递,在心跳正常的情况下,不同节点对不同的资源进行导出,如节点1导出Diskl-Disk6组成的存储池资源,节点2导出Disk7-Diskl2组成的存储池资源,前端业务10只在需要访问的资源导出的节点上进行,但当心跳网络故障后,双机集群无法感知彼此是否存活,陷入脑裂状态,节点互相认为对方失效且自己活着,双机集群的节点争抢后端相同资源,且两个节点均会接管这些资源,并都对业务主机进行导出,此时业务主机依然在正常进行业务10,节点1和节点2均抢夺了所有相同的后端存储资源,并向前端导出给应用,前端应用可在不同的节点上进行10操作,在未加锁的情况下对后端的共享磁盘上的文件进行写入操作,或者对共享存储的同一个位置进行写入,某节点将另一节点的数据覆盖,从而导致只有某一节点在最后时候写入的数据才是正确的。如A节点在某个时间点之前写入的数据,用户程序认为正确,实际上已经被B节点在时间点后写入的数据覆盖,A节点上的用户程序读取出B节点写入的数据,用于计算,导致结果为错误,造成资源抢夺和数据一致性问题。
[0003]下面对RAID中常用的技术术语进行解释:
[0004]条带:又称为Stripe,是磁盘阵列不同磁盘上的位置相关的分块集合,是组织不同磁盘上条块的单位。
[0005]条带化:又称为Striping,是指把一段连续数据分割成相同大小的数据块,把每段数据分别写入到磁盘阵列的不同磁盘上的方法。
[0006]节点:组成双机集群系统中的一台主机,为本文中提到的一个节点。
[0007]比较常用的RAID 有 1^100、1^101、1^105、1^106、1^1010、1^1050和1^1060等。其中RAID0不具有冗余能力,RAID1只是对磁盘做了镜像。其它五种阵列分别有多个磁盘组成,它们以条带的方式向阵列中的磁盘写数据,奇偶校验数据存放在阵列中的各个磁盘上。脑裂:在集群工作时,当心跳信息无法传递时,每个节点均会认为其他节点无效,自己有效,此时形成脑裂状态。此时节点争夺资源,如果每个节点都争夺到所有的资源,用户程序便可以同时写入数据,从而导致有效数据被覆盖,节点最后写入的数据为有效,此前写入的数据丢失。
[0008]仲裁盘:用于仲裁信息传递的共享磁盘,可以为FC或者iSCSI盘阵映射出来的卷,也可以为SAS JB0D上的硬盘。

【发明内容】

[0009]本发明的目的是为解决因心跳网络失效导致的集群系统脑裂的问题,提出一种解决双机集群脑裂的方法及装置,通过设置仲裁盘并对其写入/读取信息实现信息交换,防止脑裂的发生。
[0010]本发明的思想是通过使用一部分共享池空间来交换资源争夺信息,保证节点不会操纵已经被其它节点抢占的资源,进而避免脑裂的发生。
[0011]本发明的目的是通过以下技术方案实现的:
[0012]—种解决双机集群脑裂的方法,包括以下内容:
[0013]后端共享盘可创建1个或多个存储池,同一个存储池可根据用户选择归属于某节点,在存储池中为各节点创建仲裁盘用于存储交换信息,交换信息中包括用于标识集群及相关信息位置与长度的仲裁超级块,用于标识资源争抢结果的仲裁信息,以及用于标识其它节点放弃对该资源的争抢的响应信息;
[0014]当发生脑裂时,获得资源的节点向仲裁盘写入仲裁信息,表明其已获得该仲裁盘所在节点的资源;
[0015]未获得资源的节点向仲裁盘写入响应信息,表明其已知道该仲裁盘所在节点的资源已被其它节点接管,自己将放弃对该资源的争抢。
[0016]作为优选,所述仲裁超级块包括仲裁区域标记(MIGIC),集群名称,集群UUID,仲裁信息起始位置和长度,响应信息的起始位置和长度;仲裁区域标记用于表示该盘用作仲裁盘,集群名称以及集群UUID用于标识使用此盘的集群,仲裁信息起始位置和长度用于定位和指示仲裁信息的长度,响应信息的起始位置和长度用于定位和指示响应信息的长度。
[0017]作为优选,所述仲裁信息包括当前争夺成功的节点名称、节点UUID和写入信息时的时间戳。
[0018]作为优选,所述响应信息包括放弃对该资源争夺的节点名称、节点UUID和写入信息的时间戳。
[0019]作为优选,所述获得资源按照对本节点所属资源优先抢占的原则获取资源。
[0020]作为优选,为保证脑裂被成功避免以及磁盘10性能,所述获得资源的节点向仲裁盘写入仲裁信息,为间隔一定时间持续写入,直到其轮询到其它节点的响应信息或写入次数高于预设阈值N时停止写入。
[0021]作为优选,所述获得资源的节点向仲裁盘写入仲裁信息以及未获得资源的节点向仲裁盘写入响应信息通过以下过程实现:
[0022]首先,向本节点的仲裁盘持续写入仲裁信息,并从中读取响应信息,当读取到响应信息或写入次数高于预设阈值N时停止写入;
[0023]其次,从其它节点的仲裁盘间隔一定时间N次读入仲裁信息,当仲裁信息不断变化时判断该节点资源已被抢占,向该节点的仲裁盘写入响应信息;
[0024]—种解决双机集群脑裂的装置,如图4所示,基于仲裁盘,包括控制模块,仲裁信息写入模块,仲裁信息读取模块,响应信息写入模块和响应信息读取模块,5个模块均置于所有节点中,控制模块与仲裁信息写入模块,仲裁信息读取模块,响应信息写入模块和响应信息读取模块分别相连;
[0025]控制模块用于在脑裂发生时轮询集群存储池,对每个存储池判别是否属于本节点,如果是,启动仲裁信息写入模块写入仲裁信息,启动响应信息读取模块读取响应信息,当读取到其它节点放弃资源争夺的响应信息或在预设的时间S内没有读到响应信息时确认其已成功抢占该资源;如果否,启动仲裁信息读取模块读取仲裁信息,当读取到其它节点已占有该资源的仲裁信息时,启动响应信息写入模块写入响应信息,否则启动仲裁信息写入模块写入仲裁信息,启动响应信息读取模块读取响应信息,当读取到其它节点放弃资源争夺的响应信息或在预设的时间S内没有读到响应信息时停止仲裁信息写入模块;
[0026]仲裁信息写入模块用于根据控制模块给出的写入命令向对应的仲裁盘中写入本机已抢占该资源的仲裁信息;
[0027]仲裁信息读取模块用于根据控制模块给出的读取命令读取对应的仲裁盘中的有效仲裁ig息;
[0028]响应信息写入模块用于根据控制模块给出的写入命令向对应的仲裁盘中写入
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1