redis 集群架构
redis 集群的架构细节:
所有 redis 节点彼此互联(PING-PONG 机制),内部使用二进制协议优化传输速度和带宽;
节点的 fail 是通过集群中超过半数的节点检测失效时才失败;
redis-cluster 在设计的时候考虑到了去中心化,集群中的每个节点都保存各自的数据。每个节点和集群的其他节点相连。只需要连接其中任一个节点,就可以获取其他节点的数据;
redis cluster 默认分配了 16384 个slot,当我们set一个key时,会用CRC16算法来取模得到所属的slot,然后将这个key分到哈希槽区间的节点上,具体算法就是:CRC16(key)%16384。
这种结构很容易添加或者删除节点. 比如如果我想新添加个节点D, 我需要从节点 A, B, C中得部分槽到D上. 如果我像移除节点A,需要将A中得槽移到B和C节点上,然后将没有任何槽的A节点从集群中移除即可. 由于从一个节点将哈希槽移动到另一个节点并不会停止服务,所以无论添加删除或者改变某个节点的哈希槽的数量都不会造成集群不可用的状态.
Redis 集群会把数据存在一个master节点,然后在这个master和其对应的salve之间进行数据同步。当读取数据时,也根据一致性哈希算法到对应的master节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的salve节点,充当master。