CN105677736A - 一种增加、删除服务器节点的方法及装置 - Google Patents

一种增加、删除服务器节点的方法及装置 Download PDF

Info

Publication number
CN105677736A
CN105677736A CN201511017501.1A CN201511017501A CN105677736A CN 105677736 A CN105677736 A CN 105677736A CN 201511017501 A CN201511017501 A CN 201511017501A CN 105677736 A CN105677736 A CN 105677736A
Authority
CN
China
Prior art keywords
node
key
instruction
hash ring
redis
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201511017501.1A
Other languages
English (en)
Inventor
王春跃
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Dawning Information Industry Beijing Co Ltd
Original Assignee
Dawning Information Industry Beijing Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Dawning Information Industry Beijing Co Ltd filed Critical Dawning Information Industry Beijing Co Ltd
Priority to CN201511017501.1A priority Critical patent/CN105677736A/zh
Publication of CN105677736A publication Critical patent/CN105677736A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Abstract

本申请提供了一种增加、删除服务器节点的方法及装置,包括:接收增加、删除服务器节点的指令;将新增节点加入到预先生成的第二hash环,将删除节点从预先生成的第二hash环上删除;将第二hash环上所述新增节点与新增节点逆时针的上一节点之间的key迁移至新增节点上,将预先生成的第二哈希hash环上删除节点与删除节点逆时针的上一节点之间的key迁移至所述删除节点顺时针的下一节点上;在迁移过程中,写数据写入第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。本申请在数据迁移过程中,采用双hash环来处理数据的读写,既可以防止数据读写或存储错误,又可以无需系统停机等操作,避免由于系统停机导致数据丢失、对业务造成影响。

Description

