一种分布式内存数据库在线扩展节点的方法及系统与流程

文档序号:11234142阅读:454来源:国知局

本发明涉及分布式内存数据库领域,尤其涉及一种分布式内存数据库在线扩展节点的方法及系统。



背景技术:

分布式内存数据库凭借其超高的内存访问速度,在电信计费、实时在线交易等系统中有着广泛的应用,内存数据通过切片方式均匀分布在各个单机内存数据库节点上,对外提供统一的数据服务。

随着业务量的变化,分布式内存数据库可能需要动态的增加节点以满足数据量增长的需求。

传统技术中,一般会暂时停止分布式内存数据库服务,将各节点原有的数据按照新的hash算法重新计算路由规则,并重新均匀分布在新的节点上,然后重新启动分布式内存数据库服务。由于涉及到海量数据的重新分布,耗时比较长,会导致分布式内存数据库长时间不能对外提供服务。

使用内存数据库服务的系统,一般都是在线实时系统,对实时性和事务一致性有着很高的要求,无法接受内存数据库服务长时间中断。



技术实现要素:

本发明所要解决的技术问题是:分布式内存数据库动态的扩展节点时,涉及到海量数据的重新分布,会暂时停止分布式内存数据库服务,耗时比较长,导致分布式内存数据库服务长时间中断,为解决上述技术问题,本发明提供了一种分布式内存数据库在线扩展节点的方法及系统。

本发明解决上述技术问题的技术方案如下:一种分布式内存数据库在线扩展节点的方法,该方法包括以下步骤:

步骤1:新增节点,根据新增节点重新规划路由对应关系,生成新路由规则;

步骤2:读取旧节点的数据,将在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点;

步骤3:读取旧节点的redo日志,将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点;

步骤4:向应用客户端发送切换指令,应用客户端待redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

本发明的有益效果是:本发明采用路由对照表规则重新分布数据,使迁移的数据量降低到最小程度;采用多阶段数据迁移,在不停止对外服务的情况下,在线扩展节点,使应用系统可以平滑的过渡,自动路由到新节点上,本发明采用路由对照表方式,仅从旧节点迁移部分数据到新节点,即可使数据重新平均分布,降低了数据迁移规模,加快了迁移速度。

在上述技术方案的基础上,本发明还可以做如下改进。

进一步地,所述步骤1包括以下步骤:

步骤1.1:新增节点;

步骤1.2:创建新的路由规则对照表;

步骤1.3:根据新增节点重新规划路由对应关系。

进一步地,所述步骤2包括以下步骤:

步骤2.1:记录数据迁移开始时间点t;

步骤2.2:将新增节点添加到分布式内存数据库集群中;

步骤2.3:读取所有旧节点数据,所有旧节点同时在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点。

进一步地,所述步骤3包括以下步骤:

步骤3.1:从所述时间点t开始,读取旧节点的redo日志;

步骤3.2:所有旧节点同时将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点。

进一步地,所述步骤4包括以下步骤:

步骤4.1:判断待迁移的redo日志是否存在积压,若是,则继续执行步骤3,若否,执行步骤4.2;

步骤4.2:将分布式内存数据库置成中间状态,分布式内存数据库服务隐藏旧节点上与所述新路由规则不符的redo日志;

步骤4.3:向应用客户端发送切换指令,应用客户端待redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

采用上述进一步技术方案的有益效果是:在数据迁移结束后,由于原有的旧节点上还存在冗余数据,本发明根据新路由规则,隐藏那些本节点上与路由规则不符的记录,可以确保对外提供的数据准确性。

进一步地,所述方法还包括步骤5:删除旧节点冗余数据。

进一步地,所述方法还包括步骤6:将分布式内存数据库由中间状态改为正常状态。

进一步地,所述冗余数据为与新路由规则不符的数据。

本发明提供的另一种技术方案如下:一种分布式内存数据库在线扩展节点的系统,该系统包括路由规则生成模块、数据迁移模块、redo日志迁移模块以及切换访问模块;

所述路由规则生成模块用于新增节点,根据新增节点重新规划路由对应关系,生成新路由规则;

所述数据迁移模块用于读取旧节点的数据,将在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点;

所述redo日志迁移模块用于读取旧节点的redo日志,将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点;

