具体实施方式
下面通过附图和实施例,对本申请的技术方案做进一步的详细描述。
本申请利用分布式文件系统(DFS)作为数据中心,分布式文件系统由多个存储数据节点(DataServer)和一个主控节点(NameServer)构成,分布式镜像系统由至少两个分布式文件系统构成,因此,一个数据中心DFS系统中的任意存储数据节点都可以作为镜像系统中的数据主服务器,向作为备份的多个数据中心DFS系统的任意存储数据节点进行镜像。
如图1所示,其为本申请分布式数据镜像方法所应用的分布式镜像系统的架构图。图中显示了该分布式镜像系统由两个数据中心DFS系统构成,数据中心A集群与另一个数据中心B集群之间进行客户端用户请求操作的数据镜像。每个DFS系统是由一个主控节点和N个存储数据节点组成,主控节点负责管理集群内的存储数据节点、数据、数据分布以及数据定位等。存储数据节点负责进行数据文件管理和数据镜像。存储数据节点时刻地监控它所在的存储数据节点的数据变化情况,一旦有变化就会发起相应的镜像操作。
存储数据节点既可以接收到来自异地DFS的镜像数据,也可向异地DFS镜像数据。在DFS系统中存储数据节点可以随时加入退出,存储数据节点的加入退出不会影响到数据可用性,因为在单个DFS系统内某个数据文件在被存储于一个存储数据节点时,会向该DFS系统内其他存储数据节点进行多个备份,存放在不同的数据存储节点上,且在不同的机架上,因此单个存储数据节点失效时不会影响镜像系统。数据存储数据节点加入退出时,主控节点会对其上的数据进行迁移,由主控节点r根据数据存储节点的容量,以及负载,将数据挪到负载比较低的存储数据节点上。这可以采用在同一DFS集群中复制多份数据或者单份数据,如果是多份数据,数据的备份是分布在不同的机架之上。在单个DFS系统,上面描述的数据的存储和备份是现有技术,因此不再赘述。
该分布式数据镜像系统需要至少两个数据中心才能实现,如图1中示出了2个数据中心。每个数据中心都拥有一套分布式文件系统集群(A集群和B集群)。DFS系统A集群和DFS系统B集群是对等的,没有主辅关系。单个DFS系统的存储数据节点、数据分布和数据是由当前集群系统内的主控节点管理。DFS系统之间的主控节点是没有任何信息交互,每个DFS系统中任意存储数据节点可以相互进行交互通信和数据传输。
如图2所示,其为本申请分布式数据镜像方法的流程图。在本实施例中,以一个数据中心DFS系统(集群A)中的某个存储数据节点为主体而言,描述该存储数据节点作为数据主服务器,接收到数据的操作请求后如何向其他数据中心DFS系统集群B中的存储数据节点进行数据镜像。在该例中,数据操作请求为写入某个数据,同样适用于更新数据请求。
结合图1和图2所示,本申请应用于由至少两个包括多个存储数据节点和一个主控节点的分布式文件系统构成的分布式数据镜像系统中,集群A该存储数据节点执行以下步骤,包括:
步骤11,接收数据操作请求,对数据进行所述数据操作请求所对应的操作,且对所述数据进行所述数据操作请求相应的备份操作,并对该数据生成逻辑文件名;
例如,数据操作请求为写入数据操作请求,存储数据节点接收该请求后,对数据进行存储操作,且将数据转发给集群A中其他存储数据节点进行存储备份,等存储备份成功后,生成逻辑文件名。
在此,应当理解的是存储数据节点接收到的数据操作请求是:用户通过客户端向一个DFS系统中的主控节点发起要求写入数据的操作请求,主控节点分配一个可写的存储数据节点的列表给客户端;用户选择列表中的一个存储数据节点要求写入数据,发起该数据操作请求;其中应当注意的是数据写入请求和数据更新请求在本申请中是两个基本相同的例子,因此在描述本例时,简单地对数据更新请求附带说明。
即在步骤11之前还包括以下步骤(图中未示出):
步骤10,分布式文件系统中的主控节点接收用户通过客户端输入的要求写入数据的信息;
或者也可以输入更新数据的请求信息,在该更新数据的请求信息中携带有写入数据时生成的逻辑文件名;
步骤20,主控节点根据该要求写入数据的信息向所述客户端返回存储数据节点的地址列表;
或者,也可以根据该逻辑文件名返回的写入操作时分配的用于写入数据的数据块号的存储数据节点列表;
步骤30,用户通过所述客户端从存储数据节点的地址列表中选择一个存储数据节点,从而向该存储数据节点发起数据操作请求。
由于单个DFS系统中对数据存储会同时进行备份,即该存储数据节点向列表中其他的存储数据节点转发该数据进行存储,以便在这个DFS系统上做该数据的多个备份;因此,利用DFS系统这个特性,本申请可以实现用于存储数据的存储数据节点中即使有一个存储数据节点宕机,也不会影响数据的安全性。
应当理解的是,该数据是用户在客户端已经做好切分的数据,例如,用户要存储的数据大小是10M,但是系统配置了2M数据适于存储,因此用户在客户端时就将数据进行了切分,当然该数据也可以是本身适于存储的数据例如小于2M的数据;主控节点向客户端分配存储数据节点的列表时,已经分配好数据将写入存储数据节点(存储数据节点划分为有多个用于存储数据的数据块)的哪块数据块,即已经分配好存储该数据块的块号。在此,用户发起的数据操作请求可以是更新数据操作,更新数据操作和新增写入数据实质上是一样的,都是写入数据。只不过数据块号是原来在写入时已经分配好的,因此,主控节点给客户端分配存储数据节点的列表,是根据用户发起的更新数据请求中携带的逻辑文件名确定了原始分配好的数据块号的存储数据节点。
在存储数据节点接收该数据存储请求,将数据写入时,存储数据节点会给每个数据分配一个系统内部的逻辑文件名(LogicName)。当数据成功写入和备份后,存储数据节点会向客户端返回该逻辑文件名,客户端将相应记录数据存储的DFS系统的主控节点与逻辑文件名的对应关系。因此,当客户端访问该数据文件时,主控节点会根据此逻辑文件名来定位到该数据文件存放在哪台存储数据节点上。该逻辑文件名是根据数据块号、文件ID和其他信息生成的一串字符串,因此,在该逻辑文件名中存在字节表示该数据所在区域的信息,称之为文件区域信息,根据该文件区域信息可以解析出该数据存放的存储数据节点上的数据块号。
另外,客户发送的数据写入请求中除了请求写入数据的信息之外,还隐含了对该数据进行什么样的镜像操作类型,例如,在本文中是新增写入。
步骤12,存储数据节点生成镜像记录,所述镜像记录包括所述数据的逻辑文件名、镜像策略和操作类型;其中,所述逻辑文件名包括文件区域信息;
当存储数据节点监控到有数据变化,即写入新的数据以及数据备份完成后,立即生成一个镜像记录。即本申请还包括在步骤11之后;在步骤12之前,还包括:存储数据节点监控是否有数据写入。
镜像记录中的对数据的操作类型(OperType)是根据用户发起的数据操作请求类型决定的。对某一个数据文件的操作类型有三种:新增写入、更新、删除。在本例中,操作类型是与用户发起的数据存储请求相适应的进行新增写入操作类型。
DFS系统预先定义对数据的镜像策略(MirrorStrategy),根据对数据的实时性要求,可以分为同步镜像和异步镜像策略,例如,在本例中由于数据的实时性要求很强,镜像策略为同步镜像。
通过上述过程存储数据节点可得到镜像记录O:O={LogicName,OperType,MirrorStrategy}。
步骤13,根据镜像记录中的逻辑文件名的文件区域信息解析出存储该数据的数据块号,通过判断该数据块号是否在镜像数据区域内来确定是否需要向B集群进行数据镜像;
在该A集群中,预先设定了镜像数据区域,例如,向B集群镜像的镜像区域为数据块号0、1、3、5、7、9,在该区域范围内的数据块上的数据文件是需要向其他数据中心B集群进行镜像;以及非镜像数据区域例如非镜像区域为数据块号2、4、6、8、10,在该区域范围内的数据文件是只在本地集群中存在,不需要镜像。
即通过步骤13,可以根据文件区域信息来确定需不需要镜像,以及镜像目的分布式文件系统是哪一个。在此,本申请实现了对镜像记录的过滤和删除,当确定不需要镜像时,可以将镜像记录进行删除。
在本例中,介绍了两个DFS系统来进行镜像,在实际过程中,我们可以选择多个DFS系统来进行镜像。例如,分布式镜像系统包括A、B、C和D四个DFS系统,预先设定了镜像数据区域,例如向B系统镜像的镜像区域为数据块为0-10,向C系统镜像的镜像区域为11-20,D系统镜像的镜像区域为21-30。根据数据块号判断在哪个区域,向哪个DFS系统进行镜像。
在本例中,例如,数据块号为5,则需要向B集群进行数据镜像;
步骤14,当判断镜像策略为同步镜像;
步骤15,向根据所述文件区域信息确定的镜像目的分布式文件系统即B集群的主控节点,获取待镜像的目的存储数据节点地址列表;
存储数据节点通过读取配置文件,知道A集群的镜像集群B的主控节点地址,获取主控节点地址以后,A集群向其镜像集群B的主控节点通过网络发起请求,告诉主控节点需要同步数据,主控节点收到该请求以后,查询当前哪些存储数据节点可以用于写数据,即查询哪些存储数据节点上有数据块号为5,如果无,则创建几个存储数据节点带有数据块5(镜像目的存储数据节点的数据块号和存储数据节点的数据块号可采用现有技术对应设置,在此不再赘述),然后B集群系统的主控节点向该A集群的存储数据节点分配数据可写的目的存储数据节点列表,即返回待镜像的目的存储数据节点地址,在此返回的目的存储数据节点地址为多个,例如2个;
在上述分配可写的存储数据节点时,主控节点是遵守以下原则:根据每一次数据存储请求,主控节点将数据存储均匀分布到不同的数据存储节点,并且主控节点可以根据每个数据存储节点的容量进行数据迁移,从而达到数据存储节点使用容量上的均衡。
步骤16,存储数据节点根据所述逻辑文件名中的文件区域信息获取所述数据;
具体地,存储数据节点根据所述逻辑文件名中的文件区域信息解析出该数据存放的存储数据节点上的数据块号,从该数据块号5的数据块上取出该数据;
步骤17,根据所述镜像记录中的所述操作类型,对所述数据在所述列表中的目的数据存储节点地址所对应的目的数据存储节点上进行存储和备份。
具体为,例如镜像策略是同步镜像,则存储数据节点从返回的目的数据存储地址中选择一个目的数据存储节点,向该数据存储节点写入数据,该目的数据存储节点完成数据写入后,将该数据转发给返回的列表中剩余的其他数据存储节点进行备份,从而完成了该数据在B集群系统中的镜像。
即,当所述镜像策略为同步镜像策略,所述操作类型为写入时,即步骤17可以包括步骤:
步骤171,从所述目的数据存储节点地址列表中选择一个目的数据存储节点地址,将所述数据写入所述选择的目的数据存储节点地址对应的目的数据存储节点;
步骤172,所述选择的所述目的数据存储节点,向所述目的数据存储节点地址列表中、剩余目的数据存储节点地址所对应的目的数据存储节点转发所述数据;
步骤173,所述剩余目的数据存储节点地址所对应的目的数据存储节点存储所述数据。
上述步骤17(步骤171、172和173)也是利用了单个DFS系统对数据存储进行备份的特性,实现了数据在镜像时进行多个备份。因此,当镜像的集群系统中的一个存储数据节点出现宕机时,不会影响镜像的数据的安全性。
因此,本申请利用功能完全一致的两个DFS系统作为镜像系统,可以实现即使有任何一个存储数据节点出现宕机,由于有多个存储数据节点可以保证镜像系统的正常运行,以及由于数据进行了存储备份和镜像备份,可以保证数据的安全性,从而实现了本申请镜像系统的高可靠性。
另外,如图3所示,其为本申请分布式数据镜像方法另一实施例的流程图。在该实施例中当所述镜像策略为异步镜像策略时,即由于数据的实时性要求不高,因此A集群可以将它的镜像策略设定为异步镜像策略,其具体流程与上述实施例不同之处在于,步骤14为判断镜像策略为异步镜像;步骤14和步骤15之间还包括:
步骤31,存储数据节点将所述镜像记录推送进文件队列中;
步骤32,存储数据节点实时地查看文件队列中的镜像记录,当有镜像记录,则从所述文件队列中按顺序取出所述镜像记录。
在镜像策略为异步镜像策略的分布式数据镜像方法实施例中,除了上述步骤不同之外,其他步骤均相同。当镜像策略是异步镜像时,先将镜像记录放入文件队列中,当不需要实时镜像时,可以采用这种方式,存储数据节点实时查看该文件队列单元中是否有镜像记录,当有时,将该镜像记录取出按顺序向其他数据中心的存储数据节点进行镜像。
另外,本申请还可以根据A集群的存储数据节点上存储的数据的安全性,管理人员通过配置文件设定在B集群中的多少个存储数据节点上进行镜像。因此,B集群的主控节点向A集群的存储数据节点直接返回设定好的存储数据节点地址列表,而不会去查询含有相同数据块号的数据存储节点。
本申请采用多个DFS系统来作为镜像系统,由DFS系统中的存储数据节点作为主数据主服务器,向作为备份的多个数据中心DFS系统的任意存储数据节点进行镜像。由于在本申请中,数据在A集群上做了多个备份,以及在目的镜像B集群存储数据节点上进行存储和多个备份,一个存储数据节点宕机或者一个数据块损坏后,不会影响数据。并且采用DFS系统作为镜像系统,一个存储数据节点宕机或者数据块损坏,服务不会停止。当性能出现瓶颈时,可根据性能需求进行扩容,增加机器磁盘(数据存储节点)即可,无需停服务,就能进行在线扩容。
如图4所示,其为本申请分布式数据镜像方法再一实施例的流程图。本申请执行步骤17,存储数据节点在所述按照所述镜像策略,根据所述镜像记录中的所述操作类型,对所述数据在所述目的数据存储节点地址所对应的目的数据存储节点上进行操作同时,还包括:将包括所述数据的摘要的镜像记录发送给选择的一个所述目的数据存储节点地址所对应的目的数据存储节点。因此,除了在上述同步镜像实施例和异步镜像实施例中描述的步骤之外还包括:
被选择的目的数据存储节点执行以下步骤:
步骤22,接收包括所述数据的摘要的镜像记录;
步骤23,目的数据存储节点根据所述数据,计算所述数据的摘要;其中计算摘要采用的算法存储数据节点和镜像的目的存储数据节点已经预先统一配置好;
步骤24,将所述镜像记录中的所述摘要与所述计算得到的摘要相比较;
步骤25,如果一致,则镜像成功。
步骤26,如果不一致,则向存储数据节点返回失败,重新进行数据的镜像。
虽然上述这些步骤的执行主体是目的数据存储节点,但是由于对于分布式镜像系统中DFS的各个存储数据节点都会充当目的存储数据节点,因此是所有存储数据节点都可执行上述步骤。目的数据存储节点执行上述步骤用来保证镜像的数据的一致性。因此,本申请分布式数据镜像方法还实现了快捷高效的数据校验方法。
上面描述的实施例示例了用户通过客户端进行数据写入的镜像方法,除了数据写入之外,还有数据的删除和数据的更新。数据的更新的镜像过程同新增写入完全一样,在此不再赘述。
下面简单的描述数据删除的镜像过程。
如图5所示,其为本申请分布式数据镜像方法的流程图。本例描述用户请求删除某逻辑文件名的数据,该实施例与图1实施例步骤相似,与图1实施例不同之处在于,不执行步骤16。
当删除某逻辑文件名数据时,该方法包括以下步骤:
步骤51,用户通过客户端根据记录的逻辑文件名和主控节点的对应关系,向一个DFS系统的主控节点发送删除某逻辑文件名的数据,例如逻辑文件名为Plabcdhijklmnjkl;
步骤52,主控节点根据该逻辑文件名查询到该数据所在的存储数据节点,向用户通过客户端返回存储数据节点列表;
步骤53,用户选择一个存储数据节点地址,向该地址所对应的存储数据节点发送数据删除请求(即数据操作请求);
步骤54,该存储数据节点接收该数据删除请求,将其上的该数据删除,且向列表中的其他存储数据节点转发数据删除请求,删除其上的该数据;
步骤55,在数据删除成功后,存储数据节点生成镜像记录,所述镜像记录包括所述数据的逻辑文件名、镜像策略和操作类型;其中所述逻辑文件名包括文件区域信息BS;
同上面图1存储数据的实施例相同,删除时,A集群的存储数据节点生成镜像记录;
同样在步骤55后,执行同图1实施例相同的步骤13、14和15,然后执行以下步骤:
步骤56,根据所述镜像记录中的所述操作类型,对所述数据在所述目的数据存储节点地址所对应的目的数据存储节点上进行删除。
假定镜像策略是同步镜像,即存储数据节点在执行完上述步骤后,实时地:
步骤561,A集群的存储数据节点,从所述目的数据存储节点地址列表中选择一个目的数据存储节点地址,所述选择的目的数据存储节点地址对应的目的数据存储节点删除该数据;
步骤562,所述选择的所述目的数据存储节点,向所述目的数据存储节点地址列表中、剩余目的数据存储节点地址所对应的目的数据存储节点转发所述删除数据请求;
步骤563,所述剩余目的数据存储节点地址所对应的目的数据存储节点删除所述数据。
当存储数据节点执行删除镜像时,与图2实施例进行写入操作是一样的,因此,也还可以包括异步镜像下执行的步骤。
本申请还提供了一种存储数据节点,来实施上述分布式数据镜像方法,该存储数据节点包括:
请求处理单元,用于接收数据操作请求,将数据进行所述数据操作请求所对应的操作,并生成所述数据的逻辑文件名;
生成单元,用于生成包括所述数据的逻辑文件名、镜像策略和操作类型的镜像记录,其中所述逻辑文件名包括文件区域信息;
镜像地址获取单元,用于向所述文件区域信息确定的镜像目的分布式文件系统的主控节点,获取待镜像的目的数据存储节点地址的列表;
数据镜像单元,用于按照所述镜像策略,根据所述镜像记录中的所述操作类型,对所述数据在所述列表中的所述目的数据存储节点地址所对应的目的数据存储节点上进行所述数据操作请求相应的操作。
进一步地,本申请存储数据节点还包括:
镜像确定单元,用于根据所述文件区域信息解析出存储所述数据的数据块的数据块号,判断所述数据块号是否属于镜像数据区域内;如属于,则通知镜像地址获取单元。
另外,本申请存储数据节点还可包括:
推送单元,用于将所述镜像记录推送进文件队列中;
文件队列单元,用于保存所述镜像记录;
取出单元,用于从所述文件队列中按顺序取出所述镜像记录。
当镜像策略是异步镜像时,先将镜像记录放入文件队列单元中,当不需要实时镜像时,可以采用这种方式,存储数据节点的数据镜像单元定时查看该文件队列单元中是否有镜像记录,具有时,取出单元按顺序取出镜像记录,数据镜像单元根据该镜像记录进行数据镜像。
优选地,本申请存储数据节点还包括:
镜像记录发送单元,用于将包括所述数据的摘要的镜像记录发送给所述选择的所述目的数据存储节点地址所对应的目的数据存储节点。
本申请村塾数据节点还包括:
接收单元,用于接收包括所述数据的摘要的镜像记录;
计算单元,用于计算所述数据的摘要;
比较单元,用于将所述镜像记录中的所述摘要与所述计算得到的摘要相比较;
镜像成功标记单元,用于如果一致,则标记镜像成功。
由于对于分布式镜像系统中DFS的各个存储数据节点都会充当目的存储数据节点,因此是所有存储数据节点都可包括上述各单元。目的数据存储节点用来保证镜像的数据的一致性。因此,本申请存储数据节点还实现了快捷高效的数据校验方法。
本申请采用多个DFS系统来作为镜像系统,由DFS系统中的存储数据节点作为主数据主服务器,向作为备份的多个数据中心DFS系统的任意存储数据节点进行镜像。由于在本申请中,数据在A集群上做了多个备份,以及在目的镜像B集群存储数据节点上进行存储和多个备份,一个存储数据节点宕机或者一个数据块损坏后,不会影响数据。并且采用DFS系统作为镜像系统,一个存储数据节点宕机或者数据块损坏,服务不会停止。当性能出现瓶颈时,可根据性能需求进行扩容,增加机器磁盘(数据存储节点)即可,无需停服务,就能进行在线扩容。
本领域普通技术人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述的具体实施方式,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请的具体实施方式而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。