1. 数据存储

在fdfs传一份文件时,通常会返回下面的一串字符,这包含了该文件在服务器端一些存储信息

M00/00/00/wKg4C1tFmTWAFPKBAADdeFFxlXA240.png

下面解释一下这串东西都是什么:


group1:

是storage的组号,一个fastdfs集群可以有多个组,一个组内可以有多个storage节点(备份容灾)
M00: Mxx:xx为十六进制字符,表示存放的基路径(base path)序号。如果存放的base path只有一个,那固定就是M00,这样FastDFS支持多个磁盘(base path),所以要通过Mxx来区分,其中xx为磁盘的序号,基于0。 数据就可以根据 store_path0=/data/fastdfs/storage # 如果store_path0没有就去找base_path存数据,两个是一样的,所有固定为M00
/00/01/: store_path0=/data/fastdfs/storage配置的目录下的目录,用于存放上传的数据
  1. store_path0下都是些什么?


所有的文件都在这些目录下的一层目录,存储着上传的所有数据,其中/data/sync目录下存放着fastdfs的binlog日志

  1. 支持多磁盘

Fastdfs支持多磁盘存储,配置方法如下:
首先修改storage.conf

store_path_count=2
store_path0=磁盘1路径
store_path1=磁盘2路径

然后修改mod_fastdfs.conf(与上边保持一致)

store_path_count=2
store_path0=磁盘1路径
store_path1=磁盘2路径

2. 同步记录

2.1 数据同步过程

2.1.1 Storage Server中有两类用于同步的线程:

  1. Storage Server会为文件系统中的每一个Tracker启动一个线程
    1)用于与Tracker之间通信。
    2)实现心跳反馈机制,默认每30秒发送向Tracker发送一次心跳包,包含同组内其他Storage信息。
    3)通过这一线程从Tracker中获取Storage列表信息

  2. Storage会为同组的每一个Storage开启一个线程
    1)从Tracer获取到同组内其他Storage Server信息,根据binlog向这些Storage Server同步数据(阻塞方式)。
    2)如果组内有三个Storage,那么每个Storage都会启动两个线程用于向其他Storage同步数据。
    3)打开/data/sync的mark文件,读取目标Storage_Server_IP.mark文件,获取对应的binlog文件以及同步的offset。
    4)在对应的binlog文件中找到offset对应的文件操作,如果这已操作是源操作(CADT),则将操作将数据向外同步。同步完成后更新mark文件的offset值

2.1.2 Storage Server同步相关目录、文件:

当Storaged server启动时会创建一个 base_path/data/sync 同步目录,该目录中的文件都是和同组内的其它 Storaged server之间的同步信息。

  1. mark文件
    例如下图是同组内一个新加入storage后产生的mark文件。

    说明:
    1)这个storage server对新入组的Storage Server发起了数据同步
    2)数据同步的动作(增加,删除)依据binlog.000中的记录
    3)同步的进度是binlog.000的2204(offset)
    4)扫描了38行
    5)同步了38行所记录的操作

    # 目录下结构
    192.168.1.2_33450.mark 192.168.1.3_33450.mark binlog.000 binlog.index binlog.index # 记录当前使用的Binlog文件序号,如为10,则表示使用binlog.010
    binlog.100 # 真实地Binlog文件
    192.168.1.2_33450.mark # 同步状态文件,记录本机到192.168.1.2_33450的同步状态
  2. binlog文件

    Binlog文件记录文件上传、删除等更新操作(对文件的操作,而不是文件的内容),是数据同步的依据。

    下面看看binlog到底记录些什么?

    说明:

        其中的每一条记录都是使用空格符分成三个字段:
    
            第一个字段: 表示文件upload时间戳 如:1529376942
    第二个字段: 表 示文件执行操作,值为:
    C :表示源创建
    c:表示副本
    A:表示源追加
    a:表示副本追加
    D:表示源删除
    d:表示副本
    T:表示源Truncate
    t:表示副本Trunca
    其中源表示客户端直接操作的那个Storage即为源,其他的Storage都为副本
    第三个字段为存储文件信息描述

    当上传一个文件后,binlog文件多了这么一行1531384360 C M00/00/00/wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh,记录了在这个Storage Server上上传了一个文件;文件的存储名为 wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh,C表示源创建,这时这个文件会向同组内的其他Storage Server同步该文件。 delete 亦是如此!

    root@ubuntu03:~/fastdfs# fdfs_upload_file /etc/fdfs/client.conf ./stop.sh
    group2/M00/00/00/wKg4C1tHEiiAWR8JAAAGkHPTQkQ1899.sh

