FastDFS+Nginx实现文件服务器(转载)

目录

一、FastDFS介绍

1、简介

2、FastDFS的存储策略

3、FastDFS的上传过程

4、FastDFS的文件同步

5、FastDFS的文件下载

二、安装FastDFS环境

     前言

1、下载安装 libfastcommon

2、下载安装FastDFS

3、配置FastDFS跟踪器(Tracker)

4、配置 FastDFS 存储 (Storage)

5、文件上传测试

三、安装Nginx

1、安装nginx所需环境  

2、安装Nginx

3、访问文件

四、FastDFS 配置 Nginx 模块

1、安装配置Nginx模块

五、Java客户端

1、首先需要搭建 FastDFS 客户端Java开发环境

2、客户端API


一、FastDFS介绍

FastDFS开源地址:https://github.com/happyfish100

参考:分布式文件系统FastDFS设计原理 

参考:FastDFS分布式文件系统

个人封装的FastDFS Java API:https://github.com/achiever-or-loser/fdfs

1、简介

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

  Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

 

2、FastDFS的存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

3、FastDFS的上传过程

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。

4、FastDFS的文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

5、FastDFS的文件下载

客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

二、安装FastDFS环境

     前言

操作环境:CentOS7 X64,以下操作都是单机环境。

我把所有的安装包下载到/softpackages/下,解压到当前目录。

先做一件事,修改hosts,将文件服务器的ip与域名映射(单机TrackerServer环境),因为后面很多配置里面都需要去配置服务器地址,ip变了,就只需要修改hosts即可。

# vim /etc/hosts

增加如下一行,这是我的IP
       192.168.51.128 file.ljzsg.com

如果要本机访问虚拟机,在C:\Windows\System32\drivers\etc\hosts中同样增加一行

作者的GitHub地址:https://github.com/happyfish100(本次所需的工具大部分都可以找到)

 fastdfs 5.11版本对照:Version 5.11对应的fastdfs-nginx-module的Version 1.20 

 fastdfs  5.10版本对照:Version 5.10对应的fastdfs-nginx-module的Version 1.19

fastdfs libfastcommon-mast、 libserverframe

查看已安装的fastdfs版本:fdfs_monitor /etc/fdfs/storage.conf

       如果版本不对应,后期安装会报错!!!

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
yum -y install libevent
 

1、下载安装 libfastcommon/安装libserverframe

libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。

① 下载 解压 libfastcommon

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

# tar -zxvf V1.0.7.tar.gz  /  unzip libfastcommon-master.zip 
# cd libfastcommon-1.0.7

cd libfastcommon-master
ll

 我们会看到

③ 编译、安装

# ./make.sh
# ./make.sh install

④ libfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so 

将/usr/lib64目录下的libfastcommon.so库文件拷贝到/usr/lib目录下。

[root@user libfastcommon-1.0.39]# cd /usr/lib64  
[root@user lib64]# cp libfastcommon.so /usr/lib

 

安装libserverframe

git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon/
./make.sh && ./make.sh install #编译安装
cd ../ #返回上一级目录

2、下载安装FastDFS

① 下载FastDFS

# wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
# tar -zxvf V5.05.tar.gz    /unzip fastdfs-5.11.zip
# cd fastdfs-5.05
# ./make.sh
# ./make.sh install

②  默认安装方式安装后的相应文件与目录
  A、服务脚本:

/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker

  B、配置文件(这三个是作者给的样例配置文件) :

/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample

  C、命令工具在 /usr/bin/ 目录下:

fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh 

⑤ FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下。

  查看相应的配置:

                        cd /usr/bin 

                         ll fdfs* 

部分配置在/etc/fdfs这个目录

  两种方式:

  》 一是修改FastDFS 服务脚本中相应的命令路径,也就是把 /etc/init.d/fdfs_storaged 和 /etc/init.d/fdfs_tracker 两个脚本中的 /usr/local/bin 修改成 /usr/bin。

     # vim fdfs_trackerd
    使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
    # vim fdfs_storaged
    使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

    

  》 二是建立 /usr/bin 到 /usr/local/bin 的软链接,我是用这种方式。  

