用于集群节点缩扩的方法、设备和系统的制作方法

文档序号:9506185阅读:471来源:国知局
用于集群节点缩扩的方法、设备和系统的制作方法
【技术领域】
[0001]本发明涉及节点集群领域,具体涉及用于集群节点缩扩的方法、设备和系统。
【背景技术】
[0002]Redis (远程字典服务,Remote Dict1nary Service)是一种全内存的 Key/Value(键值对)缓存/存储系统。由于受单个节点所在服务器内存容量限制,在大规模数据缓存/存储场景下,一般由多个节点组成集群,每个节点只负责存储部分数据,称为shardingo客户端根据Key (键)和节点的映射关系,将对特定Key的请求发送到特定节点。
[0003]Key和节点的映射关系,目前常用的方式是由客户端路由算法来实现。将节点按顺序编号,以Key作为参数,通过一个Hash函数算出一个数值,然后根据节点的数量来取模(或者一致性Hash算法)以定位到一个节点。由于是通过算法来进行路由,算法本身也能保证路由的时间复杂度是0(1),而且并不需要在任何地方存储Key到节点的映射关系,因此被主要使用在有大量的、不断增长的Key/Value的存储场景。
[0004]但是客户端路由算法也存在着弊端。目标节点数量和编号一旦发生变化,key和节点的映射关系就会发生变化,客户端之前通过旧的映射关系写入到节点A的key/value数据,由于通过新的映射关系映射到节点B,可能会去节点B上读取而无法读取到。因此,在由于数据量增长而需要增加节点时,必须遍历所有key (通常直接调用redis的命令接口来执行遍历),在节点间迀移数据,以便反映最新的映射关系。这种通过增加节点来增大整体集群容量的方式被称为水平扩展。水平扩展造成的数据迀移通常会非常耗时并且很难在线进行。
[0005]为了避免节点变化造成的数据迀移。可以采取pre-sharding方案,S卩预先估计数据量及其增长速度,设定一个合适的足够多的节点数量。而且,为了避免占有过多的物理服务器,通常初期会在同一服务器上部署多个节点,随着数据量的增长,通过将节点迀移到新增加的物理服务器上,使得每个节点拥有更多的内存资源,从而使得整体集群的内存容量扩大。迀移节点到其他服务器,采取redis本身提供的主从复制实现即可实现。由于只是更改节点与物理机的映射关系,节点数量和编号并未发生变化,不需要在节点之间迀移数据。这种通过增大单节点的容量、节点数不发生变化的方式也称为垂直扩展。
[0006]垂直扩展需要预先规划数据容量和增长。评估合适的足够多的节点并不容易。节点数量的设立需要综合考虑内存消耗和数据增长,随着超出预计的数据增长,即使一个物理服务器部署一个节点,由于受制于物理服务器内存而无法继续扩展,不可避免需要水平扩展来解决整体集群的容量扩大。
[0007]而上面谈到的水平扩展造成的数据迀移需要遍历所有的key,按照新的映射关系,将数据迀移到新的节点上,这整个过程通常会非常耗时。而且也很难在线进行。
[0008]还存在离线的水平扩展方案,即:在扩展前先停止所有客户端的读写,迀移完成后,再允许客户端按照新的映射关系进行读写。这种离线的水平扩展避免了迀移程序和客户端程序同时进行读写而造成的数据冲突和不一致性,但是需要较长的禁止读写时间。然而业务需求却常常不允许长时间的禁止读写,因此需要一个能够进行在线水平扩展的方案。

【发明内容】

