文件服务器-FastDfs-安装-配置

###介绍
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。FastDFS没有对文件做分块存储,因此不太适合分布式计算场景。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可

###FastDFS系统结构图
这里写图片描述

上传文件交互过程:
1. client询问tracker上传到的storage,不需要附加参数;
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件上传。
下载文件交互过程:
1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通讯完成文件下载。

###FastDFS安装部署

  1. 准备环境
     操作系统: CentOS 6.5 [Server-1& Server-2]
     安装包:
    1、FastDFS_v5.05.tar.gz 下载地址:http://sourceforge.net/projects/fastdfs/files 依次打开“FastDFS Server Source Code”->“FastDFS Server with PHP Extension Source Code V5.05”->“FastDFS_v5.05.tar.gz”。
    2、libfastcommon-master.zip下载地址:
    https://github.com/happyfish100/libfastcommon/archive/master.zip
  2. 安装步骤
     将FastDFS_v5.05.tar.gz和libfastcommon-master.zip放到一个tools文件夹下,将文件夹上传到/opt/目录下面。[Server-1& Server-2]
     关闭防火墙[Server-1& Server-2]
    service iptables stop
     安装libfastcommon,执行下列命令:[Server-1& Server-2]
    cd /opt/tools/
    unzip libfastcommon-master.zip
    cd libfastcommon-master
    ./make.sh
    ./make.sh install
     安装FastDFS,执行下列命令:[Server-1& Server-2]
    cd /opt/tools/
    tar -xzvf FastDFS_v5.05.tar.gz
    cd FastDFS
    vi make.sh
    将TARGET_PREFIX= D E S T D I R / u s r 改 成 T A R G E T P R E F I X = DESTDIR/usr改成 TARGET_PREFIX= DESTDIR/usrTARGETPREFIX=DESTDIR/usr/local
    ./make.sh
    ./make.sh install
     fdfs_trackerd服务配置[Server-1]
    mkdir -p /home/fastdfs/tracker
    cd /etc/fdfs/
    cp tracker.conf.sample tracker.conf
    vi tracker.conf
    将base_path=/home/yuqing/fastdfs改成 base_path=/home/fastdfs/tracker
     fdfs_storaged服务配置[Server-2]
    mkdir -p /home/fastdfs/storage
    mkdir /home/fastdfs/data
    cd /etc/fdfs/
    cp storage.conf.sample storage.conf
    vi storage.conf
    将base_path=/home/yuqing/fastdfs改成 base_path=/home/fastdfs/storage
    将store_path0=/home/yuqing/fastdfs改成
    store_path0=/home/fastdfs/data
    将tracker_server=192.168.209.121:22122改成 tracker_server=192.168.26.128:22122
     client服务配置[Server-1]
    mkdir -p /home/fastdfs/client
    cd /etc/fdfs/
    cp client.conf.sample client.conf
    vi client.conf
    将base_path=/home/yuqing/fastdfs改成
    base_path=/home/fastdfs/client
    将tracker_server=192.168.0.197:22122改成
    tracker_server=192.168.26.128:22122
  3. 启动和关闭服务
    启动fdfs_trackerd服务:
    /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
    停止fdfs_trackerd服务:
    sh /opt/tools/FastDFS/stop.sh /usr/local/bin/fdfs_trackerd
    启动fdfs_storaged服务:
    /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf
    停止fdfs_storaged服务:
    sh /opt/tools/FastDFS/stop.sh /usr/local/bin/fdfs_storaged
    注:先启动fdfs_trackerd服务再启动fdfs_storaged服务。
    可以通过service fdfs_trackerd(storaged) start/stop/restart/status
    这种方式来管理服务了。如果不行就将安装包里面提供的/init.d
    的fdfs_trackerd(storaged) 拷贝到/etc/init.d里面再执行上面操作。
    如:cp /opt/tools/FastDFS/init.d/fdfs_trackerd /etc/init.d/
    chkconfig --add fdfs_trackerd
    chkconfig fdfs_trackerd on (设置开机自启动)

###java客户端支持

TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient client = new StorageClient(trackerServer, storageServer);
//上传
client.upload_file();
//下载
client.download_file();
//删除
client. download_file();

上面所说是从别人的文章中COPY而来,下面说一下自己亲自安装文件服务器的历程。

  1. 先下载文件:
    图片
    FastDFS 5.08版本安装包
    fastdfs-nginx-module. 文件服务器nginx 插件
    libfastcommon-master。文件服务器依赖包

  2. 先安装依赖包libfastcommon-master. 必须先安装依赖包,不然fastdfs会安装不上,并报错。
    这里写图片描述
    进入到libfastcommon-maste目录。先执行./make.成功后,再执行 ./mask.sh install

  3. 安装fastdfs 5.08版本
    解压之后,执行./make.sh 然后执行./make.sh install
    之后会看到把配置文件复制到了etc目录下面了。
    菜单、

  4. 安装好了之后就可以看到可执行文件和配置文件了。
    这里写图片描述
    这里写图片描述
    5.执行到这里 基本就算前面准备工作都安装完成了。
    按照前面的步骤就可以多安装几台,然后再配置tracker和 storage.

6.首先需要新建文件夹,就是tracker和storage的文件夹
mkdir -p /home/smkapp/fastdfs/tracker
mkdir -p /home/smkapp/fastdfs/storage1/data

7.修改配置文件。
配置文件在 /etc/fdfs/目录下 配置文件包含两个配置文件,
这里写图片描述
修改文件名称 这里写图片描述

