在Linux安装FastDFS

背景

笔者最近在做一个人脸库管理功能,大量的人脸照片,开始打算作为base64存放在数据库中,后来发现速度上不来。项目资源又比较缺乏,只能自己动手搭建一个文件系统了。这里笔者选定的是FastDFS。

FastDFS是一个C语言编写的轻量级分布式文件系统,支持在Linux、FreeBSD、MacOS等类UNIX系统中运行,所以Windows是没法运行的。FastDFS提供C、Java SDK、PHP扩展。

FastDFS源代码地址:https://github.com/happyfish100/fastdfs

安装

在安装FastDFS之前需要先安装libfastcommon。
libfastcommon源代码地址:https://github.com/happyfish100/libfastcommon

解压下载好的文件,并进入解压后的目录:

tar xvf libfastcommon-1.0.43.tar.gz
cd libfastcommon-1.0.43

编译并安装

./make.sh
sudo ./make.sh install

libfastcommon安装好后,接着到FastDFS源代码地址下载FastDFS。

解压下载好的FastDFS文件,并进入解压后的目录:

tar xvf fastdfs-6.06.tar.gz
cd fastdfs-6.06

编译并安装

./make.sh
sudo ./make.sh install

配置

配置tracker

复制一份默认的tracker配置文件模板

sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

这里可以用vim打开配置文件tracker.conf。主要是对base_path和http.server_port进行配置。

sudo vim /etc/fdfs/tracker.conf

base_path就是tracker存储data和log的根路径,必须提前创建好,是已经存在的。
http.server_port看名字就知道了http服务的端口,注意这个就行了,如无必要不要去修改。

笔者将base_path修改成了/home/appadmin/fastdfs/tracker

启动tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

fdfs_trackerd 支持 start|stop|restart三个命令。

查看是否启动成功,也就是查看端口占用情况

netstat -anp|grep fdfs

配置storage

将默认storage配置文件模板复制一份

sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

这个与tracker基本一致,也是为了修改base_path地址,笔者修改后的地址为:/home/appadmin/fastdfs/storage
另外store_path0也要修改,笔者配置的是/home/appadmin/fastdfs/storage0,这个配置千万不能搞错了,否则会出现类似以下的错误:

ERROR - file: tracker_proto.c, line: 50, server: 192.168.2.12:22122, response status 2 != 0
ERROR - file: tracker_client_thread.c, line: 2550, fdfs_recv_response fail, result: 2 

错误都是在对应的base_path/logs目录查看。

接着修改group_name,根据实际情况,笔者修改为当前用户的组名appadmin
接下来是非常重要的一步配置,就是tracker_server。这里配置你tracker_server的ip和端口。 笔者tracker与storage在同一台服务器上,所以配置如下:

tracker_server = 192.168.2.12:22122

注意,这里虽然在同一台服务器上单IP地址不能用127.0.0.1。否则会出现以下错误:

ERROR - file: storage_func.c, line: 1361, conf file "/etc/fdfs/storage.conf", tracker: "127.0.0.1:22122" is invalid, tracker server ip can't be 127.0.0.1

启动storage

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

再次用netstat命令查看端口占用情况,可以看到tracker和storage都启动起来了。

如果还不太放心,可以用fdfs_monitor查看storage是否绑定成功。

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

扩展:安装fastdfs-nginx-module

FastDFS往往需要与Nginx配合使用,因此我们要安装Nginx和fastdfs-nginx-module。

fastdfs-nginx-module源代码地址:https://github.com/happyfish100/fastdfs-nginx-module

下载Nginx并解压Nginx

http://nginx.org/download/nginx-1.17.6.tar.gz
tar xvf nginx-1.17.6.tar.gz

安装Nginx需要的依赖(如果没安装过,请用下面命令安装):

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev openssl libssl-dev libperl-dev

解压下载好的fastdfs-nginx-module-1.22.tar.gz

tar xvf fastdfs-nginx-module-1.22.tar.gz

进入Nginx目录安装Nginx

cd nginx-1.17.6
./configure --prefix=/opt/nginx --add-module=/home/appadmin/Downloads/fastdfs-nginx-module-1.22/src
make
sudo make install

启动Nginx

sudo /opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf

配置Nginx和fastdfs-nginx-module
先进入fastdfs-nginx-module的源代码目录

cd fastdfs-nginx-module-1.22/src

copy mod_fastdfs.conf到/etc/fdfs

sudo cp mod_fastdfs.conf /etc/fdfs/

用vim打开/etc/fdfs/mod_fastdfs.conf修改配置

sudo vim /etc/fdfs/mod_fastdfs.conf

分别配置一下参数:
base_path、group_name、tracker_server、store_path0

base_path新建一个/home/appadmin/fastdfs/mod_fastdfs目录,作为参数值。
group_name就是storage里面的group_name。
tracker_server也是storage里面配置的那个配置一样,store_path0也是如此。

最后再配置Nginx

进入fastdfs-6.06的源代码目录,找到mime和http配置并复制到/etc/fdfs/目录下

cd fastdfs-6.06
sudo cp conf/mime.types conf/http.conf /etc/fdfs/

接着进入到nginx的安装目录/opt/nginx,打开conf/nginx.conf文件,在里面添加一个server节点

server {
    listen 8080;
    server_name localhost;
    location ~/appadmin/M00 {
        root /home/appadmin/fastdfs/storage/data;
        ngx_fastdfs_module;
    }
}

这里的listen 8080要与tracker配置中的http.server_port保持一致。

最后重新加载Nginx配置

sudo /opt/nginx/sbin/nginx -s reload

测试

复制一个客户端配置模板

sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

修改base_path为tracker的base_path,再修改tracker_server为真实的tracker。最后修改http.tracker_server_port为8080。

上传测试

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf 微信图片_20200603141250.jpg

从上图可以看到上传成功了。输出各项信息解释如下:
appadmin 组名
M00 磁盘名
00/00 目录
wKgCDF7gVaeADwW3AAFOFM_ONDU026.jpg 新的文件名

在浏览器访问Nginx配置的端口,通过上传返回的信息,就可以访问到刚刚上传的文件了。

注意,笔者这里访问是不需要带组名的,在网上看到很多教程是带了组名的,那是因为在/etc/fdfs/mod_fastdfs.conf中将url_have_group_name这个参数配置为true,就需要带组名了。

url_have_group_name = true 

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:在Linux安装FastDFS

本文地址:https://dev-tang.com/post/2020/06/fastdfs-install.html

推荐阅读