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的主从数据同步

  • 相关阅读:
    递归调用简单的讲解
    有关杭电acm问题的分类
    【jquery】切换标题与内容/点击后动态切换当前状态
    将数组某键值抽出作为新数组
    table表格制作
    如何导入大sql文件到mysql数据库
    二维数组按照某一键值进行排序
    利用PHP输出某一目录所有文件
    php结合js动态获取空间时间
    ie6不支持minheight的解决方案
  • 原文地址:https://www.cnblogs.com/llddhh/p/15655096.html
Copyright © 2011-2022 走看看