Redis 集群

Redis的哨兵模式基本实现了读写分离+高可用。

但是只有1个master的话,存储会有性能的瓶颈。如果要支持更大数据量的缓存,那就横向扩容更多的master节点即可。假如假如1个master节点可以支持存放32GB内存。30台左右差不多就是1个T的内存啦。

Redis Cluster是一种服务器 Sharding 技术,3.0版本开始正式提供。它实现了Redis的分布式存储,也就有说每台Redis节点上存储不同的数据。

集群的数据分片

Redis 集群没有使用一致性 hash,而是引入了哈希槽【hash slot】的概念。
Hash槽共有16384(2的14次方)个槽,每台服务器分管一部分。假设有三台服务器,第一台服务器负责【0,5460】这个范围,第二台服务器负责【5461,10992】这个范围,第三台服务器负责【10923,16383】这个范围。
采用CRC16算法先对key产生一个整数值,再对16384求余数,即CRC16(key)%16384。也就是通过Hash槽分发数据。
增加新的服务器需要对key进行迁移,即从一台服务器搬到另一台服务器。

特点

  • 使用Redis cluster时,Master节点的个数至少需要3个。每个master可以有任意个slave。
  • 所有的节点都是一主一从(也可以是一主多从)。从库不提供服务,仅作备份。
  • 支持在线增加、删除节点。也就是说支持在线扩容。
  • 客户端可以连接任意一个主节点进行读写。

redis cluster的主从复制模型

为了保证高可用,redis-cluster集群引入了主从复制模型,一个主节点对应一个或者多个从节点,当主节点宕机的时候,就会启用从节点。当其它主节点 ping 一个主节点 A 时,如果半数以上的主节点与 A 通信超时,那么认为主节点 A 宕机了。如果主节点 A 和它的从节点 A1 都宕机了,那么该集群就无法再提供服务了。