Redis Cluster是一种服务器 Sharding 技术,redis 3.0版本开始正式提供。
Sentinel基本已经实现了高可用,但是每台机器都存储相同内容,很浪费内存,所以Redis Cluster实现了分布式存储。每台机器节点上存储不同的内容,并且可扩展性大大提高。

1、Redis Cluster 数据分片原理

redis 数据分片使用的是hash slot, redis集群有16384个哈希槽,每个Key通过CRC16校验后对16384取模来决定放置哪一个槽。

当存取redis key时候,redis会根据CRC16算法得到一个结果,然后把结果和16384求余,通过这个值去对应得节点获取数据。

这个时候,应用客户端实际上只需要连接其中任意一个节点即可,然后Redis Cluster 中每个节点都保存了其他节点得槽信息。这样当存取key计算完槽之后,通过保存槽信息从配置中获取节点信息,然后再去对应得节点获取数据。

Redis cluster脑裂问题 redis cluster sentinel_redis

2、Redis Cluster 复制原理
redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了
一般为保证可用性,为防止某一节点故障造成相应的插槽不可用的情况,我们一般采用多主多从架构;即使主节点挂了,也能够从其他从节点拿到对应插槽的数据。
3、redis Cluster 优缺点
优点:
1、数据依照slot存储分布在多个节点,节点间数据共享,能够动态调整数据分布;可扩展性;无中心架构;
2、高可用性;能够降低运维成本,有效提高系统的可用性以及扩展性。
缺点:
1、数据通过异步复制,不保证数据的强一致性;Client 实现复杂;节点会因为某些原因发生阻塞被判断下线;
2、Key不可以将一个很大的键值对象如 hash、list 等映射到不同的节点,不支持多数据库空间,避免产生 big-key,导致网卡撑爆、慢查询等;
3、复制结构只支持一层;避免产生hot-key,导致主库节点成为系统的短板;
4、重试时间应该大于cluster-node-time时间。

寄语:redis cluster模式官方默认主节点提供读写,从节点提供slot数据备份以及故障转移。使用过程中推荐使用多主多从实现分布式储存以及高可用,如果有业务需求需要从节点提供读服务需要修改从节点配置readonly选项.