Total Pageviews

Monday 22 May 2017

分布式文件系统fastdfs环境搭建及最佳实践

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

FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件,许多大型互联网公司包括几个大的云网盘都在使用。
FastDFS项目地址 :http://code.google.com/p/fastdfs/
分布式文件系统FastDFS架构剖析 : http://blog.csdn.net/MONKEY_D_MENG/article/details/6038133

二、安装配置过程

1. 概述

包位置:/home/tester/fdfs/FastDFS/
192.168.9.92 nginx模块 ,tracker ,storage
192.168.9.93 storage
192.168.9.94 storage

2. 搭建

FastDFS安装过程详解,不想使用一键脚本的,可以参考此文章fdfs安装手册
配置文件详细说明 storage.conf tracker.conf nginx.conf等 http://bbs.chinaunix.net/thread-1941456-1-1.html
storage.conf配置如下,其它默认即可~
1
2
3
4
5
group_name=group1
bind_addr=192.168.9.92(93.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配置如下
1
2
bind_addr=192.168.9.94
base_path=/home/work/fdfs_data/tracker
/usr/local/nginx/conf/nginx.conf 配置访问规则
port:8080 当然你的可以默认使用80端口
1
2
3
4
5
6
7
8
9
10
11
12
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端口给浏览器访问
1
2
3
4
5
6
7
/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了:
1
2
3
4
5
service iptables restart
iptables:清除防火墙规则: [确定]
iptables:将链设置为政策 ACCEPT:filter [确定]
iptables:正在卸载模块: [确定]
iptables:应用防火墙规则: [确定]

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

注意:启动的时候如果不指定conf,那么默认使用 /etc/fdfs/下的所有conf文件,这个一般没有处理!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#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,公式为:
    1
    work_threads + 1 = CPU数
    对于storage,公式为:
    1
    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 / (1024 64MB) = 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

No comments:

Post a Comment