FastDFS分布式文件服务器搭建

企业应用中,经常会有文件上传和下载的需求,常见的做法是通过servlet容器结合Apache Commons-fileupload完成文件上传和下载。但是随着文件数量越来越多,通过基于servlet的文件上传和下载已经无法满足需求,此时需要专业的文件存储系统来支持文件上传和下载。例如:京东,淘宝等电商网中的海量图片,都是通过分布式文件存储系统来完成存储和访问的。本篇文章将介绍企业中常用的分布式文件存储服务FastDFS的搭建及简单的API操作。具体关于FastDFS的介绍,此处不过多说明,可以自行查找资料去了解。

温馨提示:本博客已经发布小程序,可在微信小程序中搜索”百变码农”,手机上也能看!

1、FastDFS文件服务器搭建

(1)搭建环境及软件版本

服务器:CentOS6.5-X86_64

FastDFS软件:FastDFS 5.0.5版本

FastDFS下载地址:下面两个地址,第二个地址访问稍微快一点,推荐使用第二个下载地址下载源码包

地址1http://sourceforge.net/projects/FastDFS

地址2https://github.com/happyfish100/FastDFS

(2)Tracker及Storage安装步骤

a、安装源码编译时的依赖库

-bash-4.1# yum install -y gcc gcc-c++ libevent

b、安装libfastcommon库

百度云下载地址:

链接:https://pan.baidu.com/s/1iYcew-zQ6D06301KUaUSBQ
提取码:nb7r

使用如下步骤编译安装:

# 将libfastcommon源码包上传至/usr/local目录下,然后进入/usr/local目录
-bash-4.1# cd /usr/local

# 解压源码包
-bash-4.1# tar -zxvf libfastcommonV1.0.7.tar.gz

# 进入源码目录
-bash-4.1# cd libfastcommon-1.0.7

# 编译和安装
-bash-4.1# ./make.sh && ./make.sh install

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

-bash-4.1# cp /usr/lib64/libfastcommon.so /usr/lib

c、编译安装tracker库

使用如下的步骤安装:

# 进入源码安装包目录
cd /usr/local

# 解压
tar -zxvf FastDFS_v5.05.tar.gz

# 进入源码目录
cd FastDFS

# 编译和安装
./make.sh && ./make.sh install

安装完成之后,将安装目录conf下的配置文件拷贝至/etc/fdfs目录下

-bash-4.1# cp /usr/local/FastDFS/conf/* /etc/fdfs/

然后进入到/etc/fdfs目录下,编辑tracker.conf配置文件

#拷贝一个tracker.conf配置文件
-bash-4.1# cp tracker.conf.sample tracker.conf

#编辑配置文件
-bash-4.1# vim tracker.conf

修改tracker.conf目录中的home_path,该path目录需要存在,用来存储fastdfs的数据及日志

将base_path=/home/yuqing/FastDFS 改为 base_path=/data/FastDFS

启动tracker服务

# 使用指定的配置文件来启动tracker服务
-bash-4.1# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

# 查看启动结果
-bash-4.1# ps -ef| grep fdfs_trackerd
或者
-bash-4.1# netstat -tunlp | grep fdfs_tracker

设置服务器重启时自动启动服务

# 编辑rc.local配置文件
-bash-4.1# vim /etc/rc.d/rc.local

# 加入启动命令,然后保存即可
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

d、安装storage库

如果tracker和storage在同一台服务器上,安装tracker的时候就相当于已经安装了storage,只需要配置即可,如果未在同一台服务器上,使用和安装trakcer的步骤去安装storage。

① 安装libevent库

② 安装libfastcommon库

③ 编译安装storage,即:FastDFS安装包,合上述安装tracker的命令相同

e、配置storage库

# 进入配置文件目录
-bash-4.1# cd /etc/fdfs

# 复制storage配置文件
-bash-4.1# cp storage.conf.sample storage.conf

# 编辑storage配置文件
-bash-4.1# vim storage.conf

修改如下配置:

group_name=group1

base_path=/home/yuqing/FastDFS
  改为:base_path=/data/FastDFS

store_path0=/home/yuqing/FastDFS
  改为:store_path0=/data/FastDFS/fdfs_storage

#如果存在着多个数据目录,可以使用store_path[N]配置多个,如下:
#store_path1=.....
#store_path2=.....
#store_path3=.....

# 配置tracker服务器对应的ip地址和端口,如果在一台服务器上,写本机IP加22122端
#  口即可,默认端口为22122
tracker_server=192.168.10.3:22122

#如果有多个则配置多个tracker,写多行即可
tracker_server=192.168.10.4:22122
tracker_server=192.168.10.5:22122

f、启动storage服务

-bash-4.1# /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

g、将启动命令加入到rc.local配置文件中,使其开启自启动

# 编辑rc.local配置文件
-bash-4.1# vim /etc/rc.d/rc.local