8.修改配置文件内容
首先是tracker文件
配置traker的目录
然后是storage文件

storage 主目录

仓库存储目录
仓库存储目录
tracker的地址]
tracker的地址

9.启用tracker
fd

10.启用storage
这里写图片描述

到这里 tracker 和 storage 都启动成功了。

11.安装Nginx和fastdfs-nginx-module 模块
在安装Nginx之前,需要安装gcc、 openssl-devel、 pcre-devel和zlib-devel软件库,具体如下:

yum install gcc-c++

yum install openssl-devel

yum install pcre-devel

yum install zlib-devel

解压 Nginx 和 fastdfs-nginx-module.
这里写图片描述

进图 nginx 目录 输入命令
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src

–prefix 指定安装目录 -add-module 指定添加插件

然后执行make命令 。
如果有错误,看看具体错误是什么,然后去百度解决就可以。
然后再执行make install.
这里写图片描述

这里的错误是因为没有这个fdfs_define.h 文件。
这个时候我们查看fastdfs-nginx-module/src/config文件
这里写图片描述

然后我们去 这两个引用的文件的文件夹去查看
发现 /usr/local/include/fastdfs 和 /usr/local/include/fastcommon
这个两个文件根本就不存在。
这里写图片描述
这个时候我想到 可能是系统不一样,导致配置文件放的地方不一样。然后在
发现里面有这个引用文件
这里写图片描述
这里就知道了问题。原来是引用的文件,引用错了文件夹。
有两种方法解决。一种是创建软连接

ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs

还有一种办法是直接修改fastdfs-Nginx-module/src/config文件
这里写图片描述

然后就OK了。
12.配置 fastdfs-Nginx-module 配置文件
菜单打开 fastdfs-Nginx-module/src/目录
找到 mod_fastdfs.conf文件,复制到/etc/fdfs/文件夹下面
这里写图片描述

然后到FastDfs原来的文件夹下面找到配置文件
http.conf,mime.types文件,也复制到/etc/fdfs/文件夹
这里写图片描述

最后在/etc/fdfs/文件夹里面就是这些配置文件了

这里写图片描述

打开mod_fastdfs.conf配置文件主要配置的地方在下面标识的
这里写图片描述

这里写图片描述
这里注意的地方是 store_path0 一定要配置和 storage里面的配置仓库路径一致。

配置Nginx配置文件
这里写图片描述

到这里就大功告成了。

在tracker的日志里报出此类错误
ERROR - file: tracker_mem.c, line: 1406, the format of the file “/home/bstar/dfs_data/data/storage_sync_timestamp.dat” is invalid, group: group3, row count:1 > server count:0

A:修改data里面的 storage_sync_timestamp.dat,把group3的信息删掉,然后重启tracker
我系统中之前是有2个group 所以在storage_sync_timwstamp.dat 中包含了group 的信息,但是后来是停止了group 2 . 因为机房停电,所以文件服务器停机了,然后再重启之后,启动tracker 的时候,就会报错。

nginx读取图片无法读取报错
ERROR - file: …/fastdfs-nginx-module/src/common.c, line: 877, stat file:
/root/fastdfs/data/00/00/o4YBAFbfptSAHtf7AElFxQJeSB8293.mp3 fail, errno: 13, error info: Permission denied

修改nginx的启动用户,指定user 为 root

防盗链的做法参考

https://blog.csdn.net/qq_26545305/article/details/80186385

http.conf中防盗链相关的几个参数如下:

http.anti_steal.check_token:是否做token检查,缺省值为false。

http.anti_steal.token_ttl:token TTL,即生成token的有效时长

http.anti_steal.secret_key:生成token的密钥,尽量设置得长一些,千万不要泄露出去

http.anti_steal.token_check_fail:token检查失败,返回的文件内容,需指定本地文件名

# HTTP default content type 
http.default_content_type = application/octet-stream
 
# MIME types mapping filename 
# MIME types file format: MIME_type  extensions
 # such as:  image/jpeg	jpeg jpg jpe 
 # you can use apache's MIME file: mime.types
  http.mime_types_filename=mime.types 
  
 # if use token to anti-steal 
 # default value is false (0)
 #开启token校验 
 http.anti_steal.check_token=true 
 
 # token TTL (time to live), seconds 
 # default value is 600 
 http.anti_steal.token_ttl=60 
 
 # secret key to generate anti-steal token 
 # this parameter must be set when
  http.anti_steal.check_token set to true
  
  # the length of the secret key should not exceed 128 bytes
 http.anti_steal.secret_key=FastDFS1234567890
 
   # return the content of the file when check token fail
    # default value is empty (no file sepecified) 
    http.anti_steal.token_check_fail=/etc/fdfs/anti-steal.jpg

//fid为从数据库中读出的值
 String fid="group2/M00/00/02/wKjgzFrpTGOAUl37AABFbiLVDsI531.png"; 
 String substring = fid.substring(fid.indexOf("/")+1);
  //unix时间戳 以秒为单位 
  int ts = (int) (System.currentTimeMillis() / 1000);
   String secret_key = "FastDFS1234567890"; 
   String token=new String(); 
   try {
    token= ProtoCommon.getToken(substring, ts, secret_key); 
    } catch (UnsupportedEncodingException e) {
     e.printStackTrace(); 
     }
      StringBuilder sb = new StringBuilder(); 
      sb.append("192.168.224.208/")
       sb.append(fid); 
       sb.append("token=").append(token);
        sb.append("&ts=").append(ts); 
        return sb.toString();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值