本文仅仅只是针对 Redis 的 cluster 进群 作简单的介绍(仅仅是基于理论知识),在并无对其涉及到的深层次概念作深刻的探讨。 Redis 3.0 版本以后支持的cluster,下图就是Redis cluster 进群拓扑图数据库
Redis cluster 是一个分布式、容错的Redis 的实现,Redis 集群是 Redis 提供分布式数据库方案,能够在多个Redis 节点之间进行数据共享的程序集,并提供复制、故障转移功能。Redis Cluster 中不存在所谓的中心节点或者代理节点,每一个节点都有保存数据和整个集群的状态,也就是说每一个节点都会保存其余节点的信息,而且定时会给其余节点发送心跳,可以及时感知集群中的节点。数据结构
Redis Cluster 不支持那些须要同时处理多个键的Redis 命令,由于执行这些命令的时候,须要在多个节点中间进行数据同步,并且在高负载的状况下,会对下降 Redis 的性能,严重的可能会致使不可预测的错误。异步
客户端不须要链接Redis cluster 中的全部节点,只要链接到cluster 中的任何一个可用节点便可,这就意味着:只要cluster 中有一个可用节点就能够正常使用。分布式
集群的数据结构性能
Redis cluster 中节点负责存储数据,记录集群状态,cluster 能自动发现其余节点,检测出节点的状态,并在必要的时候剔除故障节点,提高新的节点。代理
Redis cluster 全部节点彼此互联(PING-PONG 机制),并且节点fail 是经过Cluster 中超过半数的节点检测失效时才会生效,从而Redis 根据自动故障机制,将从节点提高为主节点,这时Redis cluster恢复可用。blog
clusteNode结构保存了一个当前节点状态,好比节点的建立时间、节点的名称等、节点当前的配置纪元、节点的IP地址和端口号!Redis cluster 经过分片来保存数据库的键值对,集群的整个数据库被分红了16384个slot,数据库中的每一个键都属于这16384个slot的其中一个,每一个节点均可以处理0或者最多16384个slot。当数据库中的16384个slot都有节点在处理时,Redis cluster 处于上线状态,而若是任何一个slot 没有获得处理,则说明集群处于下线状态。同步
Redis cluster 中的节点之间使用异步复制hash
集群的数据共享ast
Redis 集群使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现。
Redis 提供多个节点实例间的数据共享,也就是Redis A、B、C、D 彼此之间的数据是同步的,一样彼此之间也是能够通讯,而对于客户端操做的key 是有Redis 系统自行分配到各个节点中。见图1。
当Redis cluster 中的一个节点故障,根据Redis cluster复制机制(Master-Slave),将从其他可用节点中选择一个做为主节点继续保持工做,如图2 所示。一旦节点A故障了,那么其从节点A一、A2就能够接管并继续提供与A一样的服务,固然若是节点A、A一、A2节点都出现问题, 那么这个集群就不会继续工做了。