一种增加、删除服务器节点的方法及装置
技术领域
本申请涉及计算机存储技术领域,尤其涉及一种增加、删除服务器节点的方法及装置。
背景技术
Redis是一个高性能的key-value数据库,Redis的出现很大程度弥补了memcached这类key-value存储的不足,对关系数据库起到较好的补充作用,在订阅-发布系统、排行榜相关系统、缓存系统、大型集群分布式系统中发挥着不可替代的作用。
Redis集群(Cluster)增加或者移除Redis节点时,通常是采用Redis服务的复制功能,通过将迁移的目标服务器设置为被迁移服务器的slave服务器,待slave追上master进度之后,将写Redis服务器停机,主从服务器完全同步后修改写Redis业务配置,指向slave服务器,并断开主从关系,恢复写Redis业务。
现有技术不足在于:
现有Redis集群增删节点时会导致少量数据丢失,对业务造成一定影响。
发明内容
本申请实施例提出了一种增加、删除服务器节点的方法及装置,以解决现有技术中Redis集群增删节点时会导致少量数据丢失,对业务造成一定影响的技术问题。
本申请实施例提供了一种增加服务器节点的方法,包括如下步骤:
接收增加服务器节点的指令;
将所述新增节点加入到预先生成的第二哈希hash环;
将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
本申请实施例提供了一种删除服务器节点的方法,包括如下步骤:
接收删除服务器节点的指令;
将所述删除节点从预先生成的第二哈希hash环上删除;
将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
本申请实施例提供了一种增加服务器节点的装置,包括:
第一接收模块,用于接收增加服务器节点的指令;
增加模块,用于将所述新增节点加入到预先生成的第二哈希hash环;
第一迁移模块,用于将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
读写模块,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
本申请实施例提供了一种删除服务器节点的装置,包括:
第二接收模块,用于接收删除服务器节点的指令;
删除模块,用于将所述删除节点从预先生成的第二哈希hash环上删除;
第一迁移模块,用于将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
第二读写模块,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
有益效果如下:
本申请实施例所提供的增加、删除服务器节点的方法及装置,接收到增加、删除服务器节点的指令后,在预先生成的第二hash环上进行键key的迁移,在迁移过程中写数据写入第二hash环,读数据先从第二hash环读取,读取不到时再从预先生成的第一hash环读取。由于本申请实施例所提供的方案,在数据迁移过程中,采用双hash环来处理数据的读写,既可以防止数据读写或存储错误,又可以无需系统停机等操作,避免由于系统停机导致数据丢失、对业务造成影响。
附图说明
下面将参照附图描述本申请的具体实施例,其中:
图1示出了本申请实施例中业务系统的框架示意图;
图2示出了本申请实施例中增加服务器节点的方法实施的流程示意图;
图3示出了本申请实施例中删除服务器节点的方法实施的流程示意图;
图4示出了本申请实施例中增加服务器节点的过程示意图;
图5示出了本申请实施例中删除服务器节点的过程示意图;
图6示出了本申请实施例中增加服务器节点的装置的结构示意图;
图7示出了本申请实施例中删除服务器节点的装置的结构示意图。
具体实施方式
为了使本申请的技术方案及优点更加清楚明白,以下结合附图对本申请的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本申请的一部分实施例,而不是所有实施例的穷举。并且在不冲突的情况下,本说明中的实施例及实施例中的特征可以互相结合。
发明人在发明过程中注意到:
Redis3.0版本中的Cluster模块,同样实现了redis集群的动态增删节点的功能,它采用预分好的16384个hashslot,相当于有16384个实例,每个实例里面映射了很多key,映射算法为CRC16(key)%16384,所以增删节点进行数据迁移的时候,只需要移动这些hashslot。Cluster内部实现了由于移动hashslot而带来的数据不一致的处理。
RedisCluster之前的版本,需要把Redis升级到3.0以后的版本才能使用Cluster功能,可能对当前使用老版本的用户带来一定的影响。
针对现有技术的不足,本申请实施例提出了一种增加、删除服务器节点的方法及装置,下面进行说明。
图1示出了本申请实施例中业务系统的框架示意图,如图所示,业务系统可以包括:业务平台、中间件平台和Redis服务器集群。所述业务平台通过中间件平台与所述Redis服务器集群相连。其中,
业务平台负责对业务需求的具体实现;
中间件平台,上层对所述业务平台提供Redis应用程序编程接口(API,ApplicationProgrammingInterface)服务,下层与Redis服务器集群进行服务交互,支持Redis集群以及主备切换。
图2示出了本申请实施例中增加服务器节点的方法实施的流程示意图,如图所示,所述增加服务器节点的方法可以包括如下步骤:
步骤201、接收增加服务器节点的指令;
步骤202、将所述新增节点加入到预先生成的第二哈希hash环;
步骤203、将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
步骤204、在迁移过程中,写数据写入所述第二hash环,读数据先从所述第二hash环读取,在读取不到时从预先生成的第一hash环读取。
具体实施中,在初始化时,可以生成两个hash环,在这两个hash环上均可以包括映射到各节点的key,所述第一hash环可以在正常情况下(即服务器节点的数量没有变化时)进行读写数据,所述第二hash环可以在增删节点时进行读写数据。用户/客户端可以发送增加服务器节点的指令,所述服务器节点可以为redis服务器节点。系统接收到所述增加服务器节点的指令之后,可以将所述新增节点加入到预先生成的第二hash环,并将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上。
其中,key可以为将数据通过一定的hash算法处理后映射的结果值。
在迁移过程中,如果业务平台有写数据需求可以直接写入所述第二hash环,如果业务平台有读数据需求可以先从所述第二hash环读取,在没有读取到时再从预先生成的第一hash环读取。
本申请实施例所提供的增加服务器节点的方法及装置,接收到增加服务器节点的指令后,在预先生成的第二hash环上进行键key的迁移,在迁移过程中写数据写入第二hash环,读数据先从第二hash环读取,读取不到时再从预先生成的第一hash环读取。
由于本申请实施例所提供的方案,在数据迁移过程中,采用双hash环来处理数据的读写,既可以防止数据读写或存储错误,又可以无需系统停机等操作,避免由于系统停机导致数据丢失、对业务造成影响。
实施中,所述将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上,具体可以为:
将所述新增节点顺时针的下一节点所有键key放入共享内存;
如果所述key映射到所述新增节点中,从所述共享内存中取出所述key值并重放为redis指令;
将所述key值存储至所述新增节点,并将所述redis指令在所述新增节点上重放。
具体实施中,数据迁移过程可以为,首先将所述新增节点顺时针的下一节点所有键key放入共享内存,然后所述key是映射到所述新增节点的,那么,可以从所述共享内存中取出所述key值,然后将其重放为redis指令,最后将所述redis指令在所述新增节点上重放。
本申请实施例中,在数据迁移过程中,采用共享内存的方式对key进行存储,具体实施时进程可以直接读写内存,而不需要进行任何数据的拷贝,从而可以减少数据的拷贝,在一定程度上提高了迁移效率,属于最快的进程间通信(IPC,Inter-ProcessCommunication)方式。
实施中,在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之后,可以进一步包括:对所述key按照类型归类;
所述从所述共享内存中取出所述key值并重放为redis指令,具体可以为,如果所述key映射到所述新增节点中,批量取出与所述key相同类型的key值,批量重放为redis指令;
所述将所述redis指令在所述新增节点上重放,具体可以为,将所述redis指令在所述新增节点上批量重放。
具体实施中,为了减少系统IO调用,可以首先对key按照类型归类,然后批量取出与所述key相同类型的key值,批量重放为redis指令,最后再将所述redis指令在所述新增节点上批量重放。
本申请实施例中,在数据迁移过程中,可以按照数据类型对key进行分类存储,并批量收集、生成批量重放指令,从而减少了系统IO调用,进而提高了数据迁移效率。
实施中,所述方法可以进一步包括:
在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
本申请实施例中预先生成两个hash环,可以在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态,如果检测到所述迁移状态为完成状态,说明第二hash环的数据迁移完成,此时,可以将所述第一hash环置为失效。
图3示出了本申请实施例中删除服务器节点的方法实施的流程示意图,如图所示,所述删除服务器节点的方法可以包括如下步骤:
步骤301、接收删除服务器节点的指令;
步骤302、将所述删除节点从预先生成的第二哈希hash环上删除;
步骤303、将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
步骤304、在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
具体实施时,用户/客户端可以发送删除服务器节点的指令,所述服务器节点可以为redis服务器节点。系统接收到所述删除服务器节点的指令之后,可以将所述删除节点从预先生成的第二哈希hash环上删除,将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上。
在迁移过程中,如果业务平台有写数据需求可以直接写入所述第二hash环,如果业务平台有读数据需求可以先从所述第二hash环读取,在没有读取到时再从预先生成的第一hash环读取。
本申请实施例所提供的删除服务器节点的方法,接收到删除服务器节点的指令后,在预先生成的第二hash环上进行键key的迁移,在迁移过程中写数据写入第二hash环,读数据先从第二hash环读取,读取不到时再从预先生成的第一hash环读取。
由于本申请实施例所提供的方案,在数据迁移过程中,采用双hash环来处理数据的读写,既可以防止数据读写或存储错误,又可以无需系统停机等操作,避免由于系统停机导致数据丢失、对业务造成影响。
实施中,所述将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上,具体可以为:
将所述删除节点所有键key放入共享内存;
从所述共享内存中取出key值并重放为redis指令;
将所述key值存储至所述删除节点顺时针的下一节点,并将所述redis指令在所述删除节点顺时针的下一节点上重放。
具体实施时,数据迁移过程可以为,首先将所述删除节点所有键key放入共享内存,然后从所述共享内存中取出key值并重放为redis指令,将所述redis指令在所述删除节点顺时针的下一节点上重放。
本申请实施例中,在数据迁移过程中,采用共享内存的方式对key进行存储,具体实施时进程可以直接读写内存,而不需要进行任何数据的拷贝,从而可以减少数据的拷贝,在一定程度上提高了迁移效率,属于最快的进程间通信(IPC,Inter-ProcessCommunication)方式。
实施中,在所述将所述删除节点所有键key放入共享内存之后,可以进一步包括:对所述key按照类型归类;
所述从所述共享内存中取出key值并重放为redis指令,具体可以为,根据所述key类型从所述共享内存中批量取出相同类型的key值,并批量重放为redis指令;
所述将所述redis指令在所述删除节点顺时针的下一节点上重放,具体可以为,将所述redis指令在所述删除节点顺时针的下一节点上批量重放。
具体实施中,为了减少系统IO调用,可以首先对key按照类型归类,然后批量取出与所述key相同类型的key值,批量重放为redis指令,最后再将所述redis指令在所述新增节点上批量重放。
本申请实施例中,在数据迁移过程中,可以按照数据类型对key进行分类存储,并批量收集、生成批量重放指令,从而减少了系统IO调用,进而提高了数据迁移效率。
实施中,所述方法可以进一步包括:
在所述将所述删除节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
本申请实施例中预先生成两个hash环,可以在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态,如果检测到所述迁移状态为完成状态,说明第二hash环的数据迁移完成,此时,可以将所述第一hash环置为失效。
本申请实施例中,当后端Redis集群进行增加(扩容)或者移除(缩容)节点时,数据迁移过程中,采用双hash环方式,防止数据读写错误或者存储错误,无需系统停机,确保业务实时正常运行;并采用共享内存方式对数据类型进行分类存储,根据数据类型采用批量收集生成批量重放指令,对数据指令进行重放,减少系统输入输出IO调用,提高数据迁移效率。
本申请实施例所提供的方案,可以支持但不局限于Redis3.0及其以后Redis版本,使得应用更加灵活;而且本申请实施例可以允许在中间件Redis客户端或者业务端直接使用命令,操作简单,可以一键实现对Redis集群节点的增加或移除功能,无需停机、不影响业务。
为了便于本申请的实施,下面以实例进行说明。
图4示出了本申请实施例中增加服务器节点的过程示意图,如图所示,可以包括如下步骤:
步骤401、启动中间件Client,初始化hash环,分别生成hash环1和hash环2;
步骤402、执行动态增加节点命令,将新节点加入到hash环2;
此时,数据迁移开始。
步骤403、开始数据迁移过程;
由于在新节点node5加入之前,按照hash算法映射顺时针规则,node1和node5之间的数据对象是存储在node4节点上的,新节点node5加入后,需要把node1和node5之间的数据对象迁移至node5上,而这些数据在迁移前都是存储在node4上的,所以首先需要通过redis指令获取node4上的数据。
通过一致性hash按顺时针迁移的规则,将Node1节点和Node5节点之间的数据对象的key迁移至新节点Node5上,其他数据对象依然保持原有的存储位置。
具体迁移过程可以如下所示:
步骤4031、将迁移状态标志置为数据迁移中,获取Node4节点的所有key并放入共享内存,对key类型进行归类处理;
步骤4032、利用hash算法查找,在hash环2上对已放入共享内存的节点4的每个key进行查找;
由于节点4的key获取是在hash环1上进行的,查找key是在hash环2上进行的,hash环2是存在节点node5的,因此,执行增加节点命令,按照一致性hash原则,node4上的一部分key可能会被映射到节点node5上。
若该key映射到新节点Node5中,则根据key类型,批量取出相应的key值,并批量生成Redis的指令;
其中,Redis指令可以为现有技术中redis命令,例如:setkeyvalue(设置key的值为value)等。
步骤4033、将所述相应的key值迁移至新节点node5上,并在新节点Node5上进行批量指令的重放;
数据迁移过程中写入hash环2时,若发现所述迁移数据与所述hash环2上的数据的key或field相同,则以hash环2上的数据作为最新数据;
步骤4034、数据迁移完成后,将所述迁移状态置为数据迁移完成。
步骤404、迁移过程中,写数据可以直接写入hash环2;读数据时,可以先从hash环2读取,如果没有读取成功,再从hash环1读取;检查数据迁移状态的标志是否为完成状态,如果为完成状态,则将hash环1的状态置为失效;
步骤405、Redis从节点可以使用slaveof完成新节点的主从数据的同步。
图5示出了本申请实施例中删除服务器节点的过程示意图,如图所示,可以包括如下步骤:
步骤501、启动中间件Client,初始化hash环,分别生成hash环1和hash环2;
步骤502、执行动态删除节点命令,将节点4从hash环2中删除;
此时,数据迁移开始。
步骤503、开始数据迁移过程;
由于在删除节点node4之前,node1和node4之间的数据是存储在节点node4上,删除节点node4后,node4节点不存在了,按照一致性hash原则,node4节点上的数据需要迁移至node3上。
通过一致性hash删除节点按顺时针迁移的规则,可以将Node1节点和Node4节点之间的所有数据对象key迁移至节点Node3上,其他对象依然保持原有的存储位置。具体迁移过程可以如下:
步骤5031、将迁移状态标志置为数据迁移中,获取Node4节点所有key并放入共享内存,对key类型进行归类处理;
步骤5032、根据key类型,批量取出相应key值,并批量重放为Redis的指令;
步骤5033、在Node3节点上进行批量指令的重放;
步骤5034、数据迁移过程中,写入hash环2时,若发现迁移数据与hash环2上的数据的key或field相同,则以hash环2上的数据作为最新数据;
步骤5035、数据迁移完成后,将迁移状态置为完成,此时可以移除需要删除的物理节点。
步骤504、迁移过程中,写数据可以直接写入hash环2,;读数据时,可以先从hash环2上读取,如果没有读取成功,再从hash环1读取;检查数据迁移状态标志是否为完成,如果为完成状态则可以将hash环1的状态置为失效;
步骤505、Redis从节点可以使用slaveof完成新节点的主从数据的同步。
基于同一发明构思,本申请实施例中还提供了一种增加服务器节点的装置、一种删除服务器节点的装置,由于这些设备解决问题的原理与一种增加服务器节点的方法、一种删除服务器节点的方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
图6示出了本申请实施例中增加服务器节点的装置的结构示意图,如图所示,所述增加服务器节点的装置可以包括:
第一接收模块601,用于接收增加服务器节点的指令;
增加模块602,用于将所述新增节点加入到预先生成的第二哈希hash环;
第一迁移模块603,用于将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
第一读写模块604,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
实施中,所述第一迁移模块具体可以包括:
第一共享内存单元,用于将所述新增节点顺时针的下一节点所有键key放入共享内存;
第一指令生成单元,用于如果所述key映射到所述新增节点中,从所述共享内存中取出所述key值并重放为redis指令;
第一指令重放单元,用于将所述key值存储至所述新增节点,并将所述redis指令在所述新增节点上重放。
实施中,所述装置可以进一步包括:第一归类模块,用于所述key按照类型归类;
所述第一指令生成单元具体用于如果所述key映射到所述新增节点中,批量取出与所述key相同类型的key值,批量重放为redis指令;
所述第一指令重放单元具体用于将所述redis指令在所述新增节点上批量重放。
实施中,所述装置可以进一步包括:
第一状态改变模块,用于在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
第一处理模块,用于在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
图7示出了本申请实施例中删除服务器节点的装置的结构示意图,如图所示,所述删除服务器节点的装置可以包括:
第二接收模块701,用于接收删除服务器节点的指令;
删除模块702,用于将所述删除节点从预先生成的第二哈希hash环上删除;
第二迁移模块703,用于将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
第二读写模块704,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
实施中,所述第二迁移模块具体可以包括:
第二共享内存单元,用于将所述删除节点所有键key放入共享内存;
第二指令生成单元,用于从所述共享内存中取出key值并重放为redis指令;
第二指令重放单元,用于将所述key值存储至所述删除节点顺时针的下一节点,并将所述redis指令在所述删除节点顺时针的下一节点上重放。
实施中,所述装置可以进一步包括:第二归类模块,用于对所述key按照类型归类;
所述第二指令生成单元具体可以用于根据所述key类型从所述共享内存中批量取出相同类型的key值,并批量重放为redis指令;
所述第二指令重放单元具体可以用于将所述redis指令在所述删除节点顺时针的下一节点上批量重放。
实施中,所述装置可以进一步包括:
第二状态改变模块,用于在所述将所述删除节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
第二处理模块,用于在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
为了描述的方便,以上所述装置的各部分以功能分为各种模块或单元分别描述。当然,在实施本申请时可以把各模块或单元的功能在同一个或多个软件或硬件中实现。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