# ln -s /usr/bin/fdfs_trackerd   /usr/local/bin
# ln -s /usr/bin/fdfs_storaged   /usr/local/bin
# ln -s /usr/bin/stop.sh         /usr/local/bin
# ln -s /usr/bin/restart.sh      /usr/local/bin
  1. 成功之后查看目录

    [root@localhost muyou]# cd /etc/fdfs/
    [root@localhost fdfs]# ll
    -rw-r--r-- 1 root root  1461 Jun  8 21:56 client.conf.sample
    -rw-r--r-- 1 root root  7927 Jun  8 21:56 storage.conf.sample
    -rw-r--r-- 1 root root  7389 Jun  8 21:56 tracker.conf.sample

    我们需要把这三个实例文件复制一份,去掉sample

    cp client.conf.sample client.conf
    cp storage.conf.sample storage.conf
    cp tracker.conf.sample tracker.conf

    到此~FastDFS安装结束。

    3、配置FastDFS跟踪器(Tracker)

    配置文件详细说明参考:FastDFS 配置文件详解(如没有,请先建立data及logs目录)

    ① 进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。(已复制请跳过)

    # cd /etc/fdfs
    # cp tracker.conf.sample tracker.conf
    # vim tracker.conf

    编辑tracker.conf ,需要修改下,其它的默认即可。

    # 配置文件是否不生效,false 为默认开启 生效#
    disabled=false
    # 提供服务的端口
    port=22122
    # Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
    base_path=/home/fastdfs/tracker
    # HTTP 服务端口
    http.server_port=80

    ③ 创建tracker基础数据目录,即base_path对应的目录

    # mkdir -p /home/fastdfs/tracker

    ④ 防火墙中打开跟踪端口(默认的22122)

    # vim /etc/sysconfig/iptables
    
    添加如下端口行:
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
    
    重启防火墙:
    # service iptables restart
    

    ⑤ 启动Tracker

    初次成功启动,会在 /ljzsg/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。

    可以用这种方式启动
    # /etc/init.d/fdfs_trackerd start
    

    也可以用这种方式启动,前提是上面创建了软链接,后面都用这种方式

    service fdfs_trackerd start  / systemctl start fdfs_trackerd

    查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

    # netstat -unltp|grep fdfs

    关闭Tracker命令:

    # service fdfs_trackerd stop   / systemctl stop fdfs_trackerd

    ⑥ 设置Tracker开机启动

    # chkconfig fdfs_trackerd on
    
    或者:
    # vim /etc/rc.d/rc.local
    在配置文件最后加入配置:
    /etc/init.d/fdfs_trackerd start 

touch /var/lock/subsys/local

service fdfs_trackerd start

保存,然后 查看tracker端口监听情况

[root@localhost fastdfs_tracker]# netstat -unltp|grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      2233/fdfs_trackerd

到此22122端口监听成功。

⑦ tracker server 目录及文件结构(如没有,请先建立data及logs目录)

Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:

${base_path}
  |__data
  |   |__storage_groups.dat:存储分组信息
  |   |__storage_servers.dat:存储服务器列表
  |__logs
  |   |__trackerd.log: tracker server 日志文件 

4、配置 FastDFS 存储 (Storage)

① 进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

# cd /etc/fdfs
# cp storage.conf.sample storage.conf
# vim storage.conf

② 编辑storage.conf

标红的需要修改,其它的默认即可。

# 配置文件是否不生效,false 为生效

  • disabled=false
  • group_name=group1  #组名,根据实际情况修改,指定此 storage server 所在 组(卷)
  • storage server 服务端口
  • port=23000   #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
  • base_path=/home/fastdfs/storage   #Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
  • store_path_count=1  #存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。
  • store_path0=/home/fastdfs/fastdfs_storage_data #实际文件存储路径
  • 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
  • store_path0=/home/fastdfs/storage
  • tracker_server=file.ljzsg.com:22122    #我CentOS7的ip地址,tracker_server 的列表 ,会主动连接 tracker_server,有多个 tracker server 时,每个 tracker server 写一行
  • http.server_port=80   # 访问端口
  • heart_beat_interval=30   心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
  • 逐一配置 store_path_count 个路径,索引号基于 0。
  • FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
  • 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。
  • subdir_count_per_path=256
  • # 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
  • sync_start_time=00:00
  • sync_end_time=23:59
  • 保存之后 创建软引用
