FDFS

本贴最后更新于 2686 天前,其中的信息可能已经物是人非

前面了解了 fastdfs 的原理,接下来就熟悉一下安装过程,准备了三台机器,一台模拟 client,一台模拟 storage,一台模拟 tracker。

三台机器均为 debian6,系统为最小化安装,先安装基本编译环境:

apt-get install build-essential php5-dev libevent-dev

下载 fastdfs 源码包:

wget http://fastdfs.googlecode.com/files/FastDFS_v3.05.tar.gz

开始安装:

tar zxvf FastDFS_v3.05.tar.gz
cd FastDFS/
./make.sh
./make.sh install

安装完成后,fastdfs 默认的配置文件被放置在/etc/fdfs 目录下面,包含了 client.conf http.conf mime.types storage.conf tracker.conf 五个文件,fastdfs 进程的启动是以加载的配置文件区分的。源码包中都包含了这三个配置文件。

tracker.conf 配置文件分析:

#配置 tracker.conf 这个配置文件是否生效,因为在启动 fastdfs 服务端进程时需要指定配置文件,所以需要使次配置文件生效。false 是生效,true 是屏蔽。
disabled=false
#程序的监听地址,如果不设定则监听所有地址
bind_addr=
#tracker 监听的端口
port=22122
#链接超时设定
connect_timeout=30
#tracker 在通过网络发送接收数据的超时时间
network_timeout=60
#数据和日志的存放地点
base_path=/opt/fdfs
#服务所支持的最大链接数
max_connections=256
#工作线程数一般为 cpu 个数
work_threads=4
#在存储文件时选择 group 的策略,0:轮训策略 1:指定某一个组 2:负载均衡,选择空闲空间最大的
groupstore_lookup=2
#如果上面的 store_lookup 选择了 1,则这里需要指定一个 group
#store_group=group2
#在 group 中的哪台 storage 做主 storage,当一个文件上传到主 storage 后,就由这台机器同步文件到 group 内的其他 storage 上,0:轮训策略 1:根据 ip 地址排序,第一个 2:根据优先级排序,第一个 store_server=0#选择那个 storage 作为主下载服务器,0:轮训策略 1:主上传 storage 作为主下载服务器 download_server=0#选择文件上传到 storage 中的哪个(目录/挂载点),storage 可以有多个存放文件的 base path 0:轮训策略 2:负载均衡,选择空闲空间最大的 store_path=0#系统预留空间,当一个 group 中的任何 storage 的剩余空间小于定义的值,整个 group 就不能上传文件了
reserved_storage_space = 4GB
#日志信息级别
log_level=info
#进程以那个用户/用户组运行,不指定默认是当前用户
run_by_group=
run_by_user=
#允许那些机器连接 tracker 默认是所有机器
allow_hosts=*
#设置日志信息刷新到 disk 的频率,默认 10
ssync_log_buff_interval = 10
#检测 storage 服务器的间隔时间,storage 定期主动向 tracker 发送心跳,如果在指定的时间没收到信号,tracker 人为 storage 故障,默认 120
scheck_active_interval = 120
#线程栈的大小,最小 64K
thread_stack_size = 64KB
#storage 的 ip 改变后服务端是否自动调整,storage 进程重启时才自动调整
storage_ip_changed_auto_adjust = true
#storage 之间同步文件的最大延迟,默认 1 天
storage_sync_file_max_delay = 86400
#同步一个文件所花费的最大时间
storage_sync_file_max_time = 300
#是否用一个 trunk 文件存储多个小文件
use_trunk_file = false
#最小的 solt 大小,应该小于 4KB,默认 256bytes
slot_min_size = 256
#最大的 solt 大小,如果上传的文件小于默认值,则上传文件被放入 trunk 文件中
slot_max_size = 16MB
#trunk 文件的默认大小,应该大于 4M
trunk_file_size = 64MB
#http 服务是否生效,默认不生效
http.disabled=false
#http 服务端口
http.server_port=8080
#检测 storage 上 http 服务的时间间隔,<=0 表示不检测
http.check_alive_interval=30
#检测 storage 上 http 服务时所用请求的类型,tcp 只检测是否可以连接,http 必须返回 200
http.check_alive_type=tcp
#通过 url 检测 storage http 服务状态
http.check_alive_uri=/status.html
#if need find content type from file extension namehttp.need_find_content_type=true#用 include 包含进 http 的其他设置
##include http.conf

启动 tracker 进程

fdfs_trackerd /etc/fdfs/tracker.conf

检测状态

netstat -tupln|grep tracker#可以看到如下:tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 18559/fdfs_trackerd

