Redis集群简介《Redis开发与运维读书笔记》

Redis集群

数据分布

Redis采用哈希分区规则,常见的哈希分区规则如下:
1)节点取余分区:hash(key)%N = key虽在的节点
2)一致性哈希分区:
为系统的每个节点分配一个token,这些token组成一个hash环。数据读写执行节点查询操作是先 hash(key) 然后顺时针找到第一个大于改哈希值的token节点。
好处:加减节点只影响相邻节点
坏处:加减节点部分无法命中尤其在数据量小时影响比较大,需要增加一倍或减少一半节点才能保证数据和负载的均衡。
3)虚拟槽分区。

虚拟槽分区

Redis集群就是使用的这种虚拟槽分区,Redis集群的槽范围是0-16383(2的14次方=16384 )

  • 解耦数据和节点的关系,简化扩容和收缩维度
  • 节点自身维护槽的迎合关系
  • 支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景

集群功能限制

  • key批量操作支持有限
  • key事物支持有限
  • 不能将大的键值对象如hash、list等映射到不同的节点
  • 不支持多数据库,只支持 db0
  • 复制结构只支持一层,不支持树形复制结构

节点通信

Redis采用P2P的Gossip(留言)协议

Gossip协议原理:
节点间不断通信交换信息,一段时间后所有节点都会知道集群完整的信息。

集群伸缩

集群伸缩 = 槽和数据在节点之间的移动

请求路由

在集群模式下,Redis接收任何键相关命令首先计算键对应的槽,在根据槽找到对应的节点,如果节点是自身则执行命令,否则返回MOVED重定向错误,通知客户端请求正确的节点。

故障转移

Redis Cluster 可以为每个主节点设置若干个从节点,单主节点故障时,集群会自动将其中某个从节点提升为主节点。如果某个主节点没有从节点,那么当它发生故障时,集群将完全处于不可用状态。不过 Redis 也提供了一个参数cluster-require-full-coverage可以允许部分节点故障,其它节点还可以继续提供对外访问。…

你可能感兴趣的:(redis)