关闭

分布式文件系统 FastDFS

259人阅读 评论(0) 收藏 举报
分类:

一、分布式文件系统 FastDFS 架构解析

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件,许多大型互联网公司包括几个大的云网盘都在使用,感兴趣的可以了解下。

FastDFS 项目地址 : http://code.google.com/p/fastdfs/

分布式文件系统FastDFS架构剖析 :http://blog.csdn.net/MONKEY_D_MENG/article/details/6038133

作者余庆对 fdfs 做的介绍PPTFastDFS介绍_余庆.ppt

二、安装配置过程

1. 概述

包位置:/home/tester/fdfs/FastDFS/

192.168.9.92 nginx模块 ,tracker ,storage

192.168.9.93 storage

192.168.9.94 storage

2. 搭建

FastDFS安装过程详解,利用 install.sh(下载地址) 一键安装,自己手动配置conf文件,不想使用一键脚本的,可以参考此文章 fdfs 安装手册

配置文件详细说明 storage.conf tracker.conf nginx.conf等http://bbs.chinaunix.net/thread-1941456-1-1.html

storage.conf配置如下,其它默认即可~

group_name=group1 
bind_addr=192.168.9.9293.94
base_path=/home/work/fdfs_data/storage #存放日志路径
store_path0=/home/work/fdfs_data/sdata #上传文件路径
tracker_server=192.168.9.92:22122  #tracker服务器地址

tracker.conf配置如下

bind_addr=192.168.9.94
base_path=/home/work/fdfs_data/tracker

/usr/local/nginx/conf/nginx.conf 配置访问规则port:8080 当然你的可以默认使用80端口

location ~* /M00/.*\.(gif|jpg|jpeg|png|bmp|swf)$ {   # 这个地方只是过滤了图片的访问
alias /home/work/fdfs_data/sdata/data;  # 注意这个地方一定要有自动创建的data目录,否则找不到文件
ngx_fastdfs_module;
expires 30d;
}

# /etc/fdfs/mod_fast  fastdfs nginx module模块使用的配置

base_path=/home/work/fdfs_data/nginxmodule
store_path0=/home/work/fdfs_data/sdata
group_name=group1
url_have_group_name = true

/ect/fdfs/client.conf 中日志base路径 /home/work/fdfs_data/client 这个在测试的使用,不测试,没什么用处

3. 测试

启动测试前,开放端口号cenos6.4开放8080端口给浏览器访问

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 22 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
#然后保存:
/etc/rc.d/init.d/iptables save
#重启防火墙以便改动生效:(或者直接重启系统)
/etc/init.d/iptables restart

见到下面的输出说明就ok了:

service iptables restart
iptables:清除防火墙规则: [确定]
iptables:将链设置为政策 ACCEPTfilter [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]

fdfs启动、重启、开机启动,nginx启动、stop 重启

注意:启动的时候如果不指定conf,那么默认使用 /etc/fdfs/下的所有conf文件,这个一般没有处理!

#bin执行位置 /usr/local/bin/
#配置文件:/etc/fdfs/
# 启动Tracker服务:(位置是安装位置)
/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf 
/usr/local/bin/stop.sh /usr/local/bin/fdfs_trackerd 

# 启动storage服务:(位置是安装位置)
/usr/local/bin/fdfs_storaged  /etc/fdfs/storage.conf
/usr/local/bin/stop.sh /usr/local/bin/fdfs_storaged

#启动nginx服务:(所有都一样) /usr/local/nginx/sbin/nginx  http://zachary-guo.iteye.com/blog/1358312
# -t 参数将检查配置文件的语法是否正确,默认会检查 /usr/local/nginx/conf/nginx.conf 文件。  
 /usr/local/nginx/sbin/nginx -t  
# 如果要对指定的配置文件进行语法检查,可以继续添加 -c 参数  
/usr/local/nginx/sbin/nginx -t -c /home/a/b/c/my-nginx.conf  
 kill -HUP 【Nginx主进程号】  

# 三个端口都在监听说明启动成功
netstat -ntl |grep -E '22122|23000|80|8080'

测试:/usr/local/bin/fdfs_test /etc/fdfs/storage.conf upload /home/xirong/fdfs_test_files/1111.jpg

从其它浏览器上访问 http://192.168.9.92:8080/group1/M00/00/00/wKgJXFUCoa-APWY1AABdrZgsqUU351.jpg 即ok

