docker搭建redis主从复制流程机制篇

2020-02-26 23:39 PHP京城客栈



主从复制流程原理:


    主从复制的原理以及过程必须明白,这样我们才会知道为什么会出现上篇文章出现的那么多问题。

    

    主从复制过程大体可以分为三个阶段,连接建立阶段,数据同步阶段,命令传播阶段。


在从节点执行 slaveof 命令后,复制过程便开始运作,如下图👇



从图中可以看出复制过程大致分为六个过程,当然主从日志也可以看到这些流程的运行机制。下面看是每个流程进行原理的解析,大家不要感觉枯燥,知道了运行机制的原理,还怕不会敲那几个命令么?害怕出现异常不知从何入手?配置很简单,网上文章数不胜数,但是一旦出现问题大多数还是不知所措,静下心慢慢来,我也是小白,我们一起聊技术❤️


  1. 保存主节点信息(master)

    从节点执行slaveof  host port后 Redis日志就会出现如下内容👇


  2. 主从建立socket连接

    从节点(slave)内部通过每秒运行的定时任务维护复制相关的逻辑,当定时任务发现存在新的主节点之后,就会尝试与该节点建立网络连接


    从节点与主节点建立网络连接


    从节点会建立一个 socket 套接字,从节点建立了一个端口 51234的套接字,专门用于接受主节点发送的复制命令,从节点连接成功后打印如下日志👇

     

    如果从节点无法建立连接,定时任务会无限重试直到连接成功或者执行slaveof  no  one命令取消复制操作

  3. 发送 ping 命令。

连接建立成功后从节点发送 ping 请求进行首次通信,ping 请求主要目的如下:

  •   检测主从之间网络套接字是否可用。

  •   检测主节点当前是否可接受处理命令。

  •   如果发送 ping 命令后,从节点没有收到主节点的 pong 回复或者超时,比       

  • 如网络超时或者主节点正在阻塞无法响应命令,从节点会断开复制连接,下次定时任务会发起重连。



从节点发送的 ping 命令成功返回,Redis 打印如下日志,并继续后续复制流程:


    4. 权限验证

         如果主节点设置了requirepass 参数,则需要密码验证,从节点必须配置masterauth 参数保证与主节点相同的密码才可以验证通过,如果验证失败复制操作将终止,从节点在重现发起复制流程。


    5. 同步数据集

         主从复制连接正常通信后,对于首次建立复制的场景,主节点会把持有的数据全部发给从节点,这部分操作是最耗时的操作!!!


    6. 命令持续复制

         当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来主节点会持续地把写命令发送给从节点,保证主从数据的一致性



下个文章讲解 全量复制 和 增量复制 机制相关原理❤️ 


疫情期间,愿大家百毒不侵❤️

本文章转载自公众号:AsiaEngineer88

首页 - PHP 相关的更多文章: