zoukankan      html  css  js  c++  java
  • fastdfs的同步原理(一)

     FastDFS文件同步采用binlog异步复制方式。storage server使用binlog文件记录文件上传、删除等操作,根据binlog进行文件同步。binlog中只记录文件ID和操作,不记录文件内容。下面给出几行binlog文件内容示例:

    1572660675 C M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

    1572660827 c M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

    1572660911 D M00/00/00/oYYBAF285cOIHiVCAACI-7zX1qUAAAAVgAACC8AAIkT490.txt

    1572660967 d M00/00/00/oYYBAF285luIK8jCAAAJeheau6AAAAAVgABI-cAAAmS021.xml

      从上面可以看到,binlog文件有三列,依次为时间戳、操作类型和文件ID(不带group名称)。

      文件操作类型采用单个字母编码,其中源头操作用大写字母表示,被同步的操作为对应的小写字母。文件操作字母含义如下:

        C :上传文件(upload)

        D:删除文件(delete)

        A:追加文件(append)

        M:部分文件更新(modify)

        U:整个文件更新(set metadata)

        T:截断文件(truncate)

        L:创建符号链接(文件去重功能,相同内容只保存一份)

      

      同组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行。文件同步只在同组内的storage server之间进行,采用push方式,即源头服务器同步给本组的其他存储服务器。对于同组的其他storage server,一台storage server分别启动一个线程进行文件同步。

      文件同步采用增量方式,记录已同步的位置到mark文件中。mark文件存放路径为 $base_path/data/sync/。mark文件内容示例:

    binlog_index=3

    binlog_offset=382

    need_sync_old=1

    sync_old_done=1

    until_timestamp=1571976211

    scan_row_count=2033425

    sync_row_count=2033417

      采用binlog的异步复制方式,必然存在同步延迟的问题,比如mysql的主从数据同步

  • 相关阅读:
    学习完java基础,总结的一些东西,希望大佬们茶余饭后看看,如有错误还请指正
    JDK和JRE的简单概述
    堆排序
    mybatis的一级缓存
    重用执行器和批处理执行器
    JDBC statement和mybatis mapper statement
    深入浅出Mybatis技术原理与实战(杨开振)(带详细书签) PDF 下载 高清 完整版+源码
    mybatis执行器1
    mybatis执行器1---简单描述JDBC
    JDBC不再需要Class.forName()来显式加载jdbc驱动
  • 原文地址:https://www.cnblogs.com/llddhh/p/15655096.html
Copyright © 2011-2022 走看看