三、fdfs 客户端调用实例及 API Doc 说明

网上有个哥们写了个入门教程,直接搬过来了,入门可以看看,如下:

FastDFS的配置、部署与API使用解读——(1)入门使用教程

FastDFS的配置、部署与API使用解读——(2)Java API:根据InputStream、文件名、文件长度上传文件

FastDFS的配置、部署与API使用解读——(3)Java API:根据InputStream、文件名、文件长度,采用IO流直接转换的方式上传文件

FastDFS的配置、部署与API使用解读——(4)设置FastDFS配置参数的两种方式

FastDFS的配置、部署与API使用解读——(5)FastDFS配置详解之Tracker配置

FastDFS的配置、部署与API使用解读——(6)FastDFS配置详解之Storage配置

FastDFS的配置、部署与API使用解读——(7)关于FastDFS的Nginx的一些Q&A汇总

FastDFS的配置、部署与API使用解读——(8)FastDFS多种文件上传接口详解

fastdfs 提供的API(支持JAVA,C,PHP,PYTHON接口)

  • upload:上传普通文件,包括主文件
  • upload_appender:上传appender文件,后续可以对其进行append、modify和truncate操作
  • upload_slave:上传从文件
  • download:下载文件
  • delete:删除文件
  • append:在appender文件后追加内容
  • modify:appender文件修改
  • set_metadata:设置文件附加属性
  • get_metadata:获取文件附加属性

上面具体每个方法的参数以及使用请查看 api 文档,下载地址如下: google code、七牛云

四、fdfs 常见问题及最佳实践

fastdfs 运维常见问题汇总 http://bbs.chinaunix.net/thread-1920470-1-1.html

最佳实践

  • 推荐的FastDFS部署方案

    文件上传和删除等操作:使用 FastDFS client API,目前提供了C、PHP extension 和 Java 的 client API

    文件下载采用 HTTP 方式:使用 nginx 或者 apache 扩展模块,不推荐使用 FastDFS 内置的 web server

    不要做 RAID,直接挂载单盘,每个硬盘作为一个 mount point

  • 最大并发连接数设置

    参数名:max_connections

    缺省值:256

    说明:FastDFS 采用预先分配好 buffer 队列的做法,分配的内存大小为: max_connections * buff_size,因此配置的连接数越大,消耗的内存越多。不建议配置得过大,以避免无谓的内存开销。

  • 工作线程数设置

    参数名: work_threads

    缺省值:4

    说明:为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出多个CPU的效能,系统中的线程数总和,应等于CPU总数。

    对于tracker server,公式为:

    work_threads + 1 = CPU数
    

    对于storage,公式为:

    work_threads + 1 + (disk_reader_threads  + disk_writer_threads) * store_path_count  = CPU数
    
  • storage目录数设置

    参数名:subdir_count_per_path

    缺省值:256

    说明:FastDFS 采用二级目录的做法,目录会在 FastDFS 初始化时自动创建。存储海量小文件,打开了trunk存储方式的情况下,建议将本参数适当改小,比如设置为32,此时存放文件的目录数为 32 32 = 1024。假如trunk文件大小采用缺省值64MB,磁盘空间为2TB,那么每个目录下存放的trunk文件数均值为:2TB / (102464MB) = 32个

  • storage磁盘读写线程设置

    disk_rw_separated:磁盘读写是否分离

    disk_reader_threads:单个磁盘读线程数

    disk_writer_threads:单个磁盘写线程数

    如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之后

    对于单盘挂载方式,磁盘读写线程分别设置为1即可

    如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能

  • storage同步延迟相关设置

    sync_binlog_buff_interval:将 binlog buffer 写入磁盘的时间间隔,取值大于 0,缺省值为 60s

    sync_wait_msec:如果没有需要同步的文件,对 binlog 进行轮询的时间间隔,取值大于0,缺省值为 100ms

    sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为 0

    为了缩短文件同步时间,可以将上述 3 个参数适当调小即可

fastdfs V3 新增加的合并存储介绍 : http://www.open-open.com/doc/view/ab5701d57e5b49a8b6255df1ae7d5a97

最后,如果你想也想学习下,那么就从搭建环境 + demo 案例开始吧,参考作者余庆写的demo案例

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43452次
    • 积分:583
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:32篇
    • 译文:0篇
    • 评论:3条
    文章分类