FastDFS集群部署和同步机制

2023-11-08

如何选择tracker?

当集群中有多个tracker server时,由于tracker之间是对等的关系,客户端在upload文件时可以任意选择一个tracker。

如何选择storage?

当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:

  1. Round robin,在group内的所有storage间轮询;

  2. First server ordered by ip,ip最小的storage;

  3. First server ordered by priority,按优先级排序(优先级在storage上配置)

文件名

img

文件名规则:

  • storage_id(storage server ip),源storage server ID或IP地址;

  • timestamp(文件创建时间戳),是storage server创建文件的时间戳;

  • file_size(若原始值为32位则前面加入一个随机值填充,最终为64位)

  • crc32(文件内容的检验码)

  • 随机数 (引入随机数的目的是防止生成重名文件)

timestamp,用于文件下载的时候,选择storage server;tracker里面会记录每个storage同步到的timestamp。

多tracker,多storage的搭建

  • 多个tracker是可以部署在同一台服务器上;实际生产环境肯定是每个tracker在一个机器上,只是学习fastdfs集群的话,可以部署到一台机器上;

  • 多个storage一定要部署到不同的服务器上,在同一台server上改端口是没有用的。

  • 对于client和storage,需要把所有的tracker都添加到conf文件中。

通过/usr/bin/fdfs_monitor /etc/fdfs/storage.conf查看集群状态

img

tracker中持久化storage的信息

img

storage每30秒向tracker报告一次状态;每个storage->tracker都有唯一的线程,连接2个tracker就有2个线程

img

img

是为了持久化一些信息,下次tracker启动可以加载该文件,获取storage信息;

storage同步机制

sync目录

img

storage中有唯一一份bin文件;bin文件记录storage的增删改操作;

img

mark文件可以有多份,group里面如果有N个storage,就有N-1个mark文件;每个storage的同步时独立的,都有一个单独的线程。

img

img

storage之间数据同步使用推送的方式,比如A上传了一个新文件,保存完更新binlog;A保存完后推送给B、C;

img

如何避免循环推送?

源、副本信息的操作对binlog的标记是不一样的;

比如大写标记源,要推送给其他storage;

小写标记副本,不用推送给其他storage。

img

增量同步

img

同步规则

\1. 只在本组内的storage server之间进行同步;

\2. 源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了; 源数据和备份数据区分是用binlog的操作类型来区分; 操作类型是大写字母,表示源数据,小写字母表示备份数据;

\3. 当新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器,即进行全量同步。

可以通过增加group,来扩展存储能力;

对于读多写少的场景,可以增加storage来加强读能力。

新增节点的流程

group中已存在storage A和storage B,新增加storage C的流程如下图:

storage A和storage B需要申请作为同步源,最终只有一个storage作为同步源,向C进行全量同步

storage\tracker_client_thread.c, tracker_sync_src_req

img

文件同步的流程

fastdfs\storage\storage_sync.c, storage_sync_copy_file

img

关于send、recv的error,如何处理?

send、recv的error,一般出现在客户端;

对于linux系统,返回值都是-1, 错误码和原因如下表:

