Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能;
1、Redis集群通常是由多个节点组成的,在刚开始的时候,每个节点都是相互独立的,它们都处于自己独立的集群中;连接各个节点的工作由cluster meet命令来完成;节点与节点进行握手,加入到对方所在的集群当中;
2、cluster meet命令的实现
3、槽指派
Redis集群是通过分片的方式来保存数据库中的键值对:集群的整个数据库被分为16384个槽,数据库中的每个键都属于这16384个槽的其中的一个,集群中的每个节点可以处理0个或者16384个槽;当16384个槽指派完毕,才能认为这个集群处于上线的状态;
节点之间是需要相互传自己所检测的槽信息。
4、moved错误
如果键所在的槽并没有指派给当前节点,那么节点会向客户端返回一个moved错误,并自动重定向到这个键所在的槽的服务器;
5、ask错误
在进行重新分片期间,源节点向目标节点迁移一个槽的过程中,可能会出现一种情况:属于被迁移槽的一部分键值对保存在源节点里面,而另一部分键值对则保存在目标节点里面。如果源节点没能在自己的数据库里面找到指定的键,那么这个键有可能已经被迁移到了目标节点,源节点将向客户端返回一个ask错误,指引客户端转向正在导入槽的目标节点,并再次发送之前想要执行的命令;
6、复制与故障转移
引用《redis设计与实现》