FastDFS数据存储的更多相关文章

  1. (转)FastDFS文件存储

    一.FastDFS介绍 FastDFS开源地址:https://github.com/happyfish100 参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件系统 个人封装 ...

  2. Kooboo CMS技术文档之三:切换数据存储方式

    切换数据存储方式包括以下几种: 将文本内容存储在SqlServer.MySQL.MongoDB等数据库中 将站点配置信息存储在数据库中 将后台用户信息存储在数据库中 将会员信息存储在数据库中 将图片. ...

  3. Android之数据存储的五种方法

    1.Android数据存储的五种方法 (1)SharedPreferences数据存储 详情介绍:http://www.cnblogs.com/zhangmiao14/p/6201900.html 优 ...

  4. Android之网络数据存储

    一.网络保存数据介绍 可以使用网络来保存数据,在需要的时候从网络上获取数据,进而显示在App中. 用网络保存数据的方法有很多种,对于不同的网络数据采用不同的上传与获取方法. 本文利用LeanCloud ...

  5. Android之文件数据存储

    一.文件保存数据介绍 Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的.文件可用来存放大量数据,如文本.图 ...

  6. Android之SharedPreferences数据存储

    一.SharedPreferences保存数据介绍 如果有想要保存的相对较小键值集合,应使用SharedPreferences API.SharedPreferences对象指向包含键值对的文件并提供 ...

  7. Atitit 数据存储视图的最佳实际best practice attilax总结

    Atitit 数据存储视图的最佳实际best practice attilax总结 1.1. 视图优点:可读性的提升1 1.2. 结论  本着可读性优先于性能的原则,面向人类编程优先于面向机器编程,应 ...

  8. Android数据存储之SQLCipher数据库加密

    前言: 最近研究了Android Sqlite数据库(文章地址:Android数据存储之Sqlite的介绍及使用)以及ContentProvider程序间数据共享(Android探索之ContentP ...

  9. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

随机推荐

  1. mysql数据库的理解

    1.索引结构原理: 普通的Btree(binary search tree)就是二叉树,如下图 B+ Tree索引类型则是二叉树的升级版,每个节点存的是 <num ,最后存排序的ROWID Ha ...

  2. jmeter多sql查询

    背景:实现多条sql语句,取多个值的情况 步骤:1.JDBC Connection Configuration配置添加?allowMultiQueries=true 2.增加sql语句 ,查询或修改语 ...

  3. Java 公平锁与非公平锁学习研究

    最近学习研究了一下Java中关于公平锁与非公平锁的底层实现原理,总结了一下. 首先呢,通过其字面意思,公平与非公平的评判标准就是付出与收获成正比(和社会中的含义差不多一个意思).放到程序中,尤其是 在 ...

  4. spring suite tool 添加namespace时只有bean一个

    在eclipse的windows->Preferences->Spring->Beans Support->Namespaces 在此记录此问题.

  5. eclipse 安装MyBatis插件 -- 官网直接拖动“安装”

    拖动“安装” http://marketplace.eclipse.org/marketplace-client-intro?mpc_install=2947754

  6. Exp1 PC平台逆向破解 20164311

    实验目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getSh ...

  7. shell脚本实现telnet测试服务端口

    备注,使用方法:当前目录下要存在需要测试的地址端口的文件ip.txt,例子:cat ip.txt141.12.65.17 7500 #!/bin/bashcur_dir=$(pwd)ipfile=$c ...

  8. zabbix3.0.4 探索主机Discovery自动发现agent主机和zabbix-agent自动注册详细图文教程

    Zabbix 自动发现(Discovery)功能使用 随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添 ...

  9. 快乐!ajax入门(1)

    今天试着默写ajax时出现了神秘的问题,出现如图所示的错误: 百度了一下,说是跨源问题,我以为放在同一个文件夹不也是同源嘛!结果打扰了,属实是弟弟,协议,域名,端口相同的算同源,其他的不是!!! 最后 ...

  10. fibonacci数列-斐波那契数列-python编程

    未完待续~ 了解fibonacci数列: 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610 ...