FASTDFS学习

作者: BLACKMAMBAR | 来源:发表于2017-09-04 10:33 被阅读238次

    一、介绍

    参考

    官方网站: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服务架构图 本地部署服务

    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

    下载安装 libfastcommon

    解压 libfastcommon,命令:

    tar-zxvf V1.0.7.tar.gz

    解压

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

    cd libfastcommon-1.0.7

    ./make.sh

    cd libfastcommon-1.0.7

    ./make.sh

    安装,命令:

    ./make.sh install

    安装

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

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

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

    解压缩

    tar-zxvf V5.05.tar.gz

    解压

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

    cd fastdfs-5.05

    ./make.sh

    编译

    ./make.sh install

    安装

    二、配置 Tracker 服务

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

    cp tracker.conf.sample tracker.conf

    vim tracker.conf

    # 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

    打开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

    解压

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

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

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

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

    把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-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;

    }

    由于我们配置了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-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-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以前的版本:

    重新解压,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

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

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

    五、封装

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

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

    六、总结

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

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

    哈哈,先这样吧。

    相关文章

      网友评论

        本文标题:FASTDFS学习

        本文链接:https://www.haomeiwen.com/subject/mhqkjxtx.html