美文网首页
读懂Redis Presharding

读懂Redis Presharding

作者: hei禹 | 来源:发表于2018-12-23 22:12 被阅读0次

    在解释Redis Presharding之前,先来说下sharding。Sharding,译为分片,有时也用partitioning(分区),这俩是同一个意思,说的是数据分散到Redis多个实例。

    那presharding就是预分片的意思,这是Redis 3.0之前的概念。在Redis 3.0官方支持了Redis集群,在那之前,要想实现集群,用的是各种民间方法,如客户端侧的分片、代理等,典型的代表是Twitter的Twemproxy。同时,Redis作者也提出了一种集群方案,即为presharding。他戏称之为乞丐版的集群,正统的当然是之后的3.0集群方案啦。

    如何分片,大家可能首先会想到如下的分片方案:Node = Hash(key) MOD N。hash是简单的,但rehash是很困难的,同时涉及到redis运行时key在不同实例间的迁移。

    Redis Presharding不需要resharding,主要步骤如下:

    0)在项目的开始阶段,在同一服务器上部署多个redis实例;

    1)在扩容阶段,新增服务器,部署新的redis实例;

    2)将新实例设为要迁移的旧实例的slave;

    3)断开客户端;

    4)更新配置:新实例的ip;

    5)新实例执行slaveof no one,成为master;

    6)重启客户端,使客户端使用新实例;

    7)关闭旧实例。

    作者提出这种方案,也是基于redis轻量的特点。因为redis代码量少,三方依赖少,因此内存占用相当少(1M+),故而可以在单机上部署相当多的实例。

    使用presharding时,可以部署脚本来管理集群、增加监控、通过主从复制增强容错能力。

    重点说明:

    1)presharding前后,集群中的redis实例总数是不变的。正因为如此,避免了resharding,不存在key值从一个区转移到另一个分片区。

    2)新增服务器上应部署多少个redis实例?

    答:如果之前有1台服务器,加1台服务器,那么应迁移1/2的实例,以此类推。原则是每台服务器上实例数均衡。

    3)presharding前后redis实例不变,那有什么意义?

    答:集群的思想是用多台(可能性能相对差的)机器,得到高效的处理能力。随着业务的发展,单机上可能存储、CPU、内存不够用了,此时就需要增加机器,并进行实例的迁移,此时单机的实例数变少,单机的压力减小。因此,假设有N台机器,每台M个实例,随着业务的发展,N会逐渐增大,M逐渐减小,但N*M是保持不变的。

    4)限制。该方案受限于初始设定的实例数,如果N*M个redis实例还满足不了需求,再增加机器就会出现resharding。作者建议初始单机部署32,64,128个redis实例,当然最终还是应该根据自己的业务实际情况和对未来的预估,或者直接升级redis版本唠。

    参考资料:

    1、(redis作者对presharding的详细说明)http://oldblog.antirez.com/post/redis-presharding.html

    2、(官网关于分片的话题)https://redis.io/topics/partitioning

    3、Redis Presharding

    4、redis集群(Sharding)和在线扩容(Pre-Sharding)

    5、(知乎小钢镚儿的回答)Redis集群方案应该怎么做?

    相关文章

      网友评论

          本文标题:读懂Redis Presharding

          本文链接:https://www.haomeiwen.com/subject/rbeokqtx.html