FASTDFS学习

一、介绍

参考

官方网站:https://github.com/happyfish100/

配置文档:https://github.com/happyfish100/fastdfs/wiki/

nginx模块:https://github.com/happyfish100/fastdfs-nginx-module

Java客户端:https://github.com/happyfish100/fastdfs-client-java

配置参考:http://blog.mayongfa.cn/192.html

                  http://blog.mayongfa.cn/193.html

tracker-server:

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

storage-server:

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

group:

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

meta data:

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

二、部署

FASTDFS学习_第1张图片
FastDfs服务架构图
FASTDFS学习_第2张图片
本地部署服务

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

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

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

一、安装 libfastcommon 和 FastDFS

1.下载安装 libfastcommon,这里是通过wget下载(我喜欢这种方式)。

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz


FASTDFS学习_第3张图片
下载安装 libfastcommon

解压 libfastcommon,命令:

tar-zxvf V1.0.7.tar.gz

FASTDFS学习_第4张图片
解压

编译,进入libfastcommon-1.0.7目录,命令:

cd libfastcommon-1.0.7

./make.sh

cd libfastcommon-1.0.7

./make.sh

FASTDFS学习_第5张图片

安装,命令:

./make.sh install


安装

显示这样的画面,就是安装 libfastcommon 成功啦。

2.下载安装 FastDFS,这里也是通过wget下载。

wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz


FASTDFS学习_第6张图片
解压缩

tar-zxvf V5.05.tar.gz

FASTDFS学习_第7张图片
解压

编译,进入fastfds-5.05目录,命令:

cd fastdfs-5.05

./make.sh


FASTDFS学习_第8张图片
编译

./make.sh install

FASTDFS学习_第9张图片
安装

二、配置 Tracker 服务

上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。看命令:

cp tracker.conf.sample tracker.conf

vim tracker.conf

FASTDFS学习_第10张图片

# the base path to store data and log files

base_path=/data/fastdfs

# HTTP port on this tracker server

http.server_port=80

当然前提是你要有或先创建了/data/fastdfs目录。port=22122这个端口参数不建议修改,除非你已经占用它了。

修改完成保存并退出 vim ,这时候我们可以使用/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start来启动 Tracker服务,但是这个命令不够优雅,怎么做呢?使用ln -s建立软链接:

ln-s/usr/bin/fdfs_trackerd/usr/local/bin

ln-s/usr/bin/stop.sh/usr/local/bin

ln-s/usr/bin/restart.sh/usr/local/bin

这时候我们就可以使用service fdfs_trackerd start来优雅地启动 Tracker服务了,是不是比刚才带目录的命令好记太多了(懒是社会生产力)。你也可以启动过服务看一下端口是否在监听,命令:

启动服务:service fdfs_trackerd start

查看监听:netstat-unltp|grep fdfs

监听

看到22122端口正常被监听后,这时候就算 Tracker服务安装成功啦!

三、配置 Storage 服务

现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有Group(组)的概念,同一组内服务器互备同步,这里不再演示。直接开始配置,依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。还看命令:

cp storage.conf.sample storage.conf

vim storage.conf

FASTDFS学习_第11张图片

打开storage.conf文件后,找到这两个参数进行修改:

# the base path to store data and log files

base_path=/data/fastdfs/storage

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs2

# tracker_server can ocur more than once, and tracker_server format is

#  "host:port", host can be hostname or ip address

tracker_server=192.168.198.129:22122

当然你的/data/fastdfs目录下要有storage文件夹,没有就创建一个,不然会报错的,日志以及文件都会在这个下面,启动时候会自动生成许多文件夹。stroage的port=23000这个端口参数也不建议修改,默认就好,除非你已经占用它了。

修改完成保存并退出 vim ,这时候我们依然想优雅地启动 Storage服务,带目录的命令不够优雅,这里还是使用ln -s建立软链接:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

执行命令启动服务:

service fdfs_storaged start

netstat-unltp|grep fdfs

监听

很好,22122 和 23000端口都在监听了,这个时候你去/data/fastdfs/storage文件夹下看的话,会出现一大堆文件夹,而且进去还有一大堆,哈哈,这就是存放文件的啦!下一篇会讲它们的作用和怎么存储的。

应该是完成了。我们安装配置并启动了 Tracker 和 Storage 服务,也没有报错了。那他俩是不是在通信呢?我们可以监视一下:

/usr/bin/fdfs_monitor/etc/fdfs/storage.conf

接下来我们需要配合 Nginx 来进行文件的上传下载,这一篇就安装 Nginx 以及结合 fastdfs-nginx-module 模块使用。

四、安装 Nginx 和 fastdfs-nginx-module

1.下载 Nginx 和 fastdfs-nginx-module,这里是通过wget下载(我喜欢这种方式)。

wget-c https://nginx.org/download/nginx-1.10.1.tar.gz

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip

2.解压 fastdfs-nginx-module,记着这时候别用tar解压了,因为是.zip文件,正确命令:

unzip master.zip

FASTDFS学习_第12张图片
解压

3.配置 nginx 安装,加入fastdfs-nginx-module模块。这是和普通 Nginx 安装不一样的地方,因为加载了模块。

./configure--add-module=../fastdfs-nginx-module-master/src/

-->如果已经安装过Nginx的话,只需要加上新模块重新编译即可。

-->先执行nginx -V查看当前nginx已安装的模块

FASTDFS学习_第13张图片