错误码 send recv
EGAIN或EWOULDBLOCK TCP窗口太小,数据暂时发送不出去 当前内核缓冲区无数据可读
EINTR 被信号中断,需要重试 被信号中断,需要重试
------------------
EGAIN或EWOULDBLOCK TCP窗口太小,数据暂时发送不出去 当前内核缓冲区无数据可读
EINTR 被信号中断,需要重试 被信号中断,需要重试
其他错误
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FastDFS集群部署和同步机制 的相关文章

  • 在内核代码中查找函数的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我开始浏览内核代码 遇到的一件事是如何跟踪函数调用 结构定义等 有没有一种好的方法可以快速跳转到函数定义并退出 我尝试过 Source N
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 在 Linux 上以编程方式设置 DNS 名称服务器

    我希望能够通过我的 C C 程序为 Linux 上的 DNS 名称服务器添加 IP 地址 我在一个带有只读 etc resolv conf 的嵌入式平台上 这意味着我不能简单地将 nameserver xxx xxx xxx xxx 行添加
  • Linux 上的静态 Qt5 构建:部署时如何处理字体?

    我使用这些配置选项创建了 Qt 5 2 0 库的静态版本 Ubuntu 12 04 开源 确认许可 force pkg config 发布 静止的 前缀 home juzzlin qt5 无icu opengl桌面 无油嘴滑舌 辅助功能 n
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • C 语言的符号表

    我目前正在开发一种执行模式匹配的静态分析工具 我在用Flex https github com westes flex生成词法分析器 我编写了代码来管理符号表 我不太有经验C 所以我决定将符号表实现为线性链表 include
  • 尽管 if 语句,Visual Studio 仍尝试包含 Linux 标头

    我正在尝试创建一个强大的头文件 无需更改即可在 Windows 和 Linux 上进行编译 为此 我的包含内容中有一个 if 语句 如下所示 if defined WINDOWS include
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • 并行运行 shell 脚本

    我有一个 shell 脚本 打乱大型文本文件 600 万行和 6 列 根据第一列对文件进行排序 输出 1000 个文件 所以伪代码看起来像这样 file1 sh bin bash for i in seq 1 1000 do Generat
  • 使用包管理器时如何管理 Perl 模块?

    A 最近的问题 https stackoverflow com questions 397817 unable to find perl modules in intrepid ibex ubuntu这让我开始思考 在我尝试过的大多数 Li
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 如何在 Linux 中使用 C 语言使用共享内存

    我的一个项目有点问题 我一直在试图找到一个有据可查的使用共享内存的例子fork 但没有成功 基本上情况是 当用户启动程序时 我需要在共享内存中存储两个值 当前路径这是一个char and a 文件名这也是char 根据命令参数 启动一个新进
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 使用 gdb 调试 Linux 内核模块

    我想知道 API 在内核模块 中返回什么 从几种形式可以知道 这并不是那么简单 我们需要加载符号表来调试内核模块 所以我所做的就是 1 尝试找到内核模块的 text bss和 data段地址 2 在 gdb 中使用 add symbol f
  • Linux/POSIX:为什么 fork() 不分叉*所有*线程

    众所周知 POSIX下创建新进程的默认方式是使用fork 在 Linux 下 这在内部映射到clone 我想知道的是 众所周知 当一个人打电话时fork 子进程是用单个线程创建的 调用的线程fork cf https linux die n
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • x86-64 AMD 上 CALL 指令的操作数生成

    以下是示例程序 objdump 的输出 080483b4
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • MacOS上的Pip和Python升级指南

    在MacOS系统上 保持Pip和Python版本的最新状态对于顺利进行Python开发至关重要 通过升级Pip和Python 你可以享受到最新的功能 修复的bug以及提升的开发效率 本文将为你提供在MacOS上升级Pip和Python的详细
  • VirtualBox网络之仅主机(Host-Only)网络连接互联网络

    第一步 所有的虚拟机关机 先删除 第二步 共享当前笔记本上网的网络 第三步 更改笔记本Adapter对应的IP地址 第四步 重新修改虚拟机地址 第五步 启动虚拟机 ping www baidu com
  • 蓝桥杯带刷,带刷!!!

    A m计划 双指针 滑动窗口 倍增 题目描述 小明是个鹅卵石收藏者 从小到大他一共收藏了 nn 块鹅卵石 编号分别为 1 n 价值分别为 a1 a2 an 这天他乘船准备去往蓝桥王国 然而天有不测风云 小明所在的海域下起了暴雨 很快小明船上
  • (python实现)复杂网络中的关键节点识别测评四指标

    一 SIR传播范围 参考代码 Morty Ma 说明 与Morty Ma代码的传播方式不同 换成了从感染节点向邻居传播而不是遍历整个图 把退出循环的条件改成 无感染节点时退出 Morty Ma代码每次按G nodes 的顺序感染节点 且每次
  • Pytorch 神经网络模型量化分析基本框架

    环境准备 1 anaconda官网下载 下载地址https www anaconda com distribution 注意选用该电脑相应的系统和64 32位 已安装Python使用环境的请跳过此步骤 已安装Python使用环境的请跳过此步
  • 简写MKL库windows安装以及python如何调用dll库

    MKL安装 最新MKL库下载地址 Donwload Accelerate Fast Math with Intel oneAPI Math Kernel Library 64位以及32位我直接都安装了 之后配置各种包含目录以及环境变量 网上
  • C++ Web服务器 - MYSQL接入(二)

    newobj跨平台开发框架 https github com Liuccysdgg newobj 上一章已经搭建起运行环境并映射了回调函数 本文目的是搭建个人博客网站 必然少不了数据交互 所以第二章接入MYSQL数据库 知识要点 MYSQL
  • Django解决Model doesn‘t declare an explicit app_label and isn‘t in an application in INSTALLED_APPS

    解决方法 检查在setting里面的INSTALLED APPS中添加了这个App 定位到报错的导入model的部分 如 from models import MyModel 报错 就改为如下等的方法 from apps test app
  • 我在Hadoop云计算会议的演讲

    点击下载演讲稿 由中科院计算所主办的 Hadoop 中国2010云计算大会 于9月4日在北京召开 淘宝网作为国内最大的Hadoop应用商之一赞助与参与了这次会议 我有幸代表淘宝在大会上分享了淘宝在分布式数据处理实践的内容 下面是ppt的一个
  • STM32基础10--实时时钟(RTC)

    目录 前言 RTC框图 STM32实时时钟电路 功能需要 STM32CubeMx配置RTC 配置RCC 配置RTC 配置时间 闹钟 唤醒 开启中断 设置中断优先级 功能代码实现 STM32Cude生成RTC初始化 自定义触发闹钟次数变量 重
  • 淘宝分类导航条;纯css实现固定导航栏

    效果如下 页面如下
  • DELPHI代码

    unit Unit1 mode objfpc H interface uses Classes SysUtils FileUtil Forms Controls Graphics Dialogs ExtCtrls StdCtrls LazL
  • YY社招面试(java高级开发)

    k8s pod之间的通信 网络模式 健康检查 探针 CAP和base理论 分库分表策略 取模 一致性哈希 订单表怎么设计和分库分表 项目扩展性 高可用性 IOC AOP 跳表 redis内存模型 其他记不起来了 jvm内存 分布式锁 spr
  • AXI4-Stream协议的信号以及Xilinx提供的从AXI到AXI-Stream转换的IP核区别

    AXI4 Stream协议是一种用来连接需要交换数据的两个部件的标准接口 它可以用于连接一个产生数据的主机和一个接受数据的从机 当然它也可以用于连接多个主机和从机 该协议支持多种数据流使用相同共享总线集合 允许构建类似于路由 宽窄总线 窄宽
  • LaTex论文格式模板

    LaTex论文格式模板 效果如图 代码 使用的是工具是 VSCode texlive TEX program xelatex documentclass 12pt a4paper article 文档格式 usepackage ctex h
  • RSync详解

    简介 rsync remote synchronize 是一款实现远程同步功能的软件 它在同步文件的同时 可以保持原来文件的权限 时间 软硬链接等附加信息 rsync是用 rsync 算法 提供了一 个客户机和远程文件服务器的文件同步的快速
  • 大数据期末课设~基于spark的气象数据处理与分析

    目录 一 项目背景 3 二 实验环境 3 三 实验数据来源 4 四 数据获取 5 五 数据分析 17 六 数据可视化
  • 【论文精读AAAI_2022】MobileFaceSwap: A Lightweight Framework for Video Face Swapping

    论文精读AAAI 2022 MobileFaceSwap A Lightweight Framework for Video Face Swapping 一 前言 Abstract Introduction Related Work Fac
  • Using a debugger

    Java IDE 中最有用的特性之一就是它们的 debuggers 它可以接入到运行着你的应用的JVM中 允许你在任何位置暂停代码的执行 以便检查应用的状态 要调试 Play 应用 需要将其以 debug 模式启动 然后把你的 debugg
  • FastDFS集群部署和同步机制

    如何选择tracker 当集群中有多个tracker server时 由于tracker之间是对等的关系 客户端在upload文件时可以任意选择一个tracker 如何选择storage 当选定group后 tracker会在group内选