ln -s /usr/bin/fdfs_storaged /usr/local/bin
③ 创建Storage基础数据目录,对应base_path目录# mkdir -p /home/fastdfs/storage

这是配置的store_path0路径

mkdir -p /home/fastdfs/fastdfs_storage_data

④ 防火墙中打开存储器端口(默认的 23000)# vim /etc/sysconfig/iptables

添加如下端口行:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重启防火墙:service iptables restart

永久关闭防火墙: systemctl disable firewalld

临时关闭:service stop firewalld

⑤ 启动 Storage

启动Storage前确保Tracker是启动的。初次启动成功,会在 /ljzsg/fastdfs/storage 目录下创建 data、 logs 两个目录。

可以用这种方式启动
# /etc/init.d/fdfs_storaged start

也可以用这种方式,后面都用这种

service fdfs_storaged start

查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功。

# netstat -unltp|grep fdfs

关闭Storage命令:

# service fdfs_storaged stop

查看Storage和Tracker是否在通信:

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

⑥ 设置 Storage 开机启动

# chkconfig fdfs_storaged on

或者:
# vim /etc/rc.d/rc.local
加入配置:
/etc/init.d/fdfs_storaged start
  •  或者::
  • touch /var/lock/subsys/local
  • service fdfs_trackerd start
  • service fdfs_storaged start

⑦ Storage 目录

同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

在 store_path0 目录下,创建了N*N个子目录:

5、文件上传测试

① 修改 Tracker 服务器中的客户端配置文件 

# cd /etc/fdfs
# cp client.conf.sample client.conf
# vim client.conf

修改如下配置即可,其它默认。

# Client 的数据和日志目录
base_path=/home/fastdfs/fastdfs_tracker #日志文件路径 
tracker_server=192.168.150.132:22122 #tracker服务器IP地址和端口号 
http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来

② 上传测试

 在linux内部执行如下命令上传 namei.jpeg 图片


#上传:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/upload/123.jpg
 
 
#下载:/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgQcFubc46AQX6cAAK7Sl0TZt0735.jpg /home/upload/10002.jpg
 
 
#删除:/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgQcFubc46AQX6cAAK7Sl0TZt0735.jpg
  •    存储路径 /home/fastdfs/fastdfs_storage_data/data/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

上传成功后返回文件ID号:group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

  • 1.disabled=false

  • 2.group_name=group1 #组名,根据实际情况修改

  • 3.port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致

  • 4.base_path=/home/fastdfs/fastdfs_storage #设置storage数据文件和日志目录

  • 5.store_path_count=1 #存储路径个数,需要和store_path个数匹配

  • 6.#base_path0=/home/fastdfs/fastdfs_storage_data #实际文件存储路径

  • 6.store_path0=/home/fastdfs/fastdfs_storage_data

  • 7.tracker_server=192.168.150.132:22122 #我CentOS7的ip地址

  • 8.http.server_port=8888 #设置 http 端口号

  • 成功之后会返回图片的路径

group1/M00/00/00/wKiWhFrdeCeAC_vCAABqgowGIFg399.png

我们去刚才上传的路径查看是否上传成功~~~

cd /usr/muyou/dev/fastdfs/fastdfs_storage_data/data

data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

三、安装Nginx

上面将文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。

Nginx只需要安装到StorageServer所在的服务器即可,用于访问文件。我这里由于是单机,TrackerServer和StorageServer在一台服务器上。

1、安装nginx所需环境  

① gcc 安装

# yum install gcc-c++

② PCRE pcre-devel 安装

# yum install -y pcre pcre-devel

③ zlib 安装

# yum install -y zlib zlib-devel

④ OpenSSL 安装

# yum install -y openssl openssl-devel

2、安装Nginx

