Redis学习笔记——(16) Redis高可用架构—Redis集群

Redis高可用架构—Redis集群(Redis Cluster)

Redis集群是一个提供再多个Redis节点之间共享数据的程序集,它并不像Redis主从复制模式那样只提供一个master节点提供写服务,而是会提供多个master节点提供写服务,每个master节点中存储的数据都不一样,这些数据通过数据分片的方式被自动分割到不同的master节点上。

为了保证集群的高可用,每个master节点下面还需要添加至少1个slave节点,这样当某个master节点发生故障后,可以从它的slave节点中选举一个作为新的master节点继续提供服务。不过当某个master节点和它下面所有的slave节点都发生故障时,整个集群就不可用了。

Redis集群中的哈希槽

Redis在集群中使用了哈希槽机制,Redis集群中有16384个哈希槽,每次set新key的时候,都会通过CRC16校验之后再对16384取模来决定这个key放在哪个槽。

Redis集群会首先给集群中的每一个master节点分配一部分槽,例如第一个占用0-5500,第二个占用5501-11000,第三个占用11001-16384,当使用set key value时,CRC16(key) % 16384 = 5800,这个key就会被分配刀master2节点上。

Redis通过这样的一个方式进行数据的分流。

Redis集群中节点的通信

Redis集群中,节点之间通过建立TCP连接,使用gossip协议来传播集群的信息

#### Redis Cluster 复制原理

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

优缺点

优点:

  • 数据依照slot存储分布在多个节点,节点间数据共享,能够动态调整数据分布
  • 可扩展性
  • 无中心架构
  • 高可用性
  • 能够降低运维成本,有效提高系统的可用性以及扩展性。

缺点:

  • 数据通过异步复制,不保证数据的强一致性;
  • Client 实现复杂;
  • 节点会因为某些原因发生阻塞被判断下线;多个业务使用同一套集群的时候,不能够依据统计区分冷热数据,资源隔离性较差,非常容易出现互相影响;
  • Slave 在集群中充当“冷备”,不能缓解读压力;
  • Key批量操作限制;
  • Key事务操作支持有限;
  • Key不可以将一个很大的键值对象如 hash、list 等映射到不同的节点;
  • 不支持多数据库空间;
  • 复制结构只支持一层;
  • 避免产生hot-key,导致主库节点成为系统的短板;
  • 避免产生 big-key,导致网卡撑爆、慢查询等;
  • 重试时间应该大于cluster-node-time时间;

你可能感兴趣的:(Redis,redis,学习,架构)