一种基于ZooKeeper的Redis集群方法技术

技术编号:19486995 阅读:48 留言:0更新日期:2018-11-17 11:33
本发明专利技术公开了一种基于ZooKeeper的Redis集群方法。该方法以Zookeeper作为一致性中间件来维护的分布式Redis集群的数据分片信息,客户端通过ZooKeeper获得Redis集群的数据分片信息并建立路由算法,从而使Redis客户端与服务端之间不需要通过代理层即可直接通信,并实现Redis集群的动态扩缩容和数据自动迁移的能力。同时,该方法结合Redis‑Sentinel和ZooKeeper实现了集群故障的自动转移能力,保证了Redis集群的高可用性。本发明专利技术减少Redis集群代理层所带来的额外网络开销,提高Redis集群的性能,同时保证Redis集群的扩展能力,数据自动迁移能力和可用性。

【技术实现步骤摘要】
一种基于ZooKeeper的Redis集群方法
本专利技术属于分布式Key-Value系统领域内的一种集群方法,尤其涉及一种基于ZooKeeper的Redis集群方法及其实现。
技术介绍
作为NoSQL(NotOnlySql)数据库中一个子集的Key-Value存储系统,如Redis等,采用简单的Key-Value数据模型,并基于内存提供了类似于传统Hash表的快速查询操作。它们通常作为提升数据中心或者应用的数据访问速度的重要手段,已经成为了很多数据中心中关键基础设施的重要组成部分。在工业界,很多大公司,如Facebook、Amazon等,都部署着大规模的分布式Key-Value系统集群充当关键系统的数据层。可见这些Key-Value存储系统的性能将直接影响到很多大规模服务的QoS(服务质量),提升分布式Key-Value系统的性能具有很大的意义和价值。Redis是一个基于内存的Key-Value数据库,它把所有的数据都存在了内存中,提供了很快的访问速度,同时提供了丰富的特性,如Key-Value对的过期和淘汰策略、复制功能和RedisSentinel可用性方案等,所以得到了很多用户的青睐,已经成为目前最著名的开源Key-Value系统之一。然而,虽然Redis在分布式集群方案方面已经有了Codis和Twemproxy这些目前主流的集群方案,但这些方案采用代理方式来对客户端的请求进行转发造成集群性能的损失,仍存在着不足,所以本专利技术提供了一种基于ZooKeeper的Redis集群方法,实现了一个支持在线动态扩缩容,并且可以自动进行数据迁移的更高性能且高可用的分布式Redis集群。ZooKeeper是Apache开源的一个分布式服务,可以为分布式程序提供协调服务。ZooKeeper本身就是一个可靠的、可扩展的分布式软件,可以为分布式应用提供一致性服务,典型的应用场景是配置管理、域名服务、集群管理和分布式锁等。ZooKeeper提供了比较简单的数据模型,它维护了一个类似于文件系统数据结构。每个节点被称作一个znode,所有的znode都可以由一条路径唯一表示。但与文件系统不同的是,ZooKeeper中每一个znode都可以存储数据,所有对znode数据的读写操作也都是原子性的。用户可以监控znode,当znode数据发生变化,或者子节点发生变化等,设置监控的客户端可以收到通知,这也是Zookeeper的核心功能,很多应用功能的开发都基于这个特性。
技术实现思路
本专利技术的目的在于针对目前Redis在集群方案和网络处理方面的不足,提出并实现了一种基于ZooKeeper的支持动态扩缩容、数据自动迁移并且更高性能的高可用Redis集群方法。为了实现本专利技术,采用的主要技术方案如下。采用ZooKeeper这第三方中间件来提供可靠的一致性服务,来统一维护Redis集群的数据分片信息,数据分片信息主要包括节点的IP地址、端口、迁移时间和slot分配等信息。对客户端进行优化封装,让客户端从ZooKeeper获得Redis集群的数据分片信息,建立数据路由算法,同时继续监控ZooKeeper集群znode节点中数据的变化,当Redis集群拓扑发生变化的时候能及时知道并根据变化的情况做出路由调整。当发生Redis集群的扩缩容的时候,服务端动态地根据Redis节点的权重重新计算每个Redis节点负责的slot数量,对slot进行迁移调整,并更新ZooKeeper中节点的信息,客户端通过监控znode节点中数据的变化获得通知,更新slot与Redis节点的路由关系,并根据znode节点配置的迁移时间确定是否需要进行数据迁移,如果需要进行数据迁移则维护一个临时的slot与Redis节点的映射表,表示slot与迁移前原属Redis节点的映射关系,方便在需要的时候数据可以从旧的节点迁移到新的节点,从而实现Redis集群的动态扩缩容和数据自动迁移能力。方法还为Redis集群中每个Redis主节点配备了若干个备节点,备节点负责与主节点进行数据同步复制,同时采用RedisSentinel来对所有的Redis主节点和备节点进行监控,当有某个Redis主节点发生故障无法正常提供服务的时候,RedisSentinel自动从发生故障的主节点下的所有备节点中选择一个备节点提升为新的主节点代替原来的主节点提供服务,并更新ZooKeeper中相应znode节点中的主节点IP地址和端口,客户端获得通知后会更新相应节点的客户端实例,从而实现Redis集群的故障自动转移,保证Redis集群的可用性。与现有技术相比,本专利技术具有如下优点和技术效果:本专利技术减少Redis集群代理层所带来的额外网络开销,现有主流的Redis集群方案,如Codis和Twemproxy都采用代理来对客户端的请求进行转发,导致客户端的请求在网络传送上都需要经过代理层,多了一跳,造成性能的损失,而本专利技术去掉了代理层,让客户端可以直接与服务端通信,减少了网络开销,提高Redis集群的性能,同时本专利技术在实现上也保证了Redis集群的扩展能力,数据自动迁移能力和可用性。附图说明图1为实例中一种基于ZooKeeper的Redis集群方法整体框架图。图2为ZooKeeper中的数据分片信息示意图。图3为添加新节点前后数据分片信息的变化对比图。图4为数据路由主要结构图。图5为数据迁移过程中数据路由结构变化图。图6为数据迁移处理流程图。图7为数据迁移线程处理流程图。图8不同负载下的系统吞吐量图9系统延迟具体实施方式下面结合附图,对本专利技术的具体实施作进一步说明,但本专利技术的实施和保护不限于此,需指出的是,以下若有未特别详细说明之处,均是本领域技术人员可根据现有技术理解或实现的。本实例一种基于ZooKeeper的Redis集群方法如图1所示,下面分点进行详细地说明。1、数据分片信息维护本实例选择将数据分片信息交给第三方中间件ZooKeeper维护,并利用ZooKeeper提供的一致性保证所有客户端可以看到一致的信息,同时利用znode可以被监控的方式,让客户端在集群拓扑等信息有变更的时候,可以及时地得到通知并做出更新,实现集群的动态变更。图2说明了数据分片信息在ZooKeeper中的组织方式。名为节点名称的znode节点代表的是一个Redis集群的信息,该znode节点下节点1至节点N代表的是Redis集群中的每一个节点,Redis集群的每一个节点都在名为节点名称的znode节点下有唯一对应的节点,每个节点存储着节点的详细信息,包括节点的IP地址、端口、节点权重和slot分配等信息。2、动态增删节点当需要增删节点的时候,本专利技术会依据各个节点的权重从现有的节点中将一部分slots重新分配给新加入的节点或者把原来分配给被删除节点的slots回收回来重新分配给剩下的节点,并更新ZooKeeper中整个集群各个节点的数据分片信息,并通知所有客户端,让所有客户端获取最新的数据分片信息并做出相应的调整从而实现节点的动态添加与删除。如图3所示,假设Redis集群原来有两个节点,每个节点的权重都是10,1号节点负责slot1、2、3,2号节点负责slot3、4、5,当向集群中新增加一个权重也为10的新节点3后,原来属于节点1的s本文档来自技高网
...