所述切换访问模块用于向应用客户端发送切换指令,应用客户端待redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

进一步地,所述系统还包括删除模块和状态切换模块;

所述删除模块用于删除旧节点冗余数据;

所述状态切换模块用于将分布式内存数据库由中间状态改为正常状态。

附图说明

图1为本发明一种分布式内存数据库在线扩展节点的方法流程示意图;

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

如图1所示,为本发明实施例提供的一种分布式内存数据库在线扩展节点的方法,该方法包括以下步骤:

步骤1:新增节点,根据新增节点重新规划路由对应关系,生成新路由规则;

步骤2:读取旧节点的数据,将在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点;

步骤3:读取旧节点的redo日志,将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点;

步骤4:向应用客户端发送切换指令,应用客户端待redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

其中,步骤1包括以下步骤:

步骤1.1:新增节点;

步骤1.2:创建新的路由规则对照表:_t_hash_rules_new表,根据新增节点重新规划路由对应关系,原则是尽量均匀,迁移量最小。

其中,步骤2包括以下步骤:

步骤2.1:记录数据迁移开始时间点t;

步骤2.2:将新增节点添加到分布式内存数据库集群中;

步骤2.3:读取所有旧节点数据,所有旧节点同时在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点。

其中,步骤3包括以下步骤:

步骤3.1:从所述时间点t开始,读取旧节点的redo日志;

步骤3.2:所有旧节点同时将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点。

其中,步骤4包括以下步骤:

步骤4.1:判断待迁移的redo日志是否存在积压,若是,则继续执行步骤3,若否,执行步骤4.2;

步骤4.2:更新路由规则对照表,将分布式内存数据库置成中间状态,中间状态即分布式内存数据库服务隐藏旧节点上与所述新路由规则不符的redo日志;

步骤4.3:向应用客户端发送切换指令,提示应用重新加载路由规则,此时,应用如果访问旧节点,仍然是正常的,如果访问新节点,则只能等待,应用客户端待积压的redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

在上述过程中,涉及迁移的数据及redo日志记录在新旧节点上都有一份,因此在多节点并发查询时,会造成查询结果不正确(数据是冗余的)。

而删除这些记录需要较长时间,应用也不可能长时间等待。因此需要提前隐藏掉这些冗余数据,方法如下:

创建一张新表_t_alter_node,在更新路由规则对照表之前,将新增加的节点插入到这张表。

分布式内存数据库在对外提供数据服务时,检查此表是否有数据,如果没有,按照正常的逻辑执行。如果有数据时,则校验待查记录是否符合新规则,如果不符合则隐藏。

然后,将旧节点的冗余数据逐条删除。删除完毕,清空_t_alter_node表。

待redo日志动态迁移量变成0时,将分布式内存数据库由中间状态改为正常状态。

此时,分布式内存数据库在对外提供数据服务时,自然恢复到正常逻辑,扩展结束。

其中,冗余数据为与新路由规则不符的数据。

本发明实施例提供了一种分布式内存数据库在线扩展节点的系统,该系统包括路由规则生成模块、数据迁移模块、redo日志迁移模块以及切换访问模块;

路由规则生成模块用于新增节点,根据新增节点重新规划路由对应关系,生成新路由规则;

数据迁移模块用于读取旧节点的数据,将在新路由规则下属于新增节点的数据从旧节点迁移到对应的新增节点;

redo日志迁移模块用于读取旧节点的redo日志,将在新路由规则下属于新增节点的redo日志从旧节点迁移到对应的新增节点;

切换访问模块用于向应用客户端发送切换指令,应用客户端待redo日志迁移完成后,在新路由规则下访问分布式内存数据库。

其中,该系统还包括删除模块和状态切换模块;

删除模块用于删除旧节点冗余数据;

状态切换模块用于将分布式内存数据库由中间状态改为正常状态。

简单的路由对照表包含两列,一列是hash值(,一列是负责这个hash值的节点。假定hash桶值为12(实际可配,比如是1024,要求远大于节点数),初始有3(m个)个节点,后续扩展时需要再增加1个(n个)节点:

表1路由对照表示例

增加节点后,指定hash值为3、7、11的记录需要迁移到新添加节点上。总体迁移数据量为n/(m+n),这种方法可以使迁移量最小,从而缩短迁移时间,降低对应用系统的影响。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1