Redis深入学习(二)

151 阅读2分钟

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战

五、主从复制(高可用)

  • 过程:

    • 这一切都是刚刚连上主库,发送slaveof的初始化操作

      **一种总结:**从库发送slaveof给主库,判断自己是否是有runid,如果没有那么就是第一次同步,会发送PSYNC ? -1指令,主库会把快照发给从库,从库进行复制,并记录offset和runid。如果不是第一次复制(主库比较从库发过来的runid和自己的runid是否匹配),那么从库需要重新发送一个指令PSYNC RUNID OFFSET给主库,主库根据offset,发送快照给从库。

      **补充总结:**配置好slave后,slave与master建立连接,然后发送sync命令. 无论是第一次连接还是重新连接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存. 后台进程完成写文件后,master就发送文件给slave,slave将文件保存到硬盘上,再加载到内存中, 接着master就会把缓存的命令转发给slave,后续master将收到的写命令发送给slave. 如果master同时收到多个slave发来的同步连接命令,master只会启动一个进程来写数据库镜像, 然后发送给所有的slave

      **再次总结:**可以总结为下面三个过程:

      • 同步快照阶段:Master创建并发送快照给Slave,Slave再入快照并解析。Master同时将此阶段产生的新的命令写入到积压缓冲区中。----区分第几次
      • 同步写缓冲阶段:Master向Slave同步存储在缓冲区的写操作命令。---主库在想从库发送快照的时候,发生的写操作,就进入缓冲区。
      • 同步增量阶段:Master向SLave同步写操作命令。
    • 正常每一次:

      主库有了写操作,那么就会主动推送给所有从库。

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

六、哨兵模式(高可用,和主从复制是一伙的)

哨兵有多个,一般就是几个redis几个哨兵,他监控所有的redis服务器(在sentinel.conf中配置),每次ping一下各个服务器,如果超过半数哨兵都判断不ok,那么就投票出来换一个redis'做主库。