具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明一实施例提供的磁盘阵列的数据读写方法的流程图。如图1所示,本实施例的方法包括:
步骤101、根据读写指令中的地址信息,判断读写指令是否用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作;如果判断结果为是,执行步骤102;如果判断结果为否,执行步骤103。
具体的,用户设备根据实际需求(例如有数据需要存储时)会触发读写磁盘阵列的操作。此时,用户设备会向磁盘阵列发出读写指令。磁盘阵列会接收到读写指令。
在本实施例中,磁盘阵列至少由两个硬盘组构成,每个硬盘组包括一块或多块硬盘。本实施例的磁盘阵列对其硬盘组的存储空间进行了划分,将每个硬盘组的存储空间划分为两个区域,分别为第一区域和第二区域,其中第一区域和第二区域所对应的地址信息不同。第一区域和第二区域又分别包括至少一个预先设定的逻辑存储单元(Logical Unit Number;简称:LUN),具体包括几个LUN可以视实际需求而定。第一区域是指磁盘阵列的两个硬盘组上用于通过预定级别的读写策略对关键数据进行冗余存储的区域,各个第一区域之间存在对应关系,用于实现对关键数据的冗余存储。其中,关键数据主要是指操作系统(OS)或数据库等系统数据,需要采用冗余备份的方式进行存储。例如:可以将关键数据同时存储到采用RAID1技术实现的两个硬盘组上,以实现百分百备份,但并不限于这一种冗余存储方式。第二区域是指磁盘阵列的硬盘组上用于存储非关键数据的区域,非关键数据主要是指业务数据,不需要进行冗余备份,即允许只写入一个硬盘组,而不写入其他硬盘组,即各磁盘组上的第二区域中可以存储不同的业务数据。
其中,每个读写指令都包括一个地址信息,用于标识要读写的空间位置。当磁盘阵列接收到读写指令后,磁盘阵列的数据读写装置(后续简称为数据读写装置)会获取读写指令中的地址信息,并根据读写指令中的地址信息判断该读写指令要对哪个区域进行读写操作,即判断该读写指令是否用于对第一区域进行读操作或写操作。
步骤102、启动预定级别的读写策略对第一区域中的数据进行读操作或写操作。
当数据读写装置判断出该读写指令是用于对第一区域进行读操作或写操作的读写指令时,启动预定级别的读写策略对第一区域中的数据进行读操作或者写操作。其中,预先设定了用于对第一区域中的数据进行读写操作的读写策略,这些读写策略能够实现对第一区域中的关键数据的冗余备份。在本实施例中,预定级别的读写策略可以为实现RAID1(RAID LEVEL 1)、RAID3(RAID LEVEL 3)、RAID5(RAID LEVEL 5)或RAID6(RAID LEVEL 6)等技术的读写方式。
其中,当读写指令是读指令时,直接启动预定级别的读写策略从第一区域中读取相应关键数据。当读写指令是写指令时,直接启动预定级别的读写策略向各硬盘组上第一区域中写入相同的关键数据,以实现对关键数据的冗余备份。
在此说明,如果该读写指令的上一个读写指令也是用于对第一区域进行读写操作的指令,则可以不用切换读写策略,直接继续执行所述预定级别读写策略进行读写操作即可。如果该读写指令的上一个读写指令是对第二区域进行读写操作的指令,则需要从非预定级别的读写策略切换到预定级别的读写策略之后,再进行该次读写操作。
步骤103、启动非预定级别的读写策略对磁盘阵列的硬盘组上第二区域中的数据进行读操作或写操作。
其中,第二区域包含至少一个预先设定用于存储非关键数据的LUN。
当数据读写装置判断出该读写指令是用于对第二区域进行读操作或写操作的指令时,启动非预定级别的读写策略对第二区域进行读操作或写操作。其中,在本实施例中,也预先设定了用于对第二区域进行读写操作的读写策略,主要适应于在不同硬盘组的第二区域中写入不同的业务数据,例如RAID0。本实施例中用于对第二区域进行读写操作的非预定级别的读写策略主要是指除本实施例预定级别的读写策略之外的其他读写磁盘的算法。
其中,当读写指令为读指令时,数据读写装置启动非预定级别的读写策略从第二区域中读取相应非关键数据。当读写指令为写指令时,数据读写装置启动非预定级别的读写策略向指定硬盘组上的第二区域中写入非关键数据。
在此说明,如果该读写指令的上一个读写指令也是用于对第二区域进行读操作或写操作的指令时,则可以不用切换非预定级别的读写策略,继续执行所述非预定级别的读写策略进行该次读写操作即可。如果该读写指令的上一个读写指令是用于对第一区域进行读写操作的指令时,则需要从预定级别的读写策略切换到非预定级别的读写策略,然后再启动非预定级别的读写策略进行该次读写操作。
可选地,在具体实施过程中,上述步骤可以是循环执行的,即在步骤102或步骤103执行结束后,等待接收其他读写指令,返回步骤101。
本发明实施例的磁盘阵列的数据读写方法,通过将硬盘组进行区域划分,第一区域用于通过预定级别的读写策略对关键数据实现冗余存储,第二区域用于通过非预定级别的读写策略来存储非关键数据。当接收到读写指令时,根据读写指令中的地址信息判断要对哪个区域进行读写操作,如果是第一区域,则启动预定级别的读写策略对第一区域进行读写操作;如果是第二区域,则启动非预定级别的读写策略对相应硬盘组的第二区域进行读写操作,实现了在磁盘阵列的剩余空间中写入非关键数据的目的,提高了硬盘空间的利用率,降低了存储成本。
进一步,为了避免数据读写装置在预定级别的读写策略和非预定级别的读写策略之间进行频繁的切换,本实施例提供一种步骤101的实施方式,具体的,数据读写装置接收读写指令,将接收到的读写指令存入预先设定的队列中,然后,根据读写指令中的地址信息判断读写指令是否用于对第一区域进行读写操作。进而,数据读写装置通过设定只有在队列中某一类读写指令满足预设条件时,才能根据该类读写指令进行读操作或写操作,以避免由于频繁切换读写策略导致出现系统开销过大的问题。
基于上述步骤101的实施方式,本发明一实施例提供一种步骤102的实施方式,如图2a所示,本实施例的实施方式包括以下步骤:
步骤1021、判断读写指令是否为读指令;如果判断结果为是,执行步骤1022;如果判断结果为否(即为写指令),执行步骤1024。
步骤1022、判断队列中对第一区域中的数据进行读操作的所有读指令对应的硬盘空间总和是否达到预设第一空间阈值;如果判断结果为是,即达到第一空间阈值,执行步骤1023;如果判断结果为否,即未达到第一空间阈值,则结束本次操作,执行步骤1026。
例如:假设此时队列中共有20个读写指令,其中5个读写指令是用于对第一区域进行读操作的读指令,将这5个读指令所要读取的磁盘空间的大小进行相加,相加的结果即为所有读指令对应的硬盘空间总和。
步骤1023、启动预定级别的读写策略,依次根据队列中对第一区域中的数据进行读操作的各读指令,分别对第一区域中的数据进行读操作,并在此次读写操作结束后,执行步骤1026。
当预定级别的读写策略为实现RAID1的读写方法时,步骤1023的具体实施方式包括:对第一区域中的数据进行读操作,并判断另一个硬盘组上第一区域中的数据是否正被另一写操作所修改;若另一个硬盘组上第一区域中的数据正被另一写操作所修改,则在该读操作和另一写操作结束后,根据所述对应关系对两个硬盘组上第一区域中的数据进行同步;若另一个硬盘组上第一区域中的数据未被另一写操作所修改,则在该读操作结束后结束此次操作。
对于预定级别的读写策略为非RAID1,例如RAID3、RAID5等时,步骤1023的实施方式将与RAID3、RAID5等相适应,由于RAID3、RAID5等均属于现有技术,故在此不再详细描述。
步骤1024、判断队列中对第一区域中的数据进行写操作的所有写指令对应的硬盘空间总和是否达到预设第二空间阈值;如果判断结果为是,即达到第二空间阈值,执行步骤1025;如果判断结果为否,即未达到第二空间阈值,则结束本次操作,执行步骤1026。
例如:假设此时队列中共有20个读写指令,其中5个读写指令是用于对第一区域进行写操作的写指令,将这5个写指令所要写入的磁盘空间的大小进行相加,相加的结果即为所有写指令对应的硬盘空间总和。
步骤1025、启动预定级别的读写策略,依次根据队列中对第一区域中的数据进行写操作的写指令,分别对第一区域中的数据进行写操作,并在此次读写操作结束后,执行步骤1026。
当预定级别的读写策略为RAID1时,步骤1025的具体实施方式包括:判断另一个硬盘组上第一区域中的数据是否正被另一写操作所修改;若另一个硬盘组上第一区域中的数据正被另一写操作所修改,则等待另一写操作结束后,根据所述对应关系对两个硬盘组上第一区域中的数据进行同步,并在同步后对第一区域中的数据进行写操作;若另一个硬盘组上第一区域中的数据未被另一写操作所修改,则对第一区域中的数据进行写操作。其中,在对第一区域中的数据进行写操作结束之后,还可以对两个第一区域中的数据进行同步操作,即实现对关键数据的冗余存储。
对于预定级别的读写策略为非RAID1,例如RAID3、RAID5等时,步骤1025的实施方式将与RAID3、RAID5等相适应,由于RAID3、RAID5等均属于现有技术,故在此不再详细描述。
步骤1026、等待接收其他读写指令,返回执行步骤101。
其中,本实施例的步骤101是指数据读写装置将接收到的读写指令存入队列中,然后判断读写指令是否用于对第一区域进行读操作或写操作的步骤101,之后继续执行后续步骤。
本实施例的磁盘阵列的数据读写方法,将接收到的读写指令存入设定队列,然后判断读写指令是否用于对第一区域进行读操作或写操作,并具体判断是读指令还是写指令,以确定接收到的读写指令的类别(包括对第一区域进行读操作的读指令、对第一区域进行写操作的写指令、对第二区域进行读操作的读指令、对第二区域进行写操作的写指令),当队列中同一类别的读写指令所对应硬盘空间的总和达到预设空间阈值时,再根据队列中的读写指令执行相应的读写操作,减少了在预定级别的读写策略和非预定级别的读写策略之间切换操作的次数,提高了读写效率。
基于上述步骤101的实施方式,本发明一实施例提供一种步骤103的实施方式,如图2b所示,本实施例的实施方式包括以下步骤:
步骤1031、判断读写指令是否为读指令;如果判断结果为是,执行步骤1032;如果判断结果为否,执行步骤1034。
步骤1032、判断队列中对第二区域中的数据进行读操作的所有读指令对应的硬盘空间总和是否达到预设第三空间阈值;如果判断结果为是,即达到第三空间阈值,执行步骤1033;如果判断结果为否,即未达到第三空间阈值,则结束本次操作,执行步骤1036。
例如:假设此时队列中共有20个读写指令,其中5个读写指令是用于对第二区域进行读操作的读指令,将这5个读指令所要读取的磁盘空间的大小进行相加,相加的结果即为所有读指令对应的硬盘空间总和。
步骤1033、启动非预定级别的读写策略,依次根据队列中对第二区域中的数据进行读操作的各读指令,分别对第二区域中的数据进行读操作,并在此次读写操作结束后,执行1036。
步骤1034、判断队列中对第二区域中的数据进行写操作的所有写指令对应的硬盘空间总和是否达到预设第四空间阈值;如果判断结果为是,即达到第四空间阈值,执行步骤1035;如果判断结果为否,即未达到第四空间阈值,则结束本次操作,执行步骤1036。
例如:假设此时队列中共有20个读写指令,其中5个读写指令是用于对第二区域进行写操作的写指令,将这5个写指令所要写入的磁盘空间的大小进行相加,相加的结果即为所有写指令对应的硬盘空间总和。
步骤1035、启动非预定级别的读写策略,依次根据队列中对第二区域中的数据进行写操作的写指令,分别对第二区域中的数据进行写操作,并在此次读写操作结束后,执行步骤1036。
步骤1036、等待接收其他读写指令,并返回执行步骤101。
其中,本实施例的步骤101是指数据读写装置将接收到的读写指令存入队列中,然后判断读写指令是否用于对第一区域进行读操作或写操作的步骤101,之后继续执行后续步骤。
本实施例的磁盘阵列的数据读写方法,将接收到的读写指令存入设定队列,然后判断读写指令是否用于对第一区域进行读操作或写操作,并具体判断是读指令还是写指令,以确定接收到的读写指令的类别(包括对第一区域进行读操作的读指令、对第一区域进行写操作的写指令、对第二区域进行读操作的读指令、对第二区域进行写操作的写指令),当队列中同一类别的读写指令所对应硬盘空间的总和达到预设空间阈值时,再根据队列中的读写指令执行相应的读写操作,减少了在预定级别的读写策略和非预定级别的读写策略之间切换的操作,提高了读写效率。
需要说明的是,附图2a、附图2b所示的实施方式只是附图1所示的磁盘阵列的数据读写方法的一种具体实现方式。该数据读写方法还可以采用如附图3所示实现方式:
在步骤301中,数据读写装置接收读写指令后,无需存入队列中,而是直接判断该读写指令是否用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作,如果判断结果为是用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作,则执行步骤302a,否则,执行303a;
步骤302a,判断等待队列中是否存在未处理的用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作的读写指令,若判断结果为存在未处理的用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作的读写指令,则执行步骤302b,否则执行步骤302c;
步骤302b,将步骤301中接收到的读写指令存储到等待队列中,进入步骤304;
步骤302c,直接响应步骤301中接收到的读写指令,即启动预定级别的读写策略对第一区域中的数据进行读操作或者写操作,在结束本次操作后进入步骤304;
步骤303a,判断等待队列中是否存在未处理的用于对磁盘阵列的硬盘组上第一区域或第二区域中的数据进行读操作或写操作的读写指令,若判断结果为存在未处理的用于对磁盘阵列的硬盘组上第一区域或第二区域中的数据进行读操作或写操作的读写指令,则执行步骤303b,否则,若等待队列中不存在读写指令,执行步骤303c;
步骤303b,将步骤301中接收到的读写指令存储到等待队列中,进入步骤304;
步骤303c,直接响应步骤301中接收到的读写指令,即启动非预定级别的读写策略对第二区域中的数据进行读操作或者写操作,在结束本次操作后进入步骤304。
步骤304,返回步骤301,并利用空闲时间,来处理等待队列中的读写指令,在利用空闲时间处理等待队列中的读写指令时,优先处理其中用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作的读写指令。
采用如附图3所示的处理方案,能够优先处理用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作的读写指令,从而保证操作系统或数据库的响应速度。
图4为本发明一实施例提供的磁盘阵列的数据读写装置的结构示意图。如图4所示,本实施例的装置包括:判断模块41、第一启动模块42和第二启动模块43。
其中,判断模块41,用于根据读写指令中的地址信息,判断读写指令是否用于对硬盘组上第一区域中的数据进行读操作或写操作。其中,磁盘阵列的每个硬盘组的存储空间预先被划分为第一区域和第二区域,第一区域用于为关键数据提供预定级别的冗余存储,第二区域用于存储非关键数据。其中,第一区域和第二区域分别包含至少一个预先设定的LUN。当磁盘阵列包含至少两个硬盘组时,至少两个硬盘组上的第一区域之间存在对应关系。第一启动模块42,与判断模块41连接,用于在判断模块41的判断结果为是时,启动预定级别的读写策略对第一区域中的数据进行读操作或写操作。第二启动模块43,与判断模块41连接,用于在判断模块41的判断结果为否时,启动非预定级别的读写策略对硬盘组上第二区域中的数据进行读操作或写操作。
本实施例的磁盘阵列的数据读写装置中各个模块可用于执行图1所示实施例的流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的磁盘阵列的数据读写装置,通过将硬盘组进行区域划分,第一区域用于通过预定级别的读写策略对关键数据实现冗余存储,第二区域用于通过非预定级别的读写策略来存储非关键数据,在接收到读写指令时,根据读写指令中的地址信息判断要对哪个区域进行读写操作,如果是第一区域,则启动预定级别的读写策略对第一区域进行读写操作;如果是第二区域,则启动非预定级别的读写策略对相应硬盘组的第二区域进行读写操作,实现了在磁盘阵列的剩余空间中写入非关键数据的目的,提高了硬盘空间的利用率,降低了存储成本。
图5为本发明另一实施例提供的磁盘阵列的数据读写装置的结构示意图。本实施例基于图4所示实施例实现,如图5所示,本实施例的判断模块41包括:接收单元411和判断单元412。
具体的,接收单元411,用于接收读写指令,将接收到的读写指令存入队列中。判断单元412,与接收单元411连接,用于根据接收单元411接收到的读写指令中的地址信息,判断读写指令是否用于对磁盘阵列的硬盘组上第一区域中的数据进行读操作或写操作,并将判断结果分别提供给第一启动模块42和第二启动模块43。
进一步,第一启动模块42包括:第一判断启动单元421和第二判断启动单元422。
具体的,第一判断启动单元421,用于在读写指令为读指令时,判断队列中对第一区域中的数据进行读操作的所有读指令对应的硬盘空间总和是否达到预设第一空间阈值;如果判断结果为达到第一空间阈值,启动预定级别的读写策略,依次根据队列中对第一区域中的数据进行读操作的各读指令,分别对第一区域中的数据进行读操作。另外,如果判断结果为未达到第一空间阈值,第一判断启动单元421还可以触发接收单元411等待接收其他读写指令,但接收单元411等待接收其他读写指令的操作并不仅限于第一判断启动单元421的触发。
第二判断启动单元422,用于在读写指令为写指令时,判断队列中对第一区域中的数据进行写操作的所有写指令对应的硬盘空间总和是否达到预设第二空间阈值;如果判断结果为达到第二空间阈值,启动预定级别的读写策略,依次根据队列中对第一区域中的数据进行写操作的各写指令,分别对第一区域中的数据进行写操作。另外,如果判断结果为未达到第二空间阈值,第二判断启动单元422还可以触发接收单元411等待接收其他读写指令,但接收单元411等待接收其他读写指令的操作并不仅限于第二判断启动单元422的触发。
其中,当预定级别的读写策略为实现RAID1的读写方法时,第一判断启动单元421具体用于在读写指令为读指令时,对第一区域中的数据进行读操作,并判断另一个硬盘组上第一区域中的数据是否正被另一写操作所修改;若另一个硬盘组上第一区域中的数据正被另一写操作所修改,则在该读操作和另一写操作结束后,根据对应关系对两个硬盘组上第一区域中的数据进行同步;若另一个硬盘组上第一区域中的数据未被另一写操作所修改,则在该读操作结束后结束此次操作。第二判断启动单元422具体用于在读写指令为写指令时,判断另一个硬盘组上第一区域中的数据是否正被另一写操作所修改;若另一个硬盘组上第一区域中的数据正被另一写操作所修改,则等待另一写操作结束后对两个硬盘组上第一区域中的数据进行同步,并在同步后对第一区域中的数据进行写操作;若另一个硬盘组上第一区域中的数据未被另一写操作所修改,则对第一区域中的数据进行写操作。另外,在对第一区域中的数据进行写操作结束之后,还可以对两个第一区域中的数据进行同步的操作,即实现对关键数据的冗余存储。
更进一步,第二启动模块43包括:第三判断启动单元431和第四判断启动单元432。
具体的,第三判断启动单元431,用于在读写指令为读指令时,判断队列中对第二区域中的数据进行读操作的所有读指令对应的硬盘空间总和是否达到预设第三空间阈值;如果判断结果为达到第三空间阈值,启动非预定级别的读写策略,依次根据队列中对第二区域中的数据进行读操作的各读指令,分别对第二区域中的数据进行读操作。另外,如果判断结果为未达到第三空间阈值,第三判断启动单元431还可以触发接收单元411等待接收其他读写指令,但接收单元411等待接收其他读写指令的操作并不仅限于第三判断启动单元431的触发。
第四判断启动单元432,用于在读写指令为写指令时,判断队列中对第二区域中的数据进行写操作的所有写指令对应的硬盘空间总和是否达到预设第四空间阈值;如果判断结果为达到第四空间阈值,启动非预定级别的读写策略,依次根据队列中对第二区域中的数据进行写操作的各写指令,分别对第二区域中的数据进行写操作。另外,如果判断结果为未达到第四空间阈值,第四判断启动单元432还可以触发接收单元411等待接收其他读写指令,但接收单元411等待接收其他读写指令的操作并不仅限于第四判断启动单元432的触发。
本实施例的磁盘阵列的数据读写装置的各功能单元可用于执行上述图2a、图2b和图3所示方式实施例中的相应流程,其具体工作原理不再赘述,详见方法实施例的描述。
本实施例的磁盘阵列的数据读写装置,通过设置用于存储读写指令的队列,并设定相应的空间阈值,在接收到读写指令时通过对读写指令进行类别划分,并判断同一类别的读写指令对应的硬盘空间总和是否达到指定空间阈值,只有达到指定空间阈值之后,才启动相应读写策略进行读写操作,避免了在预设级别的读写策略和非预设级别的读写策略之间进行频繁切换,避免了由于频繁切换读写策略导致出现系统开销过大的问题,提高了读写操作的效率。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。