• Fasfdfs搭建


    介绍

    参考

    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

    • 下载安装 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 成功啦。

    • 下载安装 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

    • 下载 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
    
    • 解压 fastdfs-nginx-module,记着这时候别用tar解压了,因为是.zip文件,正确命令:
    unzip master.zip
    
    • 配置 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

    • 配置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/
    
    • 配置 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 模块安装并配置成功啦!

    Q&A

    安装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 的一些使用感受吧,可能是怎样搭建一个近乎商用的文件系统,上传下载分享好用到爆,好吧,我又吹牛了。接下来其实还有更多关于文件的工作,比如防盗链、图片切图、视频处理等等。

    哈哈,先这样吧。

    定位问题原因* 根据原因思考问题解决方案* 实践验证方案有效性* 提交验证结果
  • 相关阅读:
    通过编程添加Outlook联系人和通讯组
    一个比较完整的WindowsFormsApplication实现
    读书笔记:《粘住:为什么我们记住了这些,忘掉了那些?》
    最新购书
    新买的2本书都不错
    压榨机器,Hack,设计极限强度的网络应用
    方向越来越明确了
    思想上激进,行为上保守
    一种遗失了很久的感觉正在慢慢回归
    物极必反,滥用闭包的结果就是回归结构化编程
  • 原文地址:https://www.cnblogs.com/jimoliunian/p/12965364.html
Copyright © 2020-2023  润新知