把configure arguments:后的参数拷贝下载,放在./configure后面,再加上--add-module=/home/leung/fastdfs-nginx-module/src/即可,add-module后的路径请根据实际情况进行替换.

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-file-aio --with-threads --with-ipv6 --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_ssl_module --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2'--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -Wl,--as-needed'--add-module=/home/leung/fdfs/fastdfs-nginx-module/src/

完毕后只执行make,不要执行make install

五、配置 fastdfs-nginx-module 和 Nginx

1.配置mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下。

cd/software/fastdfs-nginx-module-master/src/

vim mod_fastdfs.conf

cp mod_fastdfs.conf/etc/fdfs

修改mod-fastdfs.conf配置只需要修改我标注的这三个地方就行了,其他不需要也不建议改变。

# FastDFS tracker_server can ocur more than once, and tracker_server format is

#  "host:port", host can be hostname or ip address

# valid only when load_fdfs_parameters_from_tracker is true

tracker_server=192.168.198.129:22122

# if the url / uri including the group name

# set to false when uri like /M00/00/00/xxx

# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx

# default value is false

url_have_group_name=true

# store_path#, based 0, if store_path0 not exists, it's value is base_path

# the paths must be exist

# must same as storage.conf

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs1

FASTDFS学习_第14张图片

接着我们需要把fastdfs-5.05下面的配置中还没有存在/etc/fdfs中的拷贝进去

cd/software/fastdfs-5.05/conf

cp anti-steal.jpg http.conf mime.types/etc/fdfs/

2.配置 Nginx。编辑nginx.conf文件:

cd /usr/local/nginx/conf

vi nginx.conf

在配置文件中加入:

location/group1/M00{

root/data/fastdfs/storage/;

ngx_fastdfs_module;

}

FASTDFS学习_第15张图片

由于我们配置了group1/M00的访问,我们需要建立一个group1文件夹,并建立M00到data的软链接。

mkdir /data/fastdfs/storage/data/group1

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

启动 Nginx ,会打印出fastdfs模块的pid,看看日志是否报错,正常不会报错的

/usr/local/nginx/sbin/nginx

打开浏览器,可以看到如下画面,说明我们 Nginx 结合 fastdfs-nginx-module 模块安装并配置成功啦!

FASTDFS学习_第16张图片

三、问题解决

安装fastdfs-nginx-module的依赖包编译没有成功,错误如下:

/usr/local/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c

In file included from /usr/local/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c:6:0:

/usr/local/fastdfs-nginx-module-master/src/common.c: 在函数‘fdfs_http_request_handler’中:

/usr/local/fastdfs-nginx-module-master/src/common.c:1245:61: 错误:‘FDFSHTTPParams’没有名为‘support_multi_range’的成员

(pContext->range_count > 1 && !g_http_params.support_multi_range))

^

make[1]: *** [objs/addon/src/ngx_http_fastdfs_module.o] 错误 1

make[1]: 离开目录“/usr/local/nginx-1.12.0”

make: *** [build] 错误 2

网上查了下资料,是因为fastdfs-nginx-module版本问题,我搭建的版本是Version 5.05 2016-12-29。作者还有一个5.10的发行版本,你如果没有下载最近的,整合nginx的时候可能会遇到这个问题。

遇到这个错误的原因是,在fastdfs-nginx-module的HISTORY中你可以看到:

FASTDFS学习_第17张图片

整合的时候,fastdfs-nginx-module中的support_multi_range在Version 5.10以下的版本中找不到。

Version 5.11对应的fastdfs-nginx-module的Version 1.20

Version 5.10对应的fastdfs-nginx-module的Version 1.19

所以我这边fastdfs-nginx-module选择1.20以前的版本:


FASTDFS学习_第18张图片

重新解压,config,编译等了一会,幸好,编译成功了,make install,Nginx安装成功了。

四、测试

完成上面的步骤后,我们已经安装配置完成了全部工作,接下来就是测试了。因为执行文件全部在/usr/bin目录下,我们切换到这里,并新建一个test.txt文件,随便写一点什么,我写了This is a test file. by:mafly这句话在里边。然后测试上传:

cd/usr/bin

vim test.txt

fdfs_test/etc/fdfs/client.conf upload test.txt

cd /etc/fdfs

cp client.conf.sample client.conf

vim client.conf

FASTDFS学习_第19张图片

/usr/bin/fdfs_test /etc/fdfs/client.conf upload/usr/bin/test.txt

FASTDFS学习_第20张图片

成功啦!!!返回文件信息及上传后的文件 HTTP 地址,你打开浏览器访问一下试试

五、封装

官方提供了java客户端的封装开源代码,我们可以自行下载进行上传下载测试

https://github.com/happyfish100/fastdfs-client-java

FASTDFS学习_第21张图片

六、总结

这篇文章一步一步的讲了通过 Nginx 结合fastdfs-nginx-module模块来进行上传测试及下载工作,当然这也需要结合上一篇 Tracker 和 Storage 服务来进行,这算是整体进行了 FastDFS 的安装与配置,分布式的配置也几乎和这没差别,只不过是增加了不同组和多台服务器,有机会希望你亲自试试。

可能接下来,我会结合项目中实际使用再写一下关于 FastDFS 的一些使用感受吧,可能是怎样搭建一个近乎商用的文件系统,上传下载分享好用到爆,好吧,我又吹牛了。接下来其实还有更多关于文件的工作,比如防盗链、图片切图、视频处理等等。

哈哈,先这样吧。

你可能感兴趣的:(FASTDFS学习)