【技术保护点】
1.一种基于ZooKeeper的Redis集群方法,其特征在于用第三方中间件ZooKeeper来提供一致性服务,统一维护Redis集群的数据分片信息,客户端通过ZooKeeper获得Redis集群的数据分片信息并建立路由算法,实现Redis集群的动态扩缩容和数据自动迁移的能力,并结合Redis‑Sentinel,为每个Redis主节点配备若干个备节点,利用Redis备节点可以对Redis主节点进行数据同步复制的能力和Redis‑Sentinel集群来保障Redis集群的可用性,同时通过ZooKeeper与客户端通信来将后端Redis主节点和备节点的切换信息通知给客户端,实现集群故障的自动转移,保证Redis集群的高可用性。

【技术特征摘要】
1.一种基于ZooKeeper的Redis集群方法,其特征在于用第三方中间件ZooKeeper来提供一致性服务,统一维护Redis集群的数据分片信息,客户端通过ZooKeeper获得Redis集群的数据分片信息并建立路由算法,实现Redis集群的动态扩缩容和数据自动迁移的能力,并结合Redis-Sentinel,为每个Redis主节点配备若干个备节点,利用Redis备节点可以对Redis主节点进行数据同步复制的能力和Redis-Sentinel集群来保障Redis集群的可用性,同时通过ZooKeeper与客户端通信来将后端Redis主节点和备节点的切换信息通知给客户端,实现集群故障的自动转移,保证Redis集群的高可用性。2.根据权利要求1所述的一种基于ZooKeeper的Redis集群方法,其特征在于Redis集群的数据分片信息被维护在ZooKeeper集群上,每个Redis节点对应ZooKeeper上一个znode节点,znode节点的存储的数据包括:节点是否有效,节点更新时间,Redis节点IP地址,Redis节点端口,迁移时间,节点权重,slot信息;客户端通过ZooKeeper获得Redis集群的信息并构建路由算法,并采用murmurhash3算法将Key映射到slot。3.根据权利要求1所述的一种基于ZooKeeper的Redis集群方法,其特征在于Redis集群的动态扩缩容能力,具体是:当需要增删节点的时候,依据各个节点的权重重新计算每个节点负责的slot数量,并把多余的slot分配给新加入的节点或者把原来分配给被删除节...

【专利技术属性】
技术研发人员:刘发贵周晓场
申请(专利权)人:华南理工大学
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1