• 06.深入学习redis replication的完整流程和原理


    一、replication的完整流程


    1. slave配置master ip和port
    # slaveof <masterip> <masterport>
    slaveof 127.0.0.1 6379
    
    1. slave node内部有个定时任务,每秒检查是否有新的master node要连接和复制,如果发现,就跟master node建立socket网络连接
    2. slave node发送ping命令给master node。如果master设置了requirepass,那么salve node必须发送masterauth的口令过去进行认证
    3. master node第一次执行全量复制,将所有数据发给slave node
    4. master node后续持续将写命令,异步复制给slave node


    二、全量复制


    1. master执行bgsave,在本地生成一份rdb快照文件
    2. master node将rdb快照文件发送给salve node,如果rdb复制时间超过60秒(repl-timeout),那么slave node就会认为复制失败,可以适当调节大这个参数
    3. master node在生成rdb时,会将所有新的写命令缓存在内存中,在salve node保存了rdb之后,再将新的写命令复制给salve node
    4. client-output-buffer-limit slave 256MB 64MB 60,如果在复制期间,内存缓冲区持续消耗超过64MB,或者一次性超过256MB,那么停止复制,复制失败
    5. slave node接收到rdb之后,清空自己的旧数据,然后重新加载rdb到自己的内存中,同时基于旧的数据版本对外提供服务
    6. 如果slave node开启了AOF,那么会立即执行BGREWRITEAOF,重写AOF

    注意:rdb生成、rdb通过网络拷贝、slave旧数据的清理、slave aof rewrite,很耗费时间


    三、增量复制


    1. 如果全量复制过程中,master-slave网络连接断掉,那么salve重新连接master时,会触发增量复制
    2. master直接从自己的backlog中获取部分丢失的数据,发送给slave node,默认backlog就是1MB
    3. msater就是根据slave发送的psync中的offset来从backlog中获取数据的


    四、心跳


    主从节点互相都会发送heartbeat信息
    master默认每隔10秒发送一次heartbeat,salve node每隔1秒发送一个heartbeat


    相关名词解释


    • offset

    master和slave都会在自身不断累加offset
    slave每秒都会上报自己的offset给master,同时master也会保存每个slave的offset

    作用:1)用在全量复制,2)可以彼此了解数据不一致的情况

    • backlog

    master node有一个backlog,默认是1MB大小。master给slave复制数据时,也会将数据在backlog中同步写一份。主要是用来做全量复制中断候的增量复制的。

    • master run_id

    执行info server命令可以看到run_id。

    如果master重启,容易导致主从结点数据不一致的情况,重启后run_id会重新生成,那么slave应该根据变化的run_id知道master有变化,需要做全量复制。
    如果需要不更改run_id重启redis,可以使用redis-cli debug reload命令。

  • 相关阅读:
    论如何让您的网站更好看?
    阿里云解决方案架构师张平:云原生数字化安全生产的体系建设
    数据湖架构及概念简介
    重磅发布!阿里云全链路数据湖开发治理解决方案
    windows 中 redis 和 telent
    使用std::move(*pointer)有意义吗?
    Ubuntu命令安装/添加拼音输入法
    解决Linux下解压zip文件乱码
    CommonJS规范
    js 几种 for 循环的区别
  • 原文地址:https://www.cnblogs.com/mrmirror/p/13584707.html
Copyright © 2020-2023  润新知