设为首页 收藏本站
查看: 1022|回复: 0

[经验分享] FastDFS + Nginx module

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-7-14 12:28:38 | 显示全部楼层 |阅读模式
前言
新项目使用FastDFS 已经有一段时间了,最近又与Nginx 做了结合。趁有时间,做下整理。

需求
使用FastDFS 存储资源(图片、文档、音频、视频...)文件,使用Nginx 提供资源请求服务。

PS:FastDFS特别适合大中型网站使用,所以这里选型时一定要注意。不是说小型不适用,而是一定要想清楚,是否一上来就有必要使用DFS这类应用。对于中小型网站,使用本地文件系统、NFS或Samba,就可以很好的解决此类需求。
网站的架构是随着业务增长而演变的,而非一蹴而就。
具体还是需要根据自身需求以及人员能力而定。

解决方案
确定使用FastDFS+Nginx 做图片服,就来先简单说下FastDFS的工作方式。

Clinet 询问tracker 可用storage 节点并返回给Client,Client 获取到可用节点信息后直接和storage 通讯完成文件上传。
下载与上传唯一的区别就是上传时询问storage 不需要参数,而下载时需要文件标识(组名和文件名)参数


相关名词
FastDFS 分为tracker和storage ,只能通过Clinet API 访问。
tracker 为跟踪服务,负责调度工作
storage 为存储服务,文件都保存在storage 服务器上
group 组,也是卷。同组内的文件是完全相同的
文件标识 由组名和文件名(含路径)构成
meta data 文件相关属性,键值对(Key Value Pair)方式

通信协议
协议包由两部分构成:header 和body
header 共10字节,格式如下:
8 bytes body length
1 byte command
1 byte status
body 数据包格式取决于具体命令,body可以为空

安装
源码目录:/usr/local/src
nginx module 目录:/usr/lib64/fastdfs/

FastDFS 项目地址 https://github.com/happyfish100/fastdfs

新版需要libfastcommon库 https://github.com/happyfish100/libfastcommon.git

nginx module https://github.com/happyfish100/fastdfs-nginx-module.git


下载源码:
1
2
3
4
$cd /usr/local/src/
$git clone https://github.com/happyfish100/libfastcommon.git
$git clone https://github.com/happyfish100/fastdfs.git
$git clone https://github.com/happyfish100/fastdfs-nginx-module.git




安装libfastcommon
1
2
3
$cd /usr/local/src/libfastcommon
$sudo /bin/sh make.sh
$sudo /bin/sh make.sh install




安装FastDFS
1
2
3
4
5
6
7
8
9
$cd /usr/local/src/fastdfs
$sudo /bin/sh make.sh
$sudo /bin/sh make.sh install
#或使用DESTDIR 指定安装目录
$sudo DESTDIR=/usr/local/fdfs ./make.sh install
$sudo cp conf/* /etc/fdfs/
$sudo cp init.d/* /etc/init.d/
$sudo chkconfig fdfs_storaged on
$sudo chkconfig fdfs_trackerd on



修改配置文件为实际值
tracker.conf

1
2
3
4
5
6
7
8
9
bind_addr=
port=22122
base_path=/home/yuqing/fastdfs
store_group=group2
reserved_storage_space = 10%
run_by_group=
run_by_user=
allow_hosts=*
http.server_port=8080



storage.conf
1
2
3
4
5
6
7
8
9
10
11
12
group_name=group1
bind_addr=
port=23000
base_path=/home/yuqing/fastdfs
max_connections=256
store_path0=/home/yuqing/fastdfs
tracker_server=192.168.209.121:22122
run_by_group=
run_by_user=
allow_hosts=*
http.domain_name=
http.server_port=8888 #对应nginx或web端口



fdfs_storaged
1
2
3
#将/usr/local/bin替换为实际执行目录,并修改 CONF为直接路径
$sed -i 's/\/usr\/local/\bin/\/usr\/bin/g' /etc/init.d/fdfs_storaged
CONF=/etc/fdfs/fdfs_storaged



fdfs_trackerd
1
2
3
#将/usr/local/bin替换为实际执行目录
$sed -i 's/\/usr\/local/\bin/\/usr\/bin/g' /etc/init.d/fdfs_trackerd
CONF=/etc/fdfs/tracker.conf




安装nginx module
拷贝库文件到lib64目录下
1
mv /usr/local/src/fastdfs-nginx-module/src /usr/lib64/fastdfs



重新编译nginx 增加fastdfs module

1
2
3
./configure --with-http_v2_module --add-module=/usr/lib64/fastdfs --with-http_geoip_module
make && make install
server nginx restart



增加nginx 配置
1
2
3
4
location /M00 {   
root /home/yuqing/fastdfs/data;   
ngx_fastdfs_module;   
}




这样一来就完成了整个安装和配置
可通过如下命令测试是否可用
1
fdfs_test conf/client.conf upload test.txt



执行成功后,会返回如下信息
1
2
3
4
file timestamp=2016-07-13 19:44:40
file size=28
file crc32=751420880
example file url: http://10.200.6.3/group2/M00/00/ ... AHCzJxdA233_big.txt



若能访问到返回的url,则说明配置成功,如若报错,可去掉组名group2 再次尝试
如若显示组名,需要将storage.conf 文件内的disabled=false 修改为disabled=true


需要注意的是,一定要将fastdfs源码目录下的conf/http.conf 和 conf/mime.types 拷贝到/etc/fdfs目录下,如fastdfs 配置目录下缺少这两个文件,nginx 是无法正常运行的,在nginx的错误日志中会看到类似下面的报错信息


ERROR - file: fastdfs-nginx-module/src//common.c, line: 155, load conf file "/etc/fdfs/mod_fastdfs.conf" fail, ret code: 2
ERROR - file: ini_file_reader.c, line: 394, include file "http.conf" not exists, line: "#include http.conf"
ERROR - file: shared_func.c, line: 970, open file /etc/fdfs/mime.types fail, errno: 2, error info: No such file or directory






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-244092-1-1.html 上篇帖子: Fastdfs与Nginx的整合 下篇帖子: 搭建FastDFS主从文件系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表