美文网首页
reids replication原理

reids replication原理

作者: 喧嚣城外 | 来源:发表于2019-03-14 21:29 被阅读0次
    完整复制流程

    (1)slave node 启动,仅仅保存master node的信息,包括master node的host和ip,但是复制还没有开始。master host和ip从redis.conf里边配置的。
    (2)slave node内部有定时任务,每秒检查是否有新的master node要连接和复制,如果发现就和master node建立socket网络连接。
    (3)slave node发送ping命令给master node。
    (4)口令认证,如果master设置了requirepas,那么salve node必须发送masterauth的口令过去进行认证。
    (5)master node第一次执行全量复制,将所有数据发送给slave node。
    (6)master node后续持续将写命令,异步复制给slave node。


    数据同步相关核心机制

    第一次slave连接master的时候,执行全量复制,这个过程中存在一些细节机制。

    (1)master和slave都会维护一个offset

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

    (2)backlog

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

    (3)master run id

    info server,可以看到master run id
    如果根据host+ip定位master node,是不靠谱的,如果master node重启或者数据出现变化,那么slave node应该根据不同的run id区分,run id 不同就做全量复制。
    如果需要不更改run id重启redis,可以使用redis-cli debug reload命令。


    全量复制
    • master 执行bgsave,在本地生成一份rdb快照文件。
    • master node将rdb快照文件发送给salve node,如果rdb复制时间超过60秒(repl-timeout),那么slave node就会认为复制失败,可以适当调节大这个参数。
    • 对于千兆网卡,一般每秒传输100MB,6G文件,很可能超过60秒。
    • master node在生成rdb时,会将所有新的写命令缓存到内存中,在salve node中保存了rdb之后,再将新写的命令复制给salve node。
    • client-output-buffer-limit slave 256MB 64MB 60,如果在复制期间,内存缓冲区持续消耗超过64MB,或者一次性超过256MB,那么停止复制,复制失败。
    • slave node接收到rdb之后,清理自己的旧数据,然后重新加载rdb到自己的内存中,同时基于旧数据版本对外提供服务。
    • 如果slave node开启了AOF,那么会立即执行重写AOF
    rdb生成,rdb通过网络拷贝,slave旧数据的清理,slave aof rewrite,很耗费时间,如果复制的数据量在4G-6G之间,那么很可能全量复制时间消耗到1分半到2分钟。

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


      maste run id的作用.png
    复制的完整的基本流程.png

    相关文章

      网友评论

          本文标题:reids replication原理

          本文链接:https://www.haomeiwen.com/subject/zbgcmqtx.html