Claims (16)

1.一种增加服务器节点的方法,其特征在于,包括如下步骤:
接收增加服务器节点的指令;
将所述新增节点加入到预先生成的第二哈希hash环;
将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
2.如权利要求1所述的方法,其特征在于,所述将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的数据对象迁移至所述新增节点上,具体为:
将所述新增节点顺时针的下一节点所有键key放入共享内存;
如果所述key映射到所述新增节点中,从所述共享内存中取出所述key值并重放为redis指令;
将所述key值存储至所述新增节点,并将所述redis指令在所述新增节点上重放。
3.如权利要求2所述的方法,其特征在于,在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之后,进一步包括:对所述key按照类型归类;
所述从所述共享内存中取出所述key值并重放为redis指令,具体为:如果所述key映射到所述新增节点中,批量取出与所述key相同类型的key值,批量重放为redis指令;
所述将所述redis指令在所述新增节点上重放,具体为:将所述redis指令在所述新增节点上批量重放。
4.如权利要求2所述的方法,其特征在于,进一步包括:
在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
5.一种删除服务器节点的方法,其特征在于,包括如下步骤:
接收删除服务器节点的指令;
将所述删除节点从预先生成的第二哈希hash环上删除;
将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
6.如权利要求5所述的方法,其特征在于,所述将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上,具体为:
将所述删除节点所有键key放入共享内存;
从所述共享内存中取出key值并重放为redis指令;
将所述key值存储至所述删除节点顺时针的下一节点,并将所述redis指令在所述删除节点顺时针的下一节点上重放。
7.如权利要求6所述的方法,其特征在于,在所述将所述删除节点所有键key放入共享内存之后,进一步包括:对所述key按照类型归类;
所述从所述共享内存中取出key值并重放为redis指令,具体为:根据所述key类型从所述共享内存中批量取出相同类型的key值,并批量重放为redis指令;
所述将所述redis指令在所述删除节点顺时针的下一节点上重放,具体为:将所述redis指令在所述删除节点顺时针的下一节点上批量重放。
8.如权利要求6所述的方法,其特征在于,进一步包括:
在所述将所述删除节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
9.一种增加服务器节点的装置,其特征在于,包括:
第一接收模块,用于接收增加服务器节点的指令;
增加模块,用于将所述新增节点加入到预先生成的第二哈希hash环;
第一迁移模块,用于将所述第二hash环上所述新增节点与所述新增节点逆时针的上一节点之间的键key迁移至所述新增节点上;
第一读写模块,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
10.如权利要求9所述的装置,其特征在于,所述第一迁移模块具体包括:
第一共享内存单元,用于将所述新增节点顺时针的下一节点所有键key放入共享内存;
第一指令生成单元,用于如果所述key映射到所述新增节点中,从所述共享内存中取出所述key值并重放为redis指令;
第一指令重放单元,用于将所述key值存储至所述新增节点,并将所述redis指令在所述新增节点上重放。
11.如权利要求10所述的装置,其特征在于,进一步包括:第一归类模块,用于所述key按照类型归类;
所述第一指令生成单元具体用于如果所述key映射到所述新增节点中,批量取出与所述key相同类型的key值,批量重放为redis指令;
所述第一指令重放单元具体用于将所述redis指令在所述新增节点上批量重放。
12.如权利要求10所述的装置,其特征在于,进一步包括:
第一状态改变模块,用于在所述将所述新增节点顺时针的下一节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
第一处理模块,用于在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
13.一种删除服务器节点的装置,其特征在于,包括:
第二接收模块,用于接收删除服务器节点的指令;
删除模块,用于将所述删除节点从预先生成的第二哈希hash环上删除;
第二迁移模块,用于将预先生成的第二哈希hash环上所述删除节点与所述删除节点逆时针的上一节点之间的键key迁移至所述删除节点顺时针的下一节点上;
第二读写模块,用于在迁移过程中,写数据写入所述第二hash环,读数据先从第二hash环读取,在读取不到时从预先生成的第一hash环读取。
14.如权利要求13所述的装置,其特征在于,所述第二迁移模块具体包括:
第二共享内存单元,用于将所述删除节点所有键key放入共享内存;
第二指令生成单元,用于从所述共享内存中取出key值并重放为redis指令;
第二指令重放单元,用于将所述key值存储至所述删除节点顺时针的下一节点,并将所述redis指令在所述删除节点顺时针的下一节点上重放。
15.如权利要求14所述的装置,其特征在于,进一步包括:第二归类模块,用于对所述key按照类型归类;
所述第二指令生成单元具体用于根据所述key类型从所述共享内存中批量取出相同类型的key值,并批量重放为redis指令;
所述第二指令重放单元具体用于将所述redis指令在所述删除节点顺时针的下一节点上批量重放。
16.如权利要求13所述的装置,其特征在于,进一步包括:
第二状态改变模块,用于在所述将所述删除节点所有键key放入共享内存之前,将迁移状态置为数据迁移中;在数据迁移完成后,将所述迁移状态置为完成状态;
第二处理模块,用于在检测到所述迁移状态为完成状态时,将所述第一hash环置为失效。
CN201511017501.1A 2015-12-29 2015-12-29 一种增加、删除服务器节点的方法及装置 Pending CN105677736A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201511017501.1A CN105677736A (zh) 2015-12-29 2015-12-29 一种增加、删除服务器节点的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201511017501.1A CN105677736A (zh) 2015-12-29 2015-12-29 一种增加、删除服务器节点的方法及装置

