FDFS

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

前面了解了 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 回帖

欢迎来到这里!

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

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

推荐标签 标签

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    554 引用 • 675 回帖 • 1 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 507 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 3 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    46 引用 • 114 回帖 • 168 关注
  • 分享

    有什么新发现就分享给大家吧!

    248 引用 • 1794 回帖
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用 • 4 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 2 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 271 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    172 引用 • 1538 回帖
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    440 引用 • 1238 回帖 • 593 关注
  • HBase

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

    17 引用 • 6 回帖 • 70 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 641 关注
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 367 回帖
  • Quicker

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

    37 引用 • 157 回帖
  • Visio
    1 引用 • 2 回帖
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 155 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • OpenCV
    15 引用 • 36 回帖 • 1 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖 • 1 关注
  • GraphQL

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

    4 引用 • 3 回帖 • 9 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1444 引用 • 10083 回帖 • 502 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 38 关注