全网最全的Nginx + Fastdfs 实现单机版文件服务器,你踩过的坑我都踩过。。。

fastDFS:

    FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。

tracker-server:

    跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。

storage-server:

    存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。

group:

    组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

meta data:

    文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768 。

单机文件系统的对比

适用场景:

特别适合以中小文件( 建议范围: 4KB 到 500MB ) 为载体的在线服务, 如相册网站、 视频网站等等。

部署结构

适合小公司的最小化部署图

192.168.1.177安装fastdfs的tracker节点,以及nginx反向代理服务器用于下载服务。

192.168.1.188,192.168.1.189安装fastdfs的storage节点,默认分一组,一组内两台机器互为备份.

注意:为了做到高可用,一个group建议分为两台以上的机器。

tracker安装

安装 libfastcommon、perl依赖,下载libfastcommon-master.zip,上传到服务器的/usr目录下。

https://github.com/happyfish100/libfastcommon

[root@localhost usr]# unzip libfastcommon-master.zip

[root@localhost usr]# cd libfastcommon-master

[root@localhost usr]# ./make.sh

[root@localhost usr]# ./make.sh install

[root@localhost usr]# yum install perl

编译安装fastdfs

[root@localhost usr] # tar -zxvf fastdfs-5.08.tar.gz [root@localhost usr] # cd fastdfs-5.08 [root@localhost fastdfs-5.08] # ./make.sh [root@localhost fastdfs-5.08] # ./make.sh install [root@localhost fastdfs-5.08]# ./make.sh install

[root@localhost fastdfs-5.08]#mkdir -p /usr/bin

[root@localhost fastdfs-5.08]#mkdir -p /etc/fdfs

[root@localhost fastdfs-5.08]#cp -f fdfs_trackerd /usr/bin

if [ ! -f /etc/fdfs/tracker.conf.sample ]; then cp -f ../conf/tracker.conf /etc/fdfs/tracker.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs cp -f fdfs_storaged /usr/bin if [ ! -f /etc/fdfs/storage.conf.sample ]; then cp -f ../conf/storage.conf /etc/fdfs/storage.conf.sample; fi mkdir -p /usr/bin mkdir -p /etc/fdfs mkdir -p /usr/lib64 mkdir -p /usr/lib cp -f fdfs_monitor fdfs_test fdfs_test1 fdfs_crc32 fdfs_upload_file fdfs_download_file fdfs_delete_file fdfs_file_info fdfs_appender_test fdfs_appender_test1 fdfs_append_file fdfs_upload_appender /usr/bin if [ 0 -eq 1 ]; then cp -f libfdfsclient.a /usr/lib64; cp -f libfdfsclient.a /usr/lib/;fi if [ 1 -eq 1 ]; then cp -f libfdfsclient.so /usr/lib64; cp -f libfdfsclient.so /usr/lib/;fi mkdir -p /usr/include/fastdfs cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi

如出现以上信息,说明安装成功。

fastDFS命令目录:/usr/bin

fastDFS配置文件目录:/etc/fdfs

创建fastdfs数据目录

mkdir -pv /data/fastdfs/tracker

修改tracker.conf中的 base_path=/data/fastdfs/tracker,即刚才配置的数据文件目录

cp etc/fdfs/tracker.conf.sample etc/fdfs/tracker.conf

vi  etc/fdfs/tracker.conf

启动FASTDFS

cd  /usr/bin

fdfs_trackerd /etc/fdfs/tracker.conf restart

storage安装

storage的安装与tracker安装类似,首先编译安装fastdfs,然后修改配置文件。

创建配置文件

  cp etc/fdfs/storage.conf.sample etc/fdfs/storage.conf

  vi  etc/fdfs/storage.conf

修改tracker.conf中的

disabled=false #启用配置文件 group_name=group1 #组名,根据实际情况修改 port=23000 #设置 storage 的端口号 base_path=/data/fastdfs/storage #设置 storage 的日志目录(需预先创建) store_path_count=1 #存储路径个数,需要和 store_path 个数匹配 store_path0=/data/fastdfs/storage #存储路径 tracker_server=192.168.1.177:22122 #tracker 服务器的 IP 地址和端口号

启动

  cd /usr/bin

  ./fdfs_storaged  /etc/fdfs/storage.conf restart

验证,默认端口是22122,23000

[root@localhost bin]# netstat -antp|grep fdfs

tcp  0      0 0.0.0.0:22122  0.0.0.0:*  LISTEN      73469/./fdfs_tracke

tcp  0      0 0.0.0.0:23000  0.0.0.0:*  LISTEN      76354/./fdfs_storag

tcp  0      0 10.0.4.192:59805  10.0.4.192:22122  ESTABLISHED 76354/./fdfs_storag