# 加入启动命令,然后保存即可
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

h、通过fdfs_test客户端测试

修改client.conf配置文件,需修改的内容如下:

base_path=/data/FastDFS
tracker_server=192.168.10.3:22122

使用fdfs_test命令测试

-bash-4.1# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/test.txt

表示将test.txt文件上传到文件服务器,返回内容如下,表示文件路径:

http://192.168.10.3/group1/M00/00/00/wKhsKF53KCSALXPoAAAAAiIVoQc142_big.txt

由于现在没有web代理服务器,无法通过http来访问,下面将继续安装http代理服务器Nginx。

(3)Nginx代理安装

 

a、下载FastDFS的nginx代理模块源码包FastDFS-nginx-module_v1.16.tar.gz

下载地址:

链接:https://pan.baidu.com/s/1iYcew-zQ6D06301KUaUSBQ
提取码:nb7r

b、将其上传到tracker所在的服务器/usr/local目录下

# 进入源码安装包目录
-bash-4.1# cd /usr/local/

# 解压源码包
-bash-4.1# tar xf fastdfs-nginx-module_v1.16.tar.gz

# 进入源码目录
-bash-4.1# cd fastdfs-nginx-module/src/

# 修改config文件,将/usr/local改为/usr
-bash-4.1# vim config

修改之后的内容为:

ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES=”$HTTP_MODULES ngx_http_fastdfs_module”
NGX_ADDON_SRCS=”$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c”
CORE_INCS=”$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/”
CORE_LIBS=”$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient”
CFLAGS=”$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE=’256*1024′ -DFDFS_MOD_CONF_FILENAME=’\”/etc/fdfs/mod_fastdfs.conf\”‘”

c、将源码目录下的mod_fastdfs.conf复制到/etc/fdfs目录下,并修改mod_fastdfs.conf中的内容

-bash-4.1# cp mod_fastdfs.conf /etc/fdfs/
-bash-4.1# cd /etc/fdfs
-bash-4.1# vim mod_fastdfs.conf

修改的内容如下:

base_path=/data/FastDFS
tracker_server=192.168.10.3:22122
#tracker_server=192.168.10.4:22122(多个tracker配置多行即可)

# url中包含group名称
url_have_group_name=true

# 指定文件存储路径
store_path0=/data/FastDFS/fdfs_storage

d、下载nginx源码包

下载地址:

链接:https://pan.baidu.com/s/1iYcew-zQ6D06301KUaUSBQ
提取码:nb7r

e、创建nginx/client安装目录

-base-4.1# mkdir -pv /var/temp/nginx/client

f、指定nginx的扩展模块,并安装nginx

# 配置安装目录
-bash-4.1# ./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/usr/local/fastdfs-nginx-module/src

# 编译和安装
-base-4.1# make && make install

g、编辑nginx配置文件,添加如下的server及location

server {
        listen       80;
        server_name  192.168.10.3;
        location /group1/M00/{
                ngx_fastdfs_module;
        }
}

注意:group1表示的是FastDFS的分组名称,配置文件中指定的,M00和storage配置文件中的store_path0对应,如果有store_path1,则此处就位M01。

h、测试,首先启动nginx,然后上传一张图片,并通过nginx访问

-bash-4.1# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/a.png

然后直接访问返回的图片url,即可看到上传的图片。

2、客户端代码测试

(1)项目中引入fastdfs的依赖包
<dependency>
   <groupId>fastdfs_client</groupId>
   <artifactId>fastdfs_client</artifactId>
    <version>1.25</version>
</dependency>

注意:该jar包需要通过fastdfs_client客户端的源码自己编译到本地仓库中,目前在公共开源仓库中没有。

(2)测试代码
@Test
public void testUpload() throws Exception {
  // 创建一个配置文件,内容就是tracker服务器的地址
  // 使用全局对象加载配置文件
  ClientGlobal.init("D:/client.conf");

  // 创建一个trackerClient对象
  TrackerClient trackerClient = new TrackerClient();

  // 通过trackerClient获得一个trackerserver对象
  TrackerServer trackerServer = trackerClient.getConnection();


  // 创建一个storageClient,参数需要TrackerServer和StorageServer
  StorageClient storageClient = 
         new StorageClient(trackerServer, null);
  // 使用storageClient上传文件
  String[] filePathArr = 
           storageClient.upload_file("D:/a.png", "jpg", null);
  for (String filePath : filePathArr) {
    System.out.println(filePath);
  }
}

// 运行之后,会返回一个组名及图片的uri,然后前方拼接完http://ip:port即可访问

至此,FastDFS的搭建过程介绍完毕,欢迎转发!

温馨提示:如果小程序端代码显示混乱,是因为移动端兼容性导致,可移步至PC端站点查看!

文章属于原创,如果转发请标注文章来源:个人小站【www.jinnianshizhunian.vip