您的位置:首页 > 数据库 > Redis

Redis分片

2015-08-23 16:05 344 查看
         分片是分布式存储的突出特点。

必要性

         如果Redis集群的每个数据库都存储集群中的所有数据,那么集群的总数据存储量受限于可用存储内存最小的数据库节点,形成木桶效应。由于Redis中的所有数据都基于内存存储,这一问题就尤为突出了,尤其是当使用Redis做持久化存储服务时。从容量上,单个Redis服务器的内存非常容易成为存储瓶颈,所以需要进行数据分片。

旧版本Redis的解决办法

         旧版本Redis(2.4)没有提供集群的功能。

         通常使用客户端分片来解决这个问题,即启动多个Redis数据库节点,由客户端决定每个键交由哪个数据库节点存储,下次客户端读取该键时直接到该节点读取。这样可以实现将整个数据分布存储在N个数据库节点中,每个节点只存放总数据量的1/N。但对于需要扩容的场景来说,在客户端分片后,如果想增加更多的节点,就需要对数据进行手工迁移,同时在迁移的过程中为了保证数据的一致性,还需要将集群暂时下线。这个过程相对比较复杂。

         考虑到Redis实例非常轻量特点,可以采用预分片技术(presharding)来在一定程度上避免此问题。具体来说就是在节点部署初期,就提前考虑日后的存储规模,建立足够多的实例(如128个节点),初期数据很少,所以每个节点存储的数据也非常少,但由于节点轻量的特性,数据之外的内存开销并不大,这使得只需要很少的服务器即可运行这些实例。日后存储规模扩大后,所要做的不过是将某些实例迁移到其他服务器上,而不需要对所有数据进行重新分片并进行集群下线和数据迁移了。

         总之,客户端分片终归是有非常多的缺点,比如维护成本高,增加、移除节点较繁烦等。

新版本Redis的解决办法

         Redis3.0版的一大特性就是支持集群(Cluster)功能。

         Redis集群是自动分片和高可用的首选方式。当前还不能完全用于生产环境,但是已经进入了beta阶段。  一旦Redis集群可用,以及支持Redis集群的客户端可用,Redis集群将会成为Redis分片的事实标准。

         集群的特点在于拥有和单机实例同样的功能,同时在网络分区后能够提供一定的可访问性以及对主数据库故障恢复的支持。

          Redis集群是查询路由和客户端分片的混合模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Redis 分片 集群