Redis:Redis主从复制原理

Redis主从复制原理

总共分为如下几个部分来说

1.如何配置主从复制

2.原理

一、如何配置主从复制

首先得到主Redis的地址,端口号。

在从节点的配置文件中添加slaveof 配置  例如 slaveof 192.168.1.105 6379

格式为slaveof 地址 端口号

同时需要在主节点中将bind 127.0.0.1配置注释掉

二、原理

  1)数据一致性的问题

    因为是分布式,所以必然存在数据一致性的问题,那么redis的数据一致性是如何做的呢

               首先,redis有三种复制方式

               1.全量复制

     2.增量复制

     3.无磁盘复制

               

               首先,全量复制(当新增从节点的时候使用)

                

                从节点发送Sync命令(同步命令),主节点接受到该命令后,会执行bgsave(创建子进程来写快照),然后将快照文件传给从节点,从节点再读取快照即可。

                注意:即使主节点禁用了RDB,也无法组织此过程生成快照文件,而且由于网络或者其他原因,同步数据可能会存在延迟

                增量复制

     

                增量复制实现的主要方式就是主节点将命令直接传给从节点。如果从节点宕机了,会创建一个叫backlog的文件,里面会保存上一次读取数据的偏移量(offset),可以从该位置继续同步主节点的数据。

               

     无磁盘复制

     在上面的方式中,由于需要fork子进程生成rdb快照,所以避免不了有一些性能的损耗。在redis 2.8版本时候,出现了无磁盘复制的方式

               可以在配置中打开此配置

    

              这个方式也是创建快照,但是区别在于是直接传输快照的数据,也就是不将快照写入磁盘中再传输,而是直接将快照数据传输给从节点。

  2)选主

       当主节点出现问题之后,就需要重新选主,redis是通过哨兵(sentinel)机制来完成的

  哨兵具有两个功能,1.检测master和slave是否正常  2.当master出现问题时,重新选举master

       那么如此就会引出一个问题,如果哨兵也挂了怎么办.

  所以,哨兵也支持集群,而且多个哨兵之间相互可以监控,以数据的一致性来完成感知。

  例如,主节点挂了,两个哨兵都感知到了,那么这两个哨兵都是正常的。

  哨兵中也有队长,通过raft一致性算法(协议)来选举,然后通过队长来决定哪个redis从节点作为主节点

  

原文地址:https://www.cnblogs.com/Miracle-boy/p/11704191.html