Redis学习笔记----Redis Cluster集群 (一)

1. Redis Cluster简介

1.1 为什么使用redis-cluster?
[1] 为了在大流量访问下提供稳定的业务,集群化是存储的必然形态
[2] 未来的发展趋势肯定是云计算的大数据的紧密结合
[3] 只有分布式架构能满足要求
1.2 Redis集群搭建方案:
[1] Twitter 开发twemproxy
[2] 豌豆荚开发codis
[3] redis官方的redis-cluste
Redis集群搭建的方式有多种,但从redis3.0之后版本支持redis-cluster集群,至少需要3(Master)+ 3(Slave)才能建立集群。Redis-Cluster 采用无中心结构,每个节点都和其他所有节点连接。其redis-cluster架构如下图所示
Redis学习笔记----Redis Cluster集群 (一)_第1张图片

2. Redis Cluster集群特点

[1] 所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽。
[2] 节点的fail是通过集群中超半数的节点检测失效时才生效。
[3] 客户端与redis 节点 直连,不需要中间proxy层,客户端不需要连接集群所有的节点,连接集群中任何一个可用节点即可。
[4] redis-cluster 把所有的物理节点映射到 [0-16383] slot 上(不一定是平均分配),cluster负者维护
[5] Redis集群预分好16384个哈希槽,当需要在Redis集群中放置一个key-value时,redis先对key使用 crc16 算法算出一个结果,然后把结果对16384 求余数,这样每个key都会对应一个编号 0-16383 之间的哈希槽,redis会根据节点数量大致均等的将哈希槽隐射到不同的节点上

3. Redis Cluster 容错

3.1 容错性:
它是指软件检测应用程序所运行的软件或硬件中发生错误并发从发错误中恢复的能力,通常可以从系统的可靠性,可用性,可测性等几个方面来衡量。
3.2 redis-cluster容错性是通过投票来实现的
[1] 投票过程是集群中所有master参与,如果半数以上master节点与master节点通信超时(cluster-node-timeout),认为当前master节点挂掉
[2] 什么时候整个集群不可用 (cluster_state:fail)?
如果集群任意master挂掉,且当前master没有slave, 集群进入fail状态,也可以理解为集群的slot隐射 [0-16383] 不完整时进入fail状态,如果超过半数以上master挂掉,无论是否有slave,集群进入fail状态
Redis学习笔记----Redis Cluster集群 (一)_第2张图片

4. redis-cluster 节点分配

(官方推荐)三个主节点分别是:A,B,C 三个节点,他们可以是一台机器上的三个端口,也可以是三台不同的服务器,那么。采用哈希槽(hash slot)的方式来分配16384个slot的话,他们三个节点分别承担的slot区间是
节点A覆盖 0-5460
节点B覆盖 5461-10922
节点C覆盖 10923-16383
如果我们新增一个主节点D,redis-cluster的这种做法是从各个节点的前面各拿取一部分slot放到D上
节点A覆盖 1365-5460
节点B覆盖 6827-10922
节点C覆盖 12288-16383
节点D覆盖 0-1364 5461-6826 10923-12287

小结

这是Redis Cluster集群的一些基础概念,下一节我们将了解如何在redis上进行相关搭建。

你可能感兴趣的:(Redis)