Redis的Sharding分片机制
一、概念
-
分片机制:允许数据存放在不同的机器上,对客户端透明
-
Redis分片机制:减轻单台Redis实例的压力,扩展存储能力和计算能力
二、预分片技术Pre-Sharding
1. Redis不支持动态分片操作,扩容和缩容都比较复杂。
2. 预分片技术:Redis一开始就启动足够多的实例,可以在一台机器上,随着容量的增大,将实例迁移到别的机器上。
Redis的预分片技术可以按照以下步骤进行实例迁移操作:
(1)在新机子上启动新的redis实例;
(2)将新redis实例作为slave将原redis实例作为master,将数据从原redis实例迁移到新redis实例上;
(3)停止客户端(分片操作在客户端上时)或代理服务器(分片操作在代理上);
(4)更新客户端或者代理服务器中的配置信息,去掉被迁移的原redis实例的ip和端口等信息,加上新启动redis实例的IP地址和端口;
(5)向新启动的redis发送SLAVEOF NOONE命令,终止新redis实例对原redis实例的从属关系;
(6)重启客户端程序或者代理程序,此时它们将会使用新的redis实例;
(7)关掉被迁移走数据的原redis实例。
重点说明:
(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版本唠。
3. Redis3.0版本有了集群功能之后,解决了扩容和负载均衡的问题,可以不再使用预分片。
因为3.0以后使用了数据槽技术,slot。原理:预设一个很大的数据槽数量,Redis实例和数据槽是一对多的关系,后续扩展Redis实例,只需要修改Redis实例和数据槽的对应关系即可。数据槽Slot数量不可扩展,所以需要一开始设置一个超出业务量的值。根据自身项目业务量预估一个值。
参考:
https://www.cnblogs.com/june0816/p/11073047.html
https://blog.csdn.net/iteye_7682/article/details/82605583
https://www.jianshu.com/p/062cecdda2ec
Redis作者的博客:
http://oldblog.antirez.com/post/redis-presharding.html

浙公网安备 33010602011771号