tcp  0      0 10.0.4.192:22122  10.0.4.192:59805  ESTABLISHED 73469/./fdfs_tracke

配置client并测试上传

编辑/etc/client.conf 文件

修改配置文件的这几项(根据数据情况修改):

base_path=/data/fastdfs/client

tracker_server=10.0.4.192:22122

那么接下来就可以进行一个简单文件上传测试了

cd /usr/local/bin

./fdfs_test /etc/fdfs/client.conf upload /data/img/fab2233a8c2e5b0ba175f86f8e2a67d2.jpg

上图上传的是client.conf ,执行成功会返回对应的组+M00+图片的相对路径(也即上述storage配置的路径)。如果需要用浏览器访问该图片,就需要nginx来做反向代理,直接访问是不行的。

安装和配置nginx

那么接下来就需要安装和配置nginx,文章的开篇说到,openssl,pcre,zlib是nginx的依赖,如果不能使用命令安装自动安装的话,就需要手动的一个个安装。

安装nginx依赖

1.安装pcre

2.安装openssl

3.安装zlib

nginx的依赖模块都已经安装完毕,接着可以进行安装nginx,下载nginx源码,进入目录,执行安装:

./configure  --prefix=/usr/local/nginx      (--prefix是安装到那个目录下)

make

make install

安装完nginx后进行nginx的配置nginx.conf

location /group1/M00{

root /fastdfs/storage/data;

ngx_fastdfs_module;

}

这个时候你监听的端口后默认是80,之前我配置storage文件的时候的http.server_port就有用到80,如需要改其他端口的,可根据情况自行修改。

安装和配置nginx插件fastdfs-nginx-module

下载源码,进入源码目录fastdfs-nginx-module下src目录,找到config文件,(这一步很重要,很重要,很重要(重要的事情说三遍)我就是被一些文章弄晕了几天,导致启动nginx模块的时候出现错误,如果上面启动nginx报错的话,先不用着急,接着安装nginx插件,这里配置好重新编译一遍,然后重新启动nginx就ok了)

ngx_addon_name=ngx_http_fastdfs_module

if test -n "${ngx_module_link}"; then

    ngx_module_type=HTTP

    ngx_module_name=$ngx_addon_name

    ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"

    ngx_module_libs="-lfastcommon -lfdfsclient"

    ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"

    ngx_module_deps=

    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"

    . auto/module

else

    HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"

    NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"

    CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

    CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"

    CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"

fi

红色框部分是重点需要修改的地方,不这样修改nginx无法编译成功。

接着需要将插件添加到nginx

进入都nginx源码目录,执行添加模块:

./configure  --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module/src/

make

make install

拷贝并修改fastdfs-nginx-module的配置文件

cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

vim 修改/etc/fdfs/mod_fastdfs.conf 保存退出

修改如下几项:

tracker_server=192.168.1.188:22122

store_path0=/data/fastdfs/storage

base_path=/data/fastdfs/storage/data

url_have_group_name = true

建立软连接(配置文件中storage存放数据的路径):

ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/M00

将FastDFS_v4.06配置目录下的2个文件复制到/etc/fdfs目录下:

cp /usr/local/fastdfs-5.05/conf/http.conf .

cp /usr/local/fastdfs-5.05/conf/mime.types .

最后我再进行一次上传文件测试:

cd /usr/local/bin

./fdfs_test /etc/fdfs/client.conf upload /data/img/fab2233a8c2e5b0ba175f86f8e2a67d2.jpg

上传了一张测试图片

然后再浏览器上面输入自己的ip+端口号+文件路径(ip换成绑定的对应域名也行)

如果想集成image_filter插件,实现通过路径访问实时对图片进行裁剪操作,可在nginx下添加image_filter模块:

--with-http_image_filter_module

修改nginx配置:

location ~ /group1/M00/(.*)_([0-9]+)x([0-9]+)\.jpg{

    root /data/fastdfs/storage/data;

    ngx_fastdfs_module;

    set $w $2;

    set $h $3;

    if ($w != "0") {

          rewrite /group1/M00/(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /group1/M00/$1.$4 break;

    }

    image_filter resize $w $h;

    image_filter_buffer 2M;

}

location ~ group1/M00/(.+)\.?(.+){

      alias /data/fastdfs/storage/data;

      ngx_fastdfs_module;

}

重启nginx后通过图片访问路径:

在网站访问量不是很高磁盘有限不想生成多余的图片文件的前提下可,就可以用它实时缩放图片,旋转图片,验证图片有效性以及获取图片宽高以及图片类型信息,由于是即时计算的结果,所以网站访问量大的话,不建议使用。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容