Redis 集群规范

摘要:参考官方文档Redis Cluster spec总结的Redis规范

正文:

Redis 集群规范

安全写入

两个写入丢失的可能

  • 写入操作到达主节点,主节点异步冗余备份还没传播到从节点时候主节点挂了,该写入会丢失

    几率很小,虽然是异步备份,但主节点写入并回复客户端的时间和传播给slave节点时间大致相同

  • 故障转移时候,一个没有更新路由表的客户端会在主–>从之前做写入操作(几率更小)

    原因:长时间无法被大多数主节点访问的节点会被故障转移掉,不再接受任何写入操作,其修复好后仍然会有一小段时间拒绝写入。好让其他节点有时间去告知配置信息的变更

可用性

根据redis选举机制,高可用需要至少3台服务器(3个master节点),每个master节点都至少要有一个salve节点可达,最好是从节点数量>主节点数量

  1. master遇到故障转移到slave后,集群会再次恢复可用
  2. master故障修复后会重新加入集群成为新master的从节点,防止下次故障
  3. 当从节点有两个就可以多一次故障转移

redis-cluster

性能

在Redis的集群中,节点并不是把命令转发到负责键的节点上,而是把客户端重定向到服务一定范围内的键的节点上。 最终客户端获得一份最新的集群路由表,里面有写着哪些节点服务哪些键,所以在正常操作中客户端是直接联系到对应的节点来发送指令。

由于使用了异步复制,节点不会等待其他节点对写入操作的回复

所以普通操作是可以被处理得跟在Redis单机版一样的,在一个拥有 N 个master节点的 Redis 集群中,由于线性扩展的设计,你可以认为同样的操作在集群上的性能是Redis单机版的n倍

键分布模型

Redis 集群的键空间被分割为 16384 个槽(slot), 集群的最大节点数量也是 16384 个。

推荐的最大节点数量为 1000 个左右。

每个主节点都负责处理 16384 个哈希槽的其中一部分。

参考链接

Redis Cluster Spec

Redis 集群规范