fastDFS同步问题讨论
一、文件同步延迟问题
前面也讲过fastDFS同组内storage server数据是同步的, Storage server中由专门的线程根据binlog进行文件同步。为了最大程度地避免相互影响以及出于系统简洁性考虑,Storage server对组内除自己以外的每台服务器都会启动一个线程来进行文件同步。文件同步采用增量同步方式,系统记录已同步的位置(binlog文件偏移量)到标识文件中。标识文件名格式:{dest storage IP}_{port}.mark,例如:192.168.1.14_23000.mark。Storage server采用binlog文件记录文件上传、删除等更新操作。binlog中只记录文件名,不记录文件内容。文件同步只在同组内的Storage server之间进行,采用push方式,即源头服务器同步给目标服务器。只有源头数据才需要同步,备份数据并不需要再次同步,否则就构成环路了。有个例外,就是新增加一台Storage server时,由已有的一台Storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。客户端将一个文件上传到一台Storage server后,文件上传工作就结束了。由Storage server根据binlog中的上传记录将这个文件同步到同组的其他Storage server。这样的文件同步方式是异步方式,异步方式带来了文件同步延迟的问题。新上传文件后,在尚未被同步过去的Storage server上访问该文件,会出现找不到文件的现象
二、FastDFS对文件同步延迟问题的解决方案
需要说明的是,一个组包含的Storage server不是通过配置文件设定的,而是通过Tracker server获取到的。客户端和Storage server主动连接Tracker server。Storage server主动向Tracker server报告其状态信息,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。Storage server会连接集群中所有的Tracker server,向他们报告自己的状态。Storage server启动一个单独的线程来完成对一台Tracker server的连接和定时报告。另外,每台storage server都会定时向tracker server报告它向同组的其他storage server同步到的文件时间戳。当tracker server收到一台storage server的文件同步报告后,它会依次找出该组内各个storage server被同步到的文件时间戳最小值,作为storage的一个属性记录到内存中。根据上述情况fastDFS提供下面简单解决方案:
1、和文件更新一样,优先选择源Storage server下载文件即可。这可以在Tracker server的配置文件中设置,对应的参数名为download_server。
2、选择Storage server的方法是轮流选择(round-robin)。当Client询问Tracker server有哪些Storage server可以下载指定文件时,Tracker server返回满足如下四个条件之一的Storage server:
a、该文件上传到的源Storage server,文件直接上传到该服务器上的;
b、文件创建时间戳 < Storage server被同步到的文件时间戳,这意味着当前文件已经被同步过来了;
c、文件创建时间戳=Storage server被同步到的文件时间戳,且(当前时间—文件创建时间戳) > 一个文件同步完成需要的最大时间(如5分钟);
d、(当前时间—文件创建时间戳) > 文件同步延迟阈值,比如我们把阈值设置为1天,表示文件同步在一天内肯定可以完成。
三、停止fastDFS服务
直接kill即可让server进程正常退出,可以使用killall命令,例如:
killall fdfs_trackerd
killall fdfs_storaged
也可以使用FastDFS自带的stop.sh脚本,如:
/usr/local/bin/stop.sh /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
stop.sh只会停止命令行(包括参数)完全相同的进程。
但需要注意的是千万不要使用-9参数强杀,否则可能会导致binlog数据丢失的问题。
四、fastDFS数据清空重整
停止storage server和tracker server,删除base_path下的data子目录即可。
fastDFS同步问题讨论相关推荐
- Windows 文件同步方案讨论
在日常运维工作中,经常会遇到这样的情况:我们需要在无人值守的情况下完成文件.文件夹的同步过程,已实现周期性的备份,避免单点故障.本研究实现了本地Windows主机与远程Windows主机,本地Wind ...
- 帧同步_帧同步和状态同步该怎么选(上)
这是一篇拖延了2年多的文章-2017年10月份开始写的,直到这次过年才写完... 前言 随着王者荣耀的崛起,使用帧同步(Lockstep)的游戏也越来越多,关于帧同步和状态同步的讨论争论也有不少,那么 ...
- Linux FastDFS 分布式文件系统安装
Linux FastDFS 分布式文件系统安装 2013 年 3 月 11 日 – 09:21 | 930 views | 收藏 (No Ratings Yet) FastDFS是一款类Google ...
- fastdfs添加storage节点
前景提要: 工作需要在已有fastdfs的情况下,给fastdfs增加一个storage 在新的机器上安装fastdfs 下面为简单安装,详细安装参考 注意,安装版本要和老的版本一至,不然会报错,错误 ...
- 分布式文件系统FastDFS 架构剖析及配置优化
FastDFS概述 FastDFS是一款开源的轻量级分布式文件系统 – 纯C实现,支持Linux.FreeBSD等UNIX系统 – 类google FS,不是通用的文件系统,只能通过专有API访问,目 ...
- 公司各个阶段 CTO 需要做什么?(下篇)
假设一个公司发展有以下几个阶段: 0 :创始阶段: 0.5 :有产品但无管理阶段: 1 :经过 1年的发展初步稳定的阶段: 1+ :稳步发展阶段. 上一篇文章中,我们聊了公司在初创阶段,CTO 需要做 ...
- Node - 异步IO和事件循环
前言 学习Node就绕不开异步IO, 异步IO又与事件循环息息相关, 而关于这一块一直没有仔细去了解整理过, 刚好最近在做项目的时候, 有了一些思考就记录了下来, 希望能尽量将这一块的知识整理清楚, ...
- Java多线程协作(wait、notify、 notifyAll)
http://sunjun041640.blog.163.com/blog/static/25626832201041411210560/ Java监视器支持两种线程:互斥和 协作. 前面我们介绍了采 ...
- 不同系统之间数据的交互
最近公司的项目要实现几个子系统的数据同步,讨论了几种方式,现记录如下.背景介绍: 子系统 职责 MarketResearch 实时更新基金产品价格 ...
最新文章
- 【DP】错排问题(ybtoj DP-1-1)
- C++类中成员变量的初始化总结
- 商务专业考计算机二级,计算机二级ms考什么
- TComboBox动态创建
- 基于MSBuild的xnb资源预生成机制
- x=min(x, y)
- noip2009 普及组
- User Experience Questionnaire UEQ
- 安装step7 v5.6报错的解决方法
- linux系统测网速工具
- Python之ascii转中文
- 学测绘和计算机,测绘工程就业方向与前景 女生学测绘好找工作吗
- 独享还是共享,你选择哪一种锁?(独享锁/共享锁)
- Cygwin、Msys、MinGW、Msys2的区别与联系
- 语音识别数据集及性能评测指标WER
- RTOS内功修炼记(十) | 深度解析RTOS内核上下文切换机制
- 鸟哥的Linux私房菜基础篇笔记--8
- 孤岛惊魂5 for Android,孤岛惊魂5手机版
- Pytorch 之修改Tensor部分值
- 服务器pe安装win7系统安装教程,U盘PE安装Win7安装版|U盘安装win7原版教程
热门文章
- configparser模块
- DDD China Conference 2017
- python无师自通配套资源_Python Tkinter Pack布局管理器(超级详细,看了无师自通)...
- unity android模糊ios清晰,Unity NGUI UI 在iOS端的锯齿、模糊、颗粒感问题
- java排队叫号_java多线程(4)模拟排队叫号程序,不能出现交替执行的结果
- python方法调用名字不一样_python中调用父类同名方法
- alt+数字 符号大全_【BIM工具箱】Revit中特殊符号大全和输入技巧
- mysql分组函数按月份差,学习猿地-mysql如何按月份分组查询
- apk可以解压再复制到手机吗_不行了,这个打通手机和电脑的神器,必须得安利给你们...
- python判断素数的函数_Python素数prime函数练习_Python源码实操