[0009]为解决上述问题,本发明实施例提供了一种集群节点缩扩的方法、设备和系统。
[0010]根据本发明的一个方面,提供了一种用于集群节点缩扩的方法,包括:从第一节点集群的多个第一节点接收所述多个第一节点并行生成的redis数据库快照;从所述多个第一节点接收客户端在所述redis数据库快照的发送之后进行的写操作;生成与第二节点集群的多个第二节点分别对应的附加文件,并按照所建立的key到所述第二节点集群的映射关系,将所述写操作分别记录在所述附加文件中;按照所述所建立的key到所述第二节点集群的映射关系,分析所述redis数据库快照并将所述redis数据库快照重新组合到与所述第二节点集群的所述多个第二节点分别对应的数据库文件中;向所述多个第二节点分别发送与其对应的数据库文件和附加文件;以及指示配置所述客户端的配置管理系统将所述第二节点集群的集群节点拓扑发送到所述客户端,以使得所述客户端可根据所述第二节点集群的集群节点拓扑来进行读写操作。
[0011]根据本发明的第二方面,提供了一种用于集群节点缩扩的设备,包括:接收单元,用于从第一节点集群的多个第一节点接收所述多个第一节点并行生成的redis数据库快照,以及从所述多个第一节点接收客户端在所述redis数据库快照的发送之后进行的写操作;附加文件生成单元,用于生成与第二节点集群的多个第二节点分别对应的附加文件,并按照所建立的key到所述第二节点集群的映射关系,将所述接收单元接收到的所述写操作分别记录在所述附加文件中;重组合单元,用于按照所述所建立的key到所述第二节点集群的映射关系,分析所述接收单元接收到的所述redis数据库快照并将所述redis数据库快照重新组合到与所述第二节点集群的所述多个第二节点分别对应的数据库文件中;发送单元,用于向所述多个第二节点分别发送与其对应的数据库文件和附加文件,以及用于指示配置所述客户端的配置管理系统将所述第二节点集群的集群节点拓扑发送到所述客户端,以使得所述客户端能够根据所述第二节点集群的集群节点拓扑来进行读写操作。
[0012]根据本发明的第三方面,提供了一种用于集群节点缩扩的系统,包括:客户端;包括多个第一节点的第一节点集群;包括多个第二节点的第二节点集群;上述用于集群节点缩扩的设备;以及用于配置所述客户端的配置管理系统,所述配置管理系统将所述第二节点集群的集群节点拓扑发送到所述客户端,以使得所述客户端可根据所述第二节点集群的集群节点拓扑来进行读写操作。
[0013]通过使用上述的方法、设备和系统,解决了现有技术中存在的数据迀移耗时且难以在线进行的问题。
【附图说明】
[0014]通过下面结合附图对发明进行的详细描述,将使本发明的上述特征和优点更加明显,其中:
[0015]图1是示出根据本发明的实施例的集群节点缩扩系统的示意图;
[0016]图2是示出根据本发明的实施例的集群节点缩扩方法的流程图;以及
[0017]图3是示出根据本发明的实施例的集群节点缩扩设备的示意框图。
【具体实施方式】
[0018]下面,参考附图详细说明本发明的优选实施方式。在附图中,虽然示于不同的附图中,但相同的附图标记用于表示相同的或相似的组件。为了清楚和简明,包含在这里的已知的功能和结构的详细描述将被省略,以避免使本发明的主题不清楚。
[0019]在通常的技术方案中,redis节点数据的整体迀移依靠的是redis主从复制功能。从节点初始化时,请求主节点将那一时刻的数据快照,打包成rdb (redis db的二进制格式)发送给从节点,从节点加载rdb初始化自身内存。同时主节点记录了自那个快照时刻之后的所有写操作,并按写操作时间顺序依次发生到从节点。从节点在加载的快照数据基础上,依次执行主节点后续发送的所有写操作,从而达到主、从节点的数据最终一致性。
[0020]而本发明实施例所提供的方案在redis主从复制的支持下,提供一个称为redis桥的中间件,将原有的η节点集群A,通过复制和复制过程中按key和节点的新的映射关系,将数据迀移到m个节点的集群B。迀移过程中,集群A继续服务客户端的读写请求,等到B集群已经完整复制了数据并且追赶上了后续发生在集群A的增量写操作,B集群的复制延时已经非常小时,才让B集群服务于客户端的读写请求。具体地,在一些实施例中,根据业务需求允许的时间窗口,通过配置系统将B集群新的节点数量和编号(集群节点拓扑)发送到客户端,同时禁止客户端写。在该时间窗口内,客户端仍然可以按照集群A节点拓扑进行只读请求。当A和B集群数据达到完全同步的时候,配置系统通知客户端按照B集群节点拓扑进行读写请求。至此,数据迀移和节点数量变更完成。老的集群A节点资源即可释放。
[0021]本发明中的redis桥是实现了 redis复制协议的中间件。redis桥进程启动后,作为从节点的角色连接到集群A上所有节点,请求复制。同时,它也作为主节点的角色允许B集群的所有节点连接并响应后者的复制请求。由于redis的主从复制是以节点(进程)为单位,因此本发明实施例中可以通过以连接为粒度实现redis的复制协议来实现上述多节点的从节点和主节点。
[0022]下面简要描述用于上述本发明的设计原理的系统示意图。图1示出了根据本发明实施例的集群节点缩扩系统的示意图。
[0023]如图1所示,该系统包括应用程序客户端(简称客户端)、用于配置客户端的配置管理系统、包括两个节点的集群A(在本文中也称为第一节点集群)、将要从集群A扩展到的包括三个节点的集群B (在本文中也称为第
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1