主从复制
完全是在从节点配置的,有3种方式
(1)配置文件
在从服务器的配置文件中加入:slaveof <masterip> <masterport>
(2)启动命令
redis-server启动命令后加入 --slaveof <masterip> <masterport>
(3)客户端命令
Redis服务器启动后,直接通过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。
想要断开复制可以用slaveof no one,此时从节点不再接受主节点新的变化。
实现原理
经过上面的slaveof之后,异步开始主从复制。
1.从节点创建socket连接,主节点接受连接。
2.从节点发送ping命令,如果主节点返回pong,则继续。
3.连接建立好后,从节点向主节点发送psync命令,开始同步。这个阶段,主从节点开始互为客户端,主节点也需要主动向从节点发送请求(如推送缓冲区中的写命令)。
4.主从节点维持着心跳机制
复制策略
全量复制
无法进行部分复制时,步骤如下:
1.主节点执行bgsave,生成RDB文件,并在复制缓冲区记录从现在开始执行的所有命令。
2.将RDB文件发送给从节点,从节点首先清楚自己的旧数据,然后载入文件。
3.主节点继续将复制缓冲区的写命令发给从节点。
部分复制
有三个关键点:复制偏移量、复制缓冲区、服务器运行ID。
1.redis启动时会生成一个随机runId,主从复制时,从节点会将它之前保存的runId发给主节点,主节点看是否是自己的,不是则全量复制。
2.主从节点都会保存一个复制偏移量offset,发送数据的时候,发送偏移量相差的部分。
3.主节点有一个复制缓冲区,这是一个队列,保存这主节点最近执行的写命令,如果主从节点offset相差的数据,已经不全在缓冲区里了,则执行全量复制。
这里不管是几个从节点,主节点都只有一个复制缓冲区。
哨兵
由哨兵节点和数据节点组成
哨兵架构图,来源https://www.cnblogs.com/kismetv/p/9609938.html
每个哨兵节点,只需要配置监控主节点,便可以自动发现其他的哨兵节点和从节点。
最好是基数个,便于投票抉择
哨兵领导者选举流程:
主节点下线时,开始选取哨兵领导者,监视该主节点的所有哨兵都有可能被选为领导者,策略是先到先得,谁先申请就是谁。
故障转移新主节点选举流程:
1.首先过滤调不健康的从节点
2.若指定了优先级,选择优先级最高的
3.若没有选择复制偏移量最大的
4.若仍无法选择,选择runId最小的
集群
Redis 3.0后开始引入的分布式存储方案。
集群搭建
1.启动节点
2.节点握手
3.分配槽
4.指定主从关系,此时用cluster replicate命令;参数使用节点id
槽的概念-来源于带虚拟节点的一致性哈希分区思想
在Redis集群中,槽的数量为16384
那么redis数据映射过程是:
1.对key计算hash
2.根据hash值计算数据属于哪个槽
3.根据槽与节点的映射关系,找到对应的节点
集群的故障转移跟哨兵类似,但它是由主节点投票选出哪个从节点成为新的主节点。










网友评论