一种数据迁移的方法及系统
技术领域
本发明涉及数据分布式缓存领域,特别是指一种数据迁移的方法及系统。
背景技术
云计算是网格计算、分布式计算、并行计算、效用计算、网络存储、虚拟化、负载均衡等传统计算机技术和网络技术发展融合的产物;它旨在通过网络将多个成本相对较低的计算实体整合成一个具有强大计算能力的系统。分布式缓存是云计算范畴中的一个领域,其作用是提供云计算中海量数据的分布式存储服务以及高速读写访问的能力。
提供分布式缓存功能的分布式缓存系统由若干服务器节点以下简称节点、以及客户端互相连接构成。一般来说,为保证数据的安全性,写入节点的数据不可能只保存在单个节点上,而是在多台节点上保存同一个数据的副本,互为备份。所述数据由键(Key)和值(Value)构成,Key相当于数据的索引,Value是Key所代表的数据内容。逻辑上Key和Value是一对一的关系。
分布式缓存系统在长期工作过程中可能出现节点负载不均匀、某些节点不稳定、系统负荷过大等等的问题,这时就需要将负载较高或不稳定的节点上的部分数据迁移到负载较低的节点上;或者添加新的节点,将系统中的部分数据迁移至新节点上维护。在分布式缓存系统中,如何在不影响系统正常工作的前提下迁移数据是比较难以解决的关键问题。
现有技术中,数据迁移一般有两种解决方法:
方案1,停止分布式缓存系统的正常工作,提示客户端分布式缓存系统正在更新,然后进行分布式缓存系统的数据迁移;
方案2,分布式缓存系统正常工作情况下,客户端通过遍历读取要迁出数据的节点中的数据,然后写入要迁入数据的节点;
上述方案1中的方法,要停止分布式缓存系统的正常工作,影响了分布式缓存系统的正常运行;方案2中的方法,通过遍历的方法读取数据,会导致数据迁移速度缓慢,并且,在分布式缓存系统正常工作的情况下,新产生的数据可能会被遗漏,导致迁移的数据在迁出数据的节点与迁入数据的节点之间不一致。
发明内容
有鉴于此,本发明的主要目的在于提供一种数据迁移的方法及系统,可以在保证系统正常工作的同时,提高数据的迁移速度,保证迁移过程中数据的一致性。
为达到上述目的,本发明的技术方案是这样实现的:
本发明提供了一种数据迁移的方法,该方法包括:
根据用户选择通知数据移出节点进行数据迁移;
数据移出节点将迁移数据及重做日志直接发送给数据移入节点;
数据移入节点接收迁移数据并保存,根据重做日志对迁移数据进行校验和更新。
上述方案中,所述通知包括:数据移入节点地址、迁移数据所在的虚节点地址。
上述方案中,所述数据移出节点将迁移数据及重做日志直接发送给数据移入节点包括:数据移出节点根据数据移入节点地址,将虚节点地址中的迁移数据及重做日志以数据包的形式发送给数据移入节点,在当前重做日志的数据包发送完成后,通知管控平台,管控平台暂停数据移出节点的服务。
上述方案中,所述根据重做日志对迁移数据的校验和更新包括:数据移入节点根据接收到的重做日志,确定重做日志中记录的操作中的数据与迁移数据不同,重新执行一次该操作。
上述方案中,所述根据重做日志对迁移数据进行校验和更新之后,该方法进一步包括:数据移入节点通知管控平台重操作完成,管控平台通知所有节点及客户端,由数据移入节点代替数据移出节点为客户端提供迁移数据的相关服务,同时清除数据移出节点中的迁移数据。
本发明还提供了一种数据迁移的系统,该系统包括:数据迁移管控模块、数据移出处理模块、数据移入处理模块;
数据迁移管控模块,用于根据用户选择通知数据移出处理模块迁移数据;
数据移出处理模块,用于将迁移数据及重做日志发送给数据移入处理模块;
数据移入处理模块,用于接收迁移数据并保存,根据重做日志对接收的迁移数据进行校验和更新。
上述方案中,所述数据迁移管控模块具体用于,根据用户选择,将包含数据移入节点地址、迁移数据所在的虚节点地址的通知发送给数据移出处理模块。
上述方案中,所述数据移出处理模块具体用于,根据数据移入节点地址,将虚节点中的迁移数据及重做日志以数据包的形式发送给数据移入处理模块,确定当前重做日志的数据包发送完成,通知数据迁移管控模块;所述数据迁移管控模块进一步用于,根据数据移出处理模块的通知,暂停数据移出节点的服务。
上述方案中,所述数据移入处理模块进一步用于,重操作完成后通知数据迁移管控模块;相应的,所述数据迁移管控模块进一步用于,通知所有节点及客户端,由数据移入节点代替数据移出节点为客户端提供迁移数据的相关服务,清除数据移出节点中的迁移数据。
由此可见,采用本发明所述的方法及系统,将迁移数据从数据移出节点直接发送到数据移入节点,提高数据迁移的速度;迁移数据在复制后进行迁移,有效保证系统的正常功能;数据移入节点根据重做日志进行重操作,保证数据迁移期间,客户端向数据移入节点发送请求时,迁移数据发生变化后,数据移出节点与数据移入节点之间迁移数据的一致性。
附图说明
图1为本发明实现数据迁移的方法流程示意图;
图2为本发明实现数据迁移的系统组成示意图。
具体实施方式
本发明的基本思想是:根据用户选择通知数据移出节点进行数据迁移,数据移出节点将数据及重做(Redo)日志发送给数据移入节点,数据移入节点接收迁移数据并保存,根据重做日志对接收的迁移数据进行校验和更新。
下面通过具体实施例与附图来对本发明进行详细说明。
一种数据迁移的方法,如图1所示,具体步骤如下:
步骤101、系统负担过重或负载不均时,根据用户选择通知数据移出节点进行数据迁移;
用户发现系统负载过重或负载不均时,需要启动数据迁移,通过管控平台选择需要迁移数据的节点,即数据移出节点;以及接收迁移数据的节点,即数据移入节点,通知数据移出节点进行数据迁移;这里,所述系统指分布式缓存系统;
其中,所述通知为:管控平台向数据移出节点发送数据迁移信息,所述数据迁移信息包含需要迁移的虚节点、数据移入节点地址等;所述虚节点是节点将数据进行分组保存在不同的虚节点中。所述数据移入节点可以是负载较轻的节点,也可以是新增节点,新增节点接入系统,向管控平台发送自身信息,管控平台根据新增节点发送的自身信息,要求其他节点与新增节点建立连接,或者要求新增节点与其他节点建立连接;所述自身信息包含自身地址等。
步骤102、数据移出节点将数据及Redo日志直接发送给数据移入节点;
数据移出节点根据管控平台的通知,选取虚节点中的数据,以数据包的形式,根据数据移入节点地址,发送给数据移入节点。
如果这时客户端向数据移出节点发送请求,因为数据移出节点的数据仍在,仍可以向客户端提供服务。同时,因为客户端向数据移出节点发送请求,会导致数据移出节点的数据发生变化,为保存数据移出节点与数据移入节点中数据的一致性,数据移出节点在数据迁移期间,将根据客户端发送的请求,数据移出节点做出的响应,即数据移出节点的操作写入Redo日志,在数据移出节点将迁移数据发送给数据移入节点后,将Redo日志以数据包的形式发送给数据移出节点,所述Redo用于记录数据移出节点的操作,所述数据移出节点的操作包括数据移出节点做动作及对应的数据,例如删除及要删除数据、增加及要增加的数据、修改及修改的数据等,所述Redo日志的功能可通过管控模块选择是否开启。
因为客户端会不时的向数据移出节点发送请求,所以Redo日志中的记录会持续增加,这样会导致迁移无法结束,所以,数据移出节点在当前Redo日志的数据包发送完成时,通知管控平台,管控平台要求数据移出节点停止服务,数据移出节点停止服务,同时将从通知管控平台到停止服务期间产生的Redo日志以数据包的形式发送给数据移入节点,所述停止服务指停止对系统服务提供支持。
数据是以Key和Value的形式保存的,一个Key及对应的Value保存在多个节点中,其中一个称之为协同服务器,即协同节点,其他的称之为副本服务器,即副本节点,协同服务器与副本服务器之间存在连接关系,协同节点和副本节点的功能相同。Key及节点地址的对应关系保存在路由表中,一个Key对应多个节点地址,默认选取第一个节点地址作为处理该Key的协同节点地址,其他节点地址作为副本节点地址。客户端向节点发送请求,会根据Key查询本地保存的路由表,获取协同节点地址,根据节点地址,向节点发送请求。如果协同节点停止服务,会根据本地保存的路由表查找Key对应的下一个节点地址,将客户端发送的请求发送给下一个节点,由该节点作为协同服务器处理该Key相关的请求,因此,数据移出节点暂停服务后,不影响系统的正常工作和客户端的正常使用。
步骤103、数据移入节点接收迁移数据,根据Redo日志对迁移数据进行校验和更新,保证数据一致性。
这里,数据移入节点接收数据移出节点发送的数据并保存,接收数据移出节点发送的Redo日志,根据日志的记录,对迁移数据进行校验和更新,所述校验和更新是指数据移入节点根据接收的Redo日志,获取Redo日志中的操作,将操作对应的数据同迁移数据比较,若与迁移数据相同,则不做任何操作,若与迁移数据不同,则重新执行一次所述操作,保证数据一致性,校验和更新完成后,通知管控平台,管控平台向网络中所有节点及客户端发送节点更换通知消息,所述节点通知消息是指之前由数据移出节点提供的关于迁移数据的服务,现在由数据移入节点提供;并且,将路由表中迁移数据中Key对应的节点地址,将原来数据移出节点的地址,替换为数据移入节点的地址,并启动数据移入节点的服务。同时,管控平台清除数据移出节点中的迁移数据。至此,数据迁移工作全部完成。
本发明还提供了一种数据迁移的系统,如图2所述,该系统包括:数据迁移管控模块201、数据移出处理模块202以及数据移入处理模块203;
数据迁移管控模块201,位于管控模块,用于根据用户选择通知数据移入处理模块202进行数据迁移;所述通知包括数据移出节点地址、迁移数据所在的虚节点;
数据移出处理模块202,位于数据移出节点,用于根据通知将数据及Redo日志以数据包的形式发送给数据移入处理模块203;
数据移入处理模块203,位于数据移入节点,用于接收数据包并保存,接收Redo日志,并根据Redo日志对接收的迁移数据进行校验和更新。
数据移出处理模块202具体用于,接收客户端的请求,将数据移出节点的响应,即数据移出节点的操作,记录在Redo日志中。
数据移出处理模块202进一步用于,确定当前Redo日志的数据包发送完成后,通知数据迁移管控模块201,同时将发送完日志到停止服务之间产生的Redo日志的数据发送给数据移入处理模块203;
相应的数据迁移管控模块201,用于暂停数据移出节点的服务。
数据移入处理模块203进一步用于,根据接收的Redo日志,获取Redo日志中记录的操作,将操作中的数据同迁移数据比较,若与迁移数据相同,则不做任何操作,若与迁移数据不同,则重新执行一次所述操作,保证数据一致性,执行完Redo日志记录的操作后,通知数据迁移管控模块201;
数据迁移管控模块201,用于根据数据移入处理模块203的通知,通知所有节点及客户端,原先由数据移出节点提供的迁移数据相关服务,更改为由数据移入节点提供服务,并将路由表中Key对应的节点地址中数据移出节点地址,替换为数据移入节点地址。
数据迁移管控模块201进一步用于,将数据移出节点中的迁移数据清除。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。