zoukankan      html  css  js  c++  java
  • 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从节点作为主节点

      

  • 相关阅读:
    HDU 6125
    HDU 6129
    Super Jumping! Jumping! Jumping!
    HDU 1040 As Easy As A+B(排序)
    VS2015转VS2008
    HDU 1329 Hanoi Tower Troubles Again!(乱搞)
    HDU 1062 Text Reverse(字符串)
    HDU 1013 Digital Roots(字符串)
    HDU 1003 Max Sum(动态规划)
    HDU 1203 I NEED A OFFER!(01背包)
  • 原文地址:https://www.cnblogs.com/Miracle-boy/p/11704191.html
Copyright © 2011-2022 走看看