Redis 集群是 Redis 处理大数据而提供的分布式数据库方案,集群通过分片(sharding)的方式来保存数据库中的键值对。
Redis 集群中的节点分为主节点(Master)和从节点(Slave),其中主节点用于处理槽,而从节点则用于复制主节点,并在主节点故障宕机下线时,切换为主节点继续处理请求命令。
一个 Redis 集群通常由多个节点(node)组成,每个节点都是相互独立的,要组建一个真正可工作的集群,需要将节点连接起来,构成一个包含多个节点(node)的集群。
查看节点
命令:CLUSTER NODES
连接节点
命令:CLUSTER MEET
集群中的整个数据库被分为16384个槽(slot),数据库中的每个键都属于其中一个,集群中的每个节点(node)可以处理 0 个或 16384 个。
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value 时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽。redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。
Redis 集群没有使用一致性hash, 而是引入了哈希槽的概念,使用哈希槽的好处就在于可以方便的添加或移除节点。
查看槽
命令:CLUSTER INFO
指派槽命令
命令:CLUSTER ADDSLOTS
127.0.0.1:6379> CLUSTER ADDSLOTS 0 1 2 3 4 ... 5000
当一个从节点发现自己正在复制的主节点进入已下线状态,从节点将开始对下线主节点进行故障转移
新的主节点是通过选举产生的
注:这个选举新主节点的方法其实和哨兵机制中选择领导者哨兵非常相似