storage.conf 配置文件分析:

#同 tracker.confdisabled=false#这个 storage 服务器属于那个 groupgroup_name=group1#同 tracker.confbind_addr=#连接其他服务器时是否绑定地址,bind_addr 配置时本参数才有效 client_bind=true#同 tracker.confport=23000
connect_timeout=30
network_timeout=60
#主动向 tracker 发送心跳检测的时间间隔
heart_beat_interval=30
#主动向 tracker 发送磁盘使用率的时间间隔
stat_report_interval=60
#同 tracker.confbase_path=/opt/fdfs
max_connections=256
#接收/发送数据的 buff 大小,必须大于 8KB
buff_size = 256KB
#同 tracker.conf
work_threads=4
#磁盘 IO 是否读写分离
disk_rw_separated = true
#是否直接读写文件,默认关闭
disk_rw_direct = false
#混合读写时的读写线程数
disk_reader_threads = 1
disk_writer_threads = 1
#同步文件时如果 binlog 没有要同步的文件,则延迟多少毫秒后重新读取,0 表示不延迟
sync_wait_msec=50
#同步完一个文件后间隔多少毫秒同步下一个文件,0 表示不休息直接同步
sync_interval=0
#表示这段时间内同步文件
sync_start_time=00:00
sync_end_time=23:59
#同步完多少文件后写 mark 标记
write_mark_file_freq=500
#storage 在存储文件时支持多路径,默认只设置一个
store_path_count=1
#配置多个 store_path 路径,从 0 开始,如果 store_path0 不存在,则 base_path 必须存在
store_path0=/opt/fdfs
#store_path1=/opt/fastdfs2
#subdir_count * subdir_count 个目录会在 store_path 下创建,采用两级存储
subdir_count_per_path=256
#设置 tracker_server
tracker_server=x.x.x.x:22122
#同 tracker.conf
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
#文件在数据目录下的存放策略,0:轮训 1:随机
file_distribute_path_mode=0
#当问及是轮训存放时,一个目录下可存放的文件数目
file_distribute_rotate_count=100
#写入多少字节后就开始同步,0 表示不同步
fsync_after_written_bytes=0
#刷新日志信息到 disk 的间隔
sync_log_buff_interval=10
#同步 storage 的状态信息到 disk 的间隔
sync_stat_file_interval=300
#线程栈大小
thread_stack_size=512KB
#设置文件上传服务器的优先级,值越小越高
upload_priority=10
#是否检测文件重复存在,1:检测 0:不检测
check_file_duplicate=0
#当 check_file_duplicate 设置为 1 时,次值必须设置
key_namespace=FastDFS
#与 FastDHT 建立连接的方式 0:短连接 1:长连接
keep_alive=0
#同 tracker.conf
http.disabled=false
http.domain_name=
http.server_port=8888
http.trunk_size=256KB
http.need_find_content_type=true
##include http.conf

启动 storage 进程

fdfs_storaged /etc/fdfs/storage.conf

检测状态

netstat -tupln | grep storage#结果如下:tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 17138/fdfs_storaged

client.conf 配置文件分析:

#同 tracker.confconnect_timeout=30
network_timeout=60
base_path=/opt/fdfs
tracker_server=x.x.x.x:22122
log_level=info
http.tracker_server_port=8080

测试上传文件:

fdfs_upload_file /etc/fdfs/client.conf client.conf#返回如下字符串 group1/M00/00/00/CgEGflAqaFW4hENaAAACo8wrbSE16.conf

在 storage 的数据目录下的 00/00 目录下即可看到该文件,文件名称是 CgEGflAqaFW4hENaAAACo8wrbSE16.conf

  • FastDFS

    FastDFS 是用 C 语言编写的一款开源分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

    17 引用 • 10 回帖 • 1 关注
  • 存储
    22 引用 • 28 回帖 • 1 关注

相关帖子

1 回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 2 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖 • 1 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 64 关注
  • 国际化

    i18n(其来源是英文单词 internationalization 的首末字符 i 和 n,18 为中间的字符数)是“国际化”的简称。对程序来说,国际化是指在不修改代码的情况下,能根据不同语言及地区显示相应的界面。

    8 引用 • 26 回帖
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 4 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 62 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 74 关注
  • Quicker

    Quicker 您的指尖工具箱!操作更少,收获更多!

    32 引用 • 135 回帖 • 1 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 49 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    130 引用 • 793 回帖 • 2 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 9 关注
  • 电影

    这是一个不能说的秘密。

    121 引用 • 599 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 131 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 553 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 2 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 4 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 673 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    133 引用 • 189 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 638 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 3 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1705 回帖