① 下载nginx

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

② 解压

# tar -zxvf nginx-1.12.1.tar.gz
# cd nginx-1.12.1

③ 使用默认配置  (指定安装目录:./configure --prefix=/usr/local/nginx)

# ./configure

④ 编译、安装

# make
# make install

⑤ 启动nginx

# cd /usr/local/nginx/sbin/
# ./nginx 

其它命令

./nginx -s stop

./nginx -s quit

./nginx -s reload

默认安装目录:/usr/local/nginx

⑥ 设置开机启动

# vim /etc/rc.local

添加一行:
/usr/local/nginx/sbin/nginx

# 设置执行权限
# chmod 755 rc.local

⑦ 查看nginx的版本及模块

/usr/local/nginx/sbin/nginx -V

⑧ 防火墙中打开Nginx端口(默认的 80) 

添加后就能在本机使用80端口访问了。

# vim /etc/sysconfig/iptables

添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启防火墙:

service iptables restart

3、访问文件

简单的测试访问文件

① 修改nginx.conf

# vim /usr/local/nginx/conf/nginx.conf

添加如下行,将 /group1/M00 映射到 /home/fastdfs/fastdfs_storage_data
         location /group1/M00 {
             alias /home/fastdfs/fastdfs_storage_data;
            }

     # 重启nginx
     # /usr/local/nginx/sbin/nginx -s reload

② 在浏览器访问之前上传的图片、成功。

http://IP或者域名+端口/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

四、FastDFS 配置 Nginx 模块

1、安装配置Nginx模块

① fastdfs-nginx-module 模块说明

  FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。

  假设 Tracker 服务器将文件上传到了 192.168.51.128,上传成功后文件 ID已经返回给客户端。

  此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.51.129,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。

  而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

② 下载 fastdfs-nginx-module、解压

# 这里为啥这么长一串呢,因为最新版的master与当前nginx有些版本问题。

# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

解压

unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

重命名

mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master

③ 配置Nginx

  • 在nginx中添加模块

# 先停掉nginx服务
# /usr/local/nginx/sbin/nginx -s stop

进入解压包目录
# cd /softpackages/nginx-1.12.1/
  • 然后进入nginx安装目录,添加fastdfs-nginx-module:

    解压完成后进入nginx文件主目录中开始配置 使用如下命令安装Nginx的FastDFS扩展模块:
    ./configure --prefix=/usr/local/nginx --add-module=/opt/fastdfs-nginx-module-master/src
    
    //其中  --prefix是指定nginx安装路径,此时这个目录并不存在需要后面手动创建
    
    //	--add-module指定fastDFS的nginx模块的源代码路径,即是你 fastdfs-nginx-module-master.zip
    解压完成后的文件 主目录下的 /src  目录
    
    //上面是以博主得目录进行举例的  
    
    
    
    
    ./configure --prefix=/usr/local/nginx --add-module=/usr/muyou/dev/nginx/fastdfs-nginx-module-master/src   
     #解压后fastdfs-nginx-module所在的位置
  • ./configure --add-module=../fastdfs-nginx-module-master/src

    重新编译、安装

    make && make install

/usr/src/fastdfs-nginx-module/src/common.c:21:25:致命错误:fdfs_define.h:没有那个文件或目录 #include

编译中断。
原因:编译安装nginx的fastdfs插件的头文件没有找到,由于编译nginx时候系统会到/usr/local /include,而编译安装fastdfs-nginx-module时则默认保存在了/usr/include目录。
修复:ln -s /usr/include/fast* /usr/local/include/

  •  ④ 查看Nginx的模块

    # /usr/local/nginx/sbin/nginx -V

    有下面这个就说明添加模块成功

  • nginx的默认目录是/usr/local/nginx 开始 配置storage nginx

    ⑤ 复制 fastdfs-nginx-module 安装目录中src目录下的mod_fastdfs.conf到/etc/fdfs 目录, 并修改
# cd /softpackages/fastdfs-nginx-module-master/src

# cp mod_fastdfs.conf /etc/fdfs/

修改如下配置,其它默认