Publications (1)

Publication Number Publication Date
CN105677736A true CN105677736A (zh) 2016-06-15

Family

ID=56297883

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201511017501.1A Pending CN105677736A (zh) 2015-12-29 2015-12-29 一种增加、删除服务器节点的方法及装置

Country Status (1)

Country Link
CN (1) CN105677736A (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106302829A (zh) * 2016-10-26 2017-01-04 腾讯音乐娱乐(深圳)有限公司 一种信息访问方法、装置及服务器
CN106789175A (zh) * 2016-11-30 2017-05-31 武汉长江通信智联技术有限公司 一种基于一致性哈希算法进行redis横向扩展的方法
CN107153699A (zh) * 2017-05-09 2017-09-12 北京恒华伟业科技股份有限公司 一种动态扩展集群服务器的方法及装置
CN107479829A (zh) * 2017-08-03 2017-12-15 杭州铭师堂教育科技发展有限公司 一种基于消息队列的Redis集群海量数据快速清理系统及方法
CN108874811A (zh) * 2017-05-10 2018-11-23 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
CN109246250A (zh) * 2018-11-08 2019-01-18 程桂平 根据服务器数量的改变而调整虚拟节点数量的方法
CN109344296A (zh) * 2018-08-30 2019-02-15 武汉斗鱼网络科技有限公司 实现Redis的HASH键的域生命周期控制方法、系统、服务器及存储介质
CN110309101A (zh) * 2018-03-23 2019-10-08 浙江宇视科技有限公司 一种数据管理方法及Hadoop分布式文件系统
CN110333944A (zh) * 2019-04-19 2019-10-15 中国联合网络通信集团有限公司 话单数据业务处理方法及设备
WO2020087927A1 (zh) * 2018-10-31 2020-05-07 华为技术有限公司 一种内存数据迁移的方法及装置
CN111414135A (zh) * 2020-03-11 2020-07-14 国家海洋环境预报中心 一种高性能计算机系统的io效率优化方法
CN117130793A (zh) * 2023-10-27 2023-11-28 乾健科技有限公司 一种大数据分析处理方法以及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102710763A (zh) * 2012-05-29 2012-10-03 新华网股份有限公司 一种分布式缓存池化、分片及故障转移的方法及系统
CN102955845A (zh) * 2012-10-23 2013-03-06 北京亿赞普网络技术有限公司 数据访问方法、装置与分布式数据库系统
CN104881443A (zh) * 2015-05-14 2015-09-02 新浪网技术(中国)有限公司 一种在数据库间迁移数据的方法和系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102710763A (zh) * 2012-05-29 2012-10-03 新华网股份有限公司 一种分布式缓存池化、分片及故障转移的方法及系统
CN102955845A (zh) * 2012-10-23 2013-03-06 北京亿赞普网络技术有限公司 数据访问方法、装置与分布式数据库系统
CN104881443A (zh) * 2015-05-14 2015-09-02 新浪网技术(中国)有限公司 一种在数据库间迁移数据的方法和系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
徐阳: "一个网络文件存储系统TNS关键技术", 《计算机工程与应用》 *

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106302829A (zh) * 2016-10-26 2017-01-04 腾讯音乐娱乐(深圳)有限公司 一种信息访问方法、装置及服务器
CN106789175A (zh) * 2016-11-30 2017-05-31 武汉长江通信智联技术有限公司 一种基于一致性哈希算法进行redis横向扩展的方法
CN107153699A (zh) * 2017-05-09 2017-09-12 北京恒华伟业科技股份有限公司 一种动态扩展集群服务器的方法及装置
CN108874811B (zh) * 2017-05-10 2021-01-26 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
CN108874811A (zh) * 2017-05-10 2018-11-23 北京京东尚科信息技术有限公司 一种数据恢复和迁移的方法和装置
CN107479829B (zh) * 2017-08-03 2020-04-17 杭州铭师堂教育科技发展有限公司 一种基于消息队列的Redis集群海量数据快速清理系统及方法
CN107479829A (zh) * 2017-08-03 2017-12-15 杭州铭师堂教育科技发展有限公司 一种基于消息队列的Redis集群海量数据快速清理系统及方法
CN110309101B (zh) * 2018-03-23 2021-08-31 浙江宇视科技有限公司 一种数据管理方法及Hadoop分布式文件系统
CN110309101A (zh) * 2018-03-23 2019-10-08 浙江宇视科技有限公司 一种数据管理方法及Hadoop分布式文件系统
CN109344296A (zh) * 2018-08-30 2019-02-15 武汉斗鱼网络科技有限公司 实现Redis的HASH键的域生命周期控制方法、系统、服务器及存储介质
CN109344296B (zh) * 2018-08-30 2021-11-26 武汉斗鱼网络科技有限公司 实现Redis的HASH键的域生命周期控制方法、系统、服务器及存储介质
WO2020087927A1 (zh) * 2018-10-31 2020-05-07 华为技术有限公司 一种内存数据迁移的方法及装置
US11435931B2 (en) 2018-10-31 2022-09-06 Huawei Technologies Co., Ltd. Memory data migration method and apparatus where cold data is migrated to shared storage prior to storing in destination storage
US11809732B2 (en) 2018-10-31 2023-11-07 Huawei Technologies Co., Ltd. Method and apparatus of data migration based on use algorithm
CN109246250A (zh) * 2018-11-08 2019-01-18 程桂平 根据服务器数量的改变而调整虚拟节点数量的方法
CN110333944A (zh) * 2019-04-19 2019-10-15 中国联合网络通信集团有限公司 话单数据业务处理方法及设备
CN111414135A (zh) * 2020-03-11 2020-07-14 国家海洋环境预报中心 一种高性能计算机系统的io效率优化方法
CN117130793A (zh) * 2023-10-27 2023-11-28 乾健科技有限公司 一种大数据分析处理方法以及系统

Similar Documents

Publication Publication Date Title
CN105677736A (zh) 一种增加、删除服务器节点的方法及装置
US11704290B2 (en) Methods, devices and systems for maintaining consistency of metadata and data across data centers
US20200371884A1 (en) Remote Data Replication Method and System
US9697092B2 (en) File-based cluster-to-cluster replication recovery
US10248356B2 (en) Using scratch extents to facilitate copying operations in an append-only storage system
US8738883B2 (en) Snapshot creation from block lists
US11321291B2 (en) Persistent version control for data transfer between heterogeneous data stores
CN107644030B (zh) 分布式数据库数据同步方法、相关装置及系统
CN103473277B (zh) 文件系统的快照方法和装置
CN111078667B (zh) 一种数据迁移的方法以及相关装置
US11829606B2 (en) Cloud object storage and versioning system
CN103970585A (zh) 创建虚拟机的方法及装置
US9619322B2 (en) Erasure-coding extents in an append-only storage system
US20150154226A1 (en) File link migration
CN103678715A (zh) 一种分布式文件系统中支持快照的元数据信息管理方法
CN104932986A (zh) 一种数据重分布方法及装置
CN104517067A (zh) 访问数据的方法、装置及系统
CN111770158B (zh) 云平台恢复方法、装置、电子设备及计算机可读存储介质
CN113672591A (zh) 数据迁移方法、系统、存储介质及电子设备
CN104462108A (zh) 数据库结构对象处理方法及装置
US11200219B2 (en) System and method for idempotent metadata destage in a storage cluster with delta log based architecture
US9967310B2 (en) Using an RPC framework to facilitate out-of-band data transfers
CN113821176B (zh) 一种数据迁移的处理方法、装置及存储介质
US20210248108A1 (en) Asynchronous data synchronization and reconciliation
CN115840786B (zh) 一种数据湖数据同步方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20160615

RJ01 Rejection of invention patent application after publication