redis集群的原理

因之前的工作有涉及到redis三主三从的应用,所以简单的记录一下集群背后的原理,因为目前的工作并无搭建集群的需求,故不做实现。

redis集群是redis提供的分布式数据库方案,是通过分片来进行数据共享,并提供复制和故障转移的功能。

这里需要理清的概念是节点与槽,redis集群A里面有三个结点a,b,c,那么在集群里面a,b,c并不是都记录这数据的全集,而已各自记录着数据全集的一部分,当a,b,c里面的数据综合起来才是所有数据的总和。那a,b,c是根据什么规则去划分记录数据的片段呢?就是根据槽来划分。

一个Redis集群是由多个槽组成,当链接各个节点时可以通过

cluster meet ip port

命令来进行集群链接

在链接之前必须打开配置文件里面的集群允许选项

cluster-enable yes

这里写图片描述

当集群创建之后,其内部结构也将会发生变化,主要是体现在每个结点的内部不再只是单独只记录自身的状态,还要记录整个集群其他结点的状态。

槽指派:集群里面的结点通过槽来决定数据由哪个结点进行记录。集群里面的槽总共有16384个,当所有槽被节点所分配完的时候,该集群才是正式的上线状态,当存入一条记录时,redis会根据一个算法来判断这个记录的key会击中哪一个槽,然后再判断该槽目前由哪个结点进行复制,最后让这个结点来存储该条记录。

=算法(key)
槽->结点

分配槽的命令

cluster addslots <slot> [slot ....]

当分配完槽之后,集群中的各个结点将会把自己的信息发布出去,最终的结果是各个结点都可以知道集群中其他结点所复制的槽数据
这里写图片描述

集群中的故障转移也是通过复制(即主从)来实现的,如果主节点没有对应的从结点的话,那么当他掉线后,将无法存取他所复制的槽对应的记录。

可以通过以下命令来设置从节点

cluster replicate <node_id>

当一台主节点掉线时,集群中其他的主节点将会通过投票的形式在掉线主结点的从结点中选举一台从节点来代替原先的主节点,并更改其他从节点slave的主节点为新的主节点。

这里的选举过程很类似哨兵选举,其实选举的算法是跟哨兵模式选举的算法是相同的,只不过在集群里面其他的主服务器就是哨兵,可以决定哪个从服务器可以来继承主机。

之后,原主机的恢复也是跟哨兵模式一样变成一个从服务器去复制新主服务器的内容。

经过对复制,哨兵,集群的了解后可以得出这么一个结论,对于多结点redis来说
如果只是需要做热备或读写分离,那么使用主从即可
如果需要做故障转移,那么需要使用哨兵模式
如果数据量过大,要减轻某个服务器压力,那么就需要使用集群模式
以上,对redis学习告一段落,推荐两本好书
《redis实战》:主要是入门与开发
《redis设计与实现》:主要是深入理解redis工作原理,值得一读

猜你喜欢

转载自blog.csdn.net/hayre/article/details/78822979