connect_timeout=10   # 连接超时时间cd

base_path=/home/fastdfs/storage #保存日志目录

tracker_server=192.168.150.132:22122   #tracker服务器的IP地址以及端口号(tracker_server=file.ljzsg.com:22122)

storage_server_port=23000 #storage服务器的端口号

url_have_group_name = true #文件 url 中是否有 group 名,如果文件ID的uri中包含/group**,则要设置为true

store_path0=/home/fastdfs/fastdfs_storage_data #存储路径,

Storage 配置的store_path0路径,必须和storage.conf中的一致store_path0=/home/fastdfs/fastdfs_storage_data

group_count = 3 #设置组的个数,事实上这次只使用了group1

并配置【group1】及nginx权限。

⑥ 复制 FastDFS 的部分配置文件anti-steal.jpg http.conf mime.types到/etc/fdfs 目录

# cd /softpackages/fastdfs-5.05/conf/

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

 ⑦ 配置nginx,修改nginx.conf

# vim /usr/local/nginx/conf/nginx.conf

nginx的默认目录是/usr/local/nginx 开始 配置storage nginx

在80端口下添加本地段端口和 fastdfs-nginx模块

 server {
        listen       8086; (storage.conf里的http.server_port=8084端口)
        server_name  localhost;      

        location / {
            root   html;
            index  index.html index.htm;
        }
        本地原本映射
	   location /tmp{
	      	alias /home/iotfile/tmp;

	    }
        location /group1/M00 { 
            root /home/fastdfs/fastdfs_storaged_data; 
            ngx_fastdfs_module; 
        }或

	    location ~/group([0-9])/M00 {
	    	#alias /home/fastdfs/fastdfs_storaged_data;
		    ngx_fastdfs_module;
	    }
        error_page   500 502 503 504  /50x.html;
              location = /50x.html {
             root   html;
        }

    }

注意:

  listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

  location 的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。

或者添加server

server {
       listen       8084;(storage.conf里的http.server_port=8084端口)
       server_name  localhost;
     location /group1/M00{
        ngx_fastdfs_module;
      }
      error_page   500 502 503 504  /50x.html;
      location = /50x.html {
         root   html;
       }
   }
 

⑧ 在/ljzsg/fastdfs/file 文件存储目录下创建软连接,将其链接到实际存放数据的目录,这一步可以省略。

# ln -s /ljzsg/fastdfs/file/data/ /ljzsg/fastdfs/file/data/M00 

⑨ 启动nginx

# /usr/local/nginx/sbin/nginx

打印处如下就算配置成功

⑩ 在地址栏访问。

能下载文件就算安装成功。注意和第三点中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。

http://file.ljzsg.com/group1/M00/00/00/wKgz6lnduTeAMdrcAAEoRmXZPp870.jpeg

最终部署结构图(盗的图):可以按照下面的结构搭建环境。

五、Java客户端

前面文件系统平台搭建好了,现在就要写客户端代码在系统中实现上传下载,这里只是简单的测试代码。

1、首先需要搭建 FastDFS 客户端Java开发环境

① 项目中使用maven进行依赖管理,可以在pom.xml中引入如下依赖即可:

<dependency>
   <groupId>net.oschina.zcx7878</groupId>
   <artifactId>fastdfs-client-java</artifactId>
   <version>1.27.0.0</version>
</dependency>

其它的方式,参考官方文档:https://github.com/happyfish100/fastdfs-client-java

② 引入配置文件

可直接复制包下的 fastdfs-client.properties.sample 或者 fdfs_client.conf.sample,到你的项目中,去掉.sample。

我这里直接复制 fastdfs-client.properties.sample 中的配置到项目配置文件 config.properties 中,修改tracker_servers。只需要加载这个配置文件即可

2、客户端API

个人封装的FastDFS Java API

参考github:https://github.com/achiever-or-loser/fdfs

分布式文件系统详解及安装—FastDFS


以上就是单机中使用FastDFS搭建文件系统并上传下载的过程。

在多个服务器上部署集群环境时,配置单个服务器时操作与上边的操作类似,另外要添加相应的配置。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值