一种分布式数据库集群的数据迁移方法和装置技术领域
本发明涉及数据处理技术领域,尤其涉及一种分布式数据库集群的数据迁移方法
和装置。
背景技术
随着互联网技术的飞速发展,用户产生了越来越多的数据。而这些海量数据的可
靠存储及使用则成为了计算机技术的关键所在。技术上既要保证海量数据的存储安全性,
又要保证这些数据的可用性,使得海量数据的用户能够高效的、透明的使用数据。分布式系
统则给出了海量数据的存储和使用解决方案。分布式系统作为海量数据存储,需要解决的
一个重要问题便是决定数据在集群中的分布策略,好的分布策略应该能将数据均衡地分布
到所有节点上,并且还应该能适应集群节点的变化。由此可见,数据迁移在解决分布式存储
系统集群扩容、跨机房数据迁移等数据同步至关重要。
数据迁移是大规模存储系统实现负载平衡的重要手段,可有效提高数据访问的性
能。其应用场景包括跨机房完整数据迁移、集群扩容数据迁移、单节点扩容数据迁移和设备
故障数据迁移等。
目前,比较常用的数据迁移方案包括:一致性哈希方案,如图1所示,为一致性哈希
方案的示意图。一致性哈希方案具有如下特点:
1,一致性哈希将整个哈希值空间组织成一个虚拟的圆环;
2,如图1-1所示,将各个节点使用哈希函数进行一个哈希,具体可以选择服务器的
ip或主机名作为关键字进行哈希,这样每个节点就能确定其在哈希环上的位置。接下来将
数据key使用相同的哈希函数计算出哈希值,根据得出的哈希值确定数据在环上的位置,从
此位置沿环顺时针“行走”,第一台遇到的节点就是其应该定位到的节点。如A,B定位到S2,C
定位到S3,D定位到S1;
3,如图1-2所示,节点S3故障时的数据迁移:可以看到此时A、B、D不会受到影响,只
有C节点被重定位到S1。由此可见,在一致性哈希算法中,如果一个节点不可用,则受影响的
数据是此节点到其环空间中前一节点之间数据,其它不会受到影响
4,如图1-3所示,扩容增加节点S4:原本存储在节点S2的数据A重新定位到节点S4,
需要迁移数据。由此可见,在一致性哈希算法中,如果增加一个节点,将影响新增加节点和
前一节点之间的数据;
5,如图1-4,一致性哈希算法在实现中引入虚拟节点机制,即对每一个服务节点计
算多个哈希,每个计算结果位置都放置一个服务节点,称为虚拟节点。这样避免了数据倾斜
问题。
然而,一致性哈希方案在数据迁移方面具有如下缺点:
1,在集群整体数据量上升需要扩容时,增加一个节点只分担了原节点中一个节点
的数据量,不能对整体进行均衡;这样很会造成数据分布不均衡,给整个系统引入访问瓶
颈,更不能解决整体扩容的问题;倍增所有节点又带来资源的浪费;
2,单个节点进行扩容数据迁移时,需要对原节点上所有的数据进行再哈希,性能
显然较低;
3,不能支持由于机房升级等带来的跨机房完整数据迁移。
发明内容
鉴于上述问题,提出了本发明以便提供一种解决上述问题或者至少部分解决上述
问题的分布式数据库集群的数据迁移方法和装置。
依据本发明的一个方面,提供一种分布式数据库集群的数据迁移方法,所述集群
包括m个数据库节点,所述集群还包括n个分片,每个所述数据库节点负责存储一个或多个
分片的数据,所述n大于m;所述方法包括:
按设定的分配方式,将进入集群的数据分配到相应的分片上;
当集群内需要数据迁移时,确定需要数据迁移的数据库节点;
在确定的数据库节点管理的分片中,选择出需要迁出的分片;
将选择出的分片的数据从原数据库节点迁移到指定的数据库节点。
可选地,所述按设定的分配方式,将进入集群的数据分配到相应的分片上,包括:
将进入集群的数据的键key通过哈希后对n取模,将所述数据分配到分片标识与取模后的值
相同的分片上。
可选地,当集群整体数据量过载,需要集群内数据迁移时,指定的数据库节点为新
增的数据库节点;当集群内单数据库节点数据量过载,需要集群内数据迁移时,指定的数据
库节点为集群内未发生数据量过载的数据库节点中的一个或多个。
可选地,当集群整体数据量过载,需要集群内数据迁移时,所述确定需要数据迁移
的数据库节点,包括:
统计每个分片的数据量,根据每个分片的数据量得到各数据库节点所管理的分片
的数据总量;
求取每个数据库节点所管理的分片的数据总量的平均值,确定出数据总量超出所
述平均值的数据库节点为需要数据迁移的数据库节点。
可选地,本发明所述方法还包括:
当需要集群间数据迁移时,启动新集群内的主节点,并将新集群内的主节点设置
为旧集群相应主节点的从节点;
通过主从同步的方式,将旧集群中主节点的数据同步到所述新集群中的主节点;
在新旧集群的主节点间同步完成后,启动新集群内的从节点,进行新集群内的主
从节点的数据同步,并将旧集群的读写流量切换到新集群。
可选地,所述新、旧集群内均划分有多个数据库节点组,每个数据库节点组内均设
有主节点和从节点,且每个数据库节点组内的主节点负责本组内的数据同步。
依据本发明的另一个方面,提供一种分布式数据库集群的数据迁移装置,所述集
群包括m个数据库节点,所述集群还包括n个分片,每个所述数据库节点负责存储一个或多
个分片的数据,所述n大于m;所述装置包括:
数据分配模块,用于按设定的分配方式,将进入集群的数据分配到相应的分片上;
迁移处理模块,用于当集群内需要数据迁移时,确定需要数据迁移的数据库节点,
在确定的数据库节点管理的分片中,选择出需要迁出的分片,将选择出的分片的数据从原
数据库节点迁移到指定的数据库节点。
可选地,所述数据分配模块,具体用于将进入集群的数据的键key通过哈希后对n
取模,将所述数据分配到分片标识与取模后的值相同的分片上。
可选地,当集群整体数据量过载,需要集群内数据迁移时,指定的数据库节点为新
增的数据库节点;当集群内单数据库节点数据量过载,需要集群内数据迁移时,指定的数据
库节点为集群内未发生数据量过载的数据库节点中的一个或多个。
可选地,当集群整体数据量过载,需要集群内数据迁移时,所述迁移处理模块,具
体用于统计每个分片的数据量,根据每个分片的数据量得到各数据库节点所管理的分片的
数据总量,求取每个数据库节点所管理的分片的数据总量的平均值,确定出数据总量超出
所述平均值的数据库节点为需要数据迁移的数据库节点。
可选地,所述迁移处理模块,还用于当需要集群间数据迁移时,启动新集群内的主
节点,并将新集群内的主节点设置为旧集群相应主节点的从节点,通过主从同步的方式,将
旧集群中主节点的数据同步到所述新集群中的主节点,并在新旧集群的主节点间同步完成
后,启动新集群内的从节点,进行新集群内的主从节点的数据同步,并将旧集群的读写流量
切换到新集群。
可选地,所述新、旧集群内均划分有多个数据库节点组,每个数据库节点组内均设
有主节点和从节点,且每个数据库节点组内的主节点负责本组内的数据同步。
本发明有益效果如下:
本发明所述数据迁移方案,支持了单节点扩容数据迁移、集群整体扩容数据迁移
和跨机房数据迁移多种场景,通用性强;
另外,本发明在扩容数据迁移时,支持为单节点进行扩容和整个集群进行扩容,使
得扩容数据迁移更为灵活可用,可以解决集群下单个节点过载和整个集群过载两种场景的
扩容问题;
再者,本发明在集群自动扩容方面,增加节点后,自主地根据每个节点的数据量进
行数据迁移,使得数据量尽可能的平均分配,这样能够很好地平衡节点数据访问量,使得分
布式存储系统整体性能达到最佳效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现
有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是
本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还
可以根据这些附图获得其他的附图。
图1为现有技术中一致性哈希方案的示意图;
图2为本发明实施例中数据分片原理图;
图3为本发明第一实施例提供的一种分布式数据库集群的数据迁移方法的流程
图;
图4为本发明实施例中集群整体数据量过载时扩容数据迁移示意图;
图5为本发明实施例中跨机房数据迁移的示意图;
图6为本发明第二实施例提供的一种分布式数据库集群的数据迁移装置的结构框
图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完
整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
为了解决分布式存储系统中扩容时现有数据迁移方法带来的数据分布不均衡问
题,以及不支持跨机房数据迁移的问题,本发明实施例提供一种分布式数据库集群的数据
迁移方法和装置。本发明实施例的核心思想在于:设置n个分片,不管节点如何变化分片的
数量不变。每条数据都经过哈希后落入一个分片。每个节点负责若干个分片的数据存储工
作。当单节点数据量过载需要扩容进行数据迁移时,将指定节点的指定分片数据迁移到新
节点;对集群整体数据量过载需要扩容进行数据迁移时,通过获取各个分片的近似数据量,
在当前分片分布的基础上尽量均衡的选择需要迁移的分片,并将该分片的数据迁移到新的
节点上。同时该数据迁移方法能够支持跨机房情况下的完整数据迁移。
下面通过几个具体实施例对本发明的具体实施过程进行详细阐述。
在本发明第一实施例中,提供一种分布式数据库集群的数据迁移方法,本实施例
所述的集群包括m个数据库节点,进一步地,本发明实施例还为集群设置有n个分片,每个所
述数据库节点负责存储一个或多个分片的数据,而每个分片与节点的对应关系都存放的键
值存储系统ETCD中。进入集群的数据按设定的分配方式被分配到相应的分片上,其中n大于
m。
如图2所示,为本发明实施例所述的数据分片原理图。由图可知,本实施例中所述
集群具有2048个分片,每一条到来的数据,对数据的key通过哈希后对2048取模使得数据落
到其中一个分片中。即,每个分片都具有分片标识,各分片标识构成整个哈希值空间组织。
当对数据的key通过哈希并对2048取模后的值一定会与某分片的分片标识相匹配,将数据
发送到匹配的分片上。
本发明实施例中,当集群内需要数据迁移时,迁移操作如图3所示,包括如下步骤:
步骤S301,确定需要数据迁移的数据库节点;
步骤S302,在确定的数据库节点管理的分片中,选择出需要迁出的分片;
步骤S303,将选择出的分片的数据从原数据库节点迁移到指定的数据库节点。
本实施例中,集群内需要数据迁移分为两种场景,一种场景是单节点数据量过载
需要进行数据迁移,另一种是集群整体数据量过载需要进行数据迁移。
针对第一种场景,需要数据迁移的数据库节点即为数据量过载的数据库节点,而
步骤S303中的指定的数据库节点为集群内的一个或多个数据库节点。
本实施例中,由于每个数据库节点负责存储指定分片的数据,所以,在确定数据库
节点的数据量是否过载时,统计每个分片的数据量,在统计各分片的数据量后,即可得到每
个数据库节点的数据量。当该数据量满足设定的过载标准时,判定发生数据量过载。
针对第二中场景,需要对集群进行扩容,即在集群中增加一个或多个数据库节点。
此时,步骤S303中的指定数据库节点即为新增的数据库节点。
本实施例中,首先统计每个分片的数据量,进而得到每个数据库节点的数据量,判
定数据量大于新加入数据库节点后每个数据库节点平均理论数据量的数据库节点为需要
数据迁移的数据库节点。如图4所示,为集群整体数据量过载需要扩容,新加入数据库节点
后每个数据库节点平均理论数据量为100,则在节点1和节点2中选取分片进行数据迁移。
本发明实施例中,在需要数据迁移的数据库节点管理的分片中选择需要迁出的分
片时,要使得本节点的数据量不再过载,所以,选取需要迁移的分片的个数要根据具体情况
而定,或者,可以预先设定选取策略,根据选取策略来确定需要迁出的分片。本领域技术人
员可以根据需求灵活的设定选取策略,本发明不对其选取方式做唯一限定。
进一步地,本发明实施例中,当进行数据迁移后,还需要修改ETCD配置信息,以将
所有选择出来需要迁移的分片修改为新节点负责存储。
另外,对每个分片执行数据迁移后,从原节点同步到新节点上,每完成一个分片的
数据迁移后删除原节点上的该分片下的数据。
在本发明的又一实施例中,本实施例所述方法还可进行跨机房数据迁移,具体的,
对于更换机房,需要跨机房完整数据迁移时:
首先,停止旧集群的写入操作;
其次,启动新集群的主节点,将新集群的主节点设置为旧集群主节点的从节点;
第三,按照主从同步的方式,将旧集群主节点下的数据同步给新集群的主节点,具
体如图5中的步骤(1);
第四,主从同步完成后,断开新、旧集群主节点之间的连接。这时新集群的主节点
已经正式切换为新集群的主;
第五,启动新集群的从节点,完成主从同步;具体如图5中的步骤(2);
第六,新集群主从同步完成后,将所有读、写流量切换到新集群,完成跨机房数据
迁移。
本发明实施例中,可以将所述集群内的数据库节点划分为多个组,每个组内设有
多个数据库节点,每组内均有一个主节点,除主节点外,其他节点均为从节点。集群内从节
点定时将本节点的数据同步到主节点,可选地,主节点负责实现从节点间的数据同步。
进一步地,本发明实施例中,新、旧集群内的主节点个数相同,实现一对一的主从
同步。
综上可知,本发明实施例所述方法既支持单节点扩容数据迁移,又支持集群整体
扩容数据迁移。其中,单节点扩容数据迁移允许对特定节点的指定分片进行扩容数据迁移,
这在用户数据分布极其不均匀的情况下,支持对单个节点进行扩容;另外,集群整体扩容数
据迁移能够根据数据量分布情况选择需要迁移的分片,能够尽可能平衡数据访问量,使得
分布式存储系统性能达到最优。
进一步地,本发明实施例所述方法在支持扩容数据迁移的同时,还能够支持跨机
房全量的数据迁移。
在本发明的第二实施例中,提供一种分布式数据库集群的数据迁移装置,所述集
群包括m个数据库节点,本实施例中,所述集群还包括n个分片,每个所述数据库节点负责存
储一个或多个分片的数据,所述n大于m。
如图6所示,本实施例所述装置包括:
数据分配模块610,用于按设定的分配方式,将进入集群的数据分配到相应的分片
上;
迁移处理模块620,用于当集群内需要数据迁移时,确定需要数据迁移的数据库节
点,在确定的数据库节点管理的分片中,选择出需要迁出的分片,将选择出的分片的数据从
原数据库节点迁移到指定的数据库节点。
基于上述结构框架及实施原理,下面给出在上述结构下的几个具体及优选实施方
式,用以细化和优化本发明所述装置的功能,以使本发明方案的实施更方便,准确。具体涉
及如下内容:
在本发明的一个具体实施例中,数据分配模块610将进入集群的数据的键key通过
哈希后对n取模,将所述数据分配到分片标识与取模后的值相同的分片上。具体的,如图2所
示,每个分片都具有分片标识,各分片标识构成整个哈希值空间组织。当对数据的key通过
哈希并对2048取模后的值一定会与某分片的分片标识相匹配,将数据发送到匹配的分片
上。
进一步地,本实施例中,集群内需要数据迁移分为两种场景,一种场景是单节点数
据量过载需要进行数据迁移,另一种是集群整体数据量过载需要进行数据迁移。
针对第一种场景,需要数据迁移的数据库节点即为数据量过载的数据库节点,此
时,指定的数据库节点为集群内的一个或多个数据库节点。
本实施例中,由于每个数据库节点负责存储指定分片的数据,所以,在确定数据库
节点的数据量是否过载时,统计每个分片的数据量,在统计各分片的数据量后,即可得到每
个数据库节点的数据量。当该数据量满足设定的过载标准时,判定发生数据量过载。
针对第二中场景,需要对集群进行扩容,即在集群中增加一个或多个数据库节点。
此时,指定的数据库节点即为新增的数据库节点。
本发明实施例中,当集群整体数据量过载,需要集群内数据迁移时,所述迁移处理
模块620,具体用于统计每个分片的数据量,根据每个分片的数据量得到各数据库节点所管
理的分片的数据总量,求取每个数据库节点所管理的分片的数据总量的平均值,确定出数
据总量超出所述平均值的数据库节点为需要数据迁移的数据库节点。
在本发明的一个具体实施例中,迁移处理模块620,还用于当需要集群间数据迁移
时,启动新集群内的主节点,并将新集群内的主节点设置为旧集群相应主节点的从节点,通
过主从同步的方式,将旧集群中主节点的数据同步到所述新集群中的主节点,并在新旧集
群的主节点间同步完成后,启动新集群内的从节点,进行新集群内的主从节点的数据同步,
并将旧集群的读写流量切换到新集群。
本发明实施例中,可以将所述集群内的数据库节点划分为多个组,每个组内设有
多个数据库节点,每组内均有一个主节点,除主节点外,其他节点均为从节点。集群内从节
点定时将本节点的数据同步到主节点,可选地,主节点负责实现从节点间的数据同步。
进一步地,本发明实施例中,新、旧集群内的主节点个数相同,实现一对一的主从
同步。
综上所述,本发明实施例所述装置,支持了单节点扩容数据迁移、集群整体扩容数
据迁移和跨机房数据迁移多种场景,通用性强;
另外,本发明实施例在扩容数据迁移时,支持为单节点进行扩容和整个集群进行
扩容,使得扩容数据迁移更为灵活可用,可以解决集群下单个节点过载和整个集群过载两
种场景的扩容问题;
再者,本发明实施例在集群自动扩容方面,增加节点后,自主地根据每个节点的数
据量进行数据迁移,使得数据量尽可能的平均分配,这样能够很好地平衡节点数据访问量,
使得分布式存储系统整体性能达到最佳效果。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部
分互相参见即可,每个实施例重点说明的都是其与其他实施例的不同之处。尤其对于装置
实施例而言,由于其基本相似与方法实施例,所以,描述的比较简单,相关之处参见方法实
施例的部分说明即可。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可
以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储
介质可以包括:ROM、RAM、磁盘或光盘等。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的
保护范围之内。