目录
一、概述
前面一篇文章我们对FastDFS进行了详细的介绍,相信小伙伴们对分布式文件存储有了进一步认识。本篇文章我们将在Linux环境下搭建一个FastDFS环境。
二、下载安装 libfastcommon
libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。
【a】下载libfastcommonV1.0.7.tar.gz压缩包
这个小伙伴们可以百度下载即可。
【b】上传安装包到服务器中
这里创建一个专门存放安装包的文件夹:
[root@weishihuai /]# mkdir fastdfs
[root@weishihuai /]# cd fastdfs/
[root@weishihuai fastdfs]#
然后使用xftp上传安装包到服务器中,如下图:
【c】安装gcc 依赖环境
因为FastDFS是使用c语言开发,需要先安装gcc环境,否则之后运行类库的 ./make.sh 会报错,如下图:
[root@localhost ~]# yum -y install gcc
[root@localhost ~]# yum -y install gcc-c++
【d】解压
[root@weishihuai fastdfs]# ll
total 72
-rw-r--r--. 1 root root 73148 Nov 9 14:09 libfastcommonV1.0.7.tar.gz
[root@weishihuai fastdfs]# tar -zxvf libfastcommonV1.0.7.tar.gz
解压后,会生成libfastcommon-1.0.7文件夹,里面有make.sh编译脚本。
【e】编译、安装
[root@localhost libfastcommon-1.0.7]# ./make.sh
[root@localhost libfastcommon-1.0.7]# ./make.sh install
【f】libfastcommon.so 安装到了/usr/lib64/libfastcommon.so但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。
[root@localhost /]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
[root@localhost /]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@localhost /]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@localhost /]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
三、下载安装FastDFS
【a】下载FastDFS
下载地址:https://sourceforge.net/projects/fastdfs/files/,我们会看到如下图所示界面:
选择FastDFS Server Source Code,如下:
这里我们选择下载最多的应该也是比较稳定的版本:FastDFS Server with PHP Extension Source Code V5.05。
点击之后就能成功下载fastdfs压缩包。
【b】解压
将安装包上传到服务器中:
[root@localhost fastdfs]# tar -zxvf FastDFS_v5.05.tar.gz
解压缩之后,可以看到生成了FastDFS文件夹,里面有编译相关脚本:
[root@localhost fastdfs]# ll
total 412
drwxr-xr-x. 10 8980 users 258 Dec 2 2014 FastDFS
-rw-r--r--. 1 root root 345400 Nov 9 14:39 FastDFS_v5.05.tar.gz
drwxrwxr-x. 3 root root 102 Nov 9 14:31 libfastcommon-1.0.7
-rw-r--r--. 1 root root 73148 Nov 9 14:30 libfastcommonV1.0.7.tar.gz
[root@localhost fastdfs]# cd FastDFS/
[root@localhost FastDFS]# ll
total 120
drwxr-xr-x. 3 8980 users 4096 Dec 2 2014 client
drwxr-xr-x. 2 8980 users 261 Dec 2 2014 common
drwxr-xr-x. 2 8980 users 146 Dec 2 2014 conf
-rw-r--r--. 1 8980 users 35067 Dec 2 2014 COPYING-3_0.txt
-rw-r--r--. 1 8980 users 2802 Dec 2 2014 fastdfs.spec
-rw-r--r--. 1 8980 users 31386 Dec 2 2014 HISTORY
drwxr-xr-x. 2 8980 users 48 Dec 2 2014 init.d
-rw-r--r--. 1 8980 users 7755 Dec 2 2014 INSTALL
-rwxr-xr-x. 1 8980 users 5813 Dec 2 2014 make.sh
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 php_client
-rw-r--r--. 1 8980 users 2380 Dec 2 2014 README.md
-rwxr-xr-x. 1 8980 users 1768 Dec 2 2014 restart.sh
-rwxr-xr-x. 1 8980 users 1680 Dec 2 2014 stop.sh
drwxr-xr-x. 4 8980 users 4096 Dec 2 2014 storage
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 test
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 tracker
[root@localhost FastDFS]#
【c】编译、安装
[root@localhost FastDFS]# ./make.sh
[root@localhost FastDFS]# ./make.sh install
【d】FastDFS默认服务脚本路径
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd
【e】FastDFS相关配置文件示例
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
【f】FastDFS默认的脚本安装后放在/usr/bin下面
但是FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin,所以还是需要建立 /usr/bin 到 /usr/local/bin 的软链接。
[root@localhost fdfs]# ln -s /usr/bin/fdfs_trackerd /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/fdfs_storaged /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/stop.sh /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/restart.sh /usr/local/bin
四、配置FastDFS跟踪器(Tracker)
【a】进入 /etc/fdfs,复 tracker.conf.sample,并重命名为 tracker.conf
[root@localhost fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Nov 9 14:42 client.conf.sample
-rw-r--r--. 1 root root 7829 Nov 9 14:42 storage.conf.sample
-rw-r--r--. 1 root root 7102 Nov 9 14:42 tracker.conf.sample
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf
[root@localhost fdfs]#
【b】编辑tracker.conf,需要修改如下几个地方
vim tracker.conf
- disabled=false
- port=22122
- base_path=/fastdfs/tracker
- http.server_port=80
【c】创建Tracker 数据和日志目录地址
[root@localhost fdfs]# mkdir /fastdfs/tracker
【d】防火墙中打开跟踪端口(默认的22122)
[root@localhost fastdfs]# vim /etc/sysconfig/iptables
加入开放22122端口的配置:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
修改完成后,重启防火墙:
service iptables restart
【e】启动Tracker
使用如下命令启动Tracker跟踪器:
[root@localhost /]# /etc/init.d/fdfs_trackerd start
Reloading systemd: [ OK ]
Starting fdfs_trackerd (via systemctl): [ OK ]
[root@localhost /]#
启动成功后,会在 /fastdfs/tracker (配置的base_path)下创建 data、logs 两个目录,如下所示:
查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则说明Tracker服务安装成功。
【f】 设置Tracker开机启动
[root@localhost tracker]# chkconfig fdfs_trackerd on
【g】Tracker server 目录及文件结构
Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:
${base_path}
|__data
| |__storage_groups.dat:存储分组信息
| |__storage_servers.dat:存储服务器列表
|__logs
| |__trackerd.log: tracker server 日志文件
五、配置 FastDFS 存储 (Storage)
【a】复制 storage.conf.sample,并重命名为 storage.conf
[root@localhost fdfs]# cp storage.conf.sample storage.conf
[root@localhost fdfs]# ll
total 36
-rw-r--r--. 1 root root 1461 Nov 9 14:42 client.conf.sample
-rw-r--r--. 1 root root 7829 Nov 9 15:41 storage.conf
-rw-r--r--. 1 root root 7829 Nov 9 14:42 storage.conf.sample
-rw-r--r--. 1 root root 7234 Nov 9 15:12 tracker.conf
-rw-r--r--. 1 root root 7102 Nov 9 14:42 tracker.conf.sample
【b】编辑storage.conf
主要修改下面几个地方:
- disabled=false
- group_name=group1
- port=23000
- heart_beat_interval=30
- base_path=/fastdfs/storage
- store_path_count=1
- store_path0=/fastdfs/file
- subdir_count_per_path=256
- tracker_server=192.168.179.133:22122
- sync_start_time=00:00
- sync_end_time=23:59
- http.server_port=80
【c】创建Storage基础数据目录,对应base_path目录
[root@localhost fdfs]# mkdir /fastdfs/storage
[root@localhost fdfs]# mkdir /fastdfs/file
【d】防火墙中打开存储器端口(默认的 23000)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
修改完成之后,重启防火墙:
service iptables restart
【e】启动 Storage
启动Storage前确保Tracker是启动的。
[root@localhost fdfs]# /etc/init.d/fdfs_storaged start
Starting fdfs_storaged (via systemctl): [ OK ]
启动成功之后,会在 /fastdfs/storage 目录下创建 data、 logs 两个目录,如下图所示:
查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功:
netstat -unltp | grep fdfs
【f】设置storage开机自启动
[root@localhost storage]# chkconfig fdfs_storaged on
【g】查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
【h】Storage 目录
同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。
在 store_path0 目录下,创建了N*N个子目录:
六、文件上传测试
【a】复制Tracker客户端配置文件,并取名"client.conf"
[root@localhost fdfs]# cp client.conf.sample client.conf
【b】修改client.conf
主要修改下面几个地方:
- base_path=/fastdfs/client
- tracker_server=192.168.179.133:22122
【c】创建base_path路径
mkdir /fastdfs/c
【d】上传测试
[root@localhost /]#
[root@localhost /]# ll
total 36
lrwxrwxrwx. 1 root root 7 Sep 18 2019 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 Sep 18 2019 boot
drwxr-xr-x. 20 root root 3260 Nov 9 14:25 dev
drwxr-xr-x. 3 root root 80 Oct 10 15:12 elasticsearch
drwxr-xr-x. 3 root root 80 Oct 10 15:50 es
drwxr-xr-x. 135 root root 8192 Nov 9 14:42 etc
drwxr-xr-x. 8 root root 166 Nov 9 16:05 fastdfs
drwxr-xr-x. 4 root root 27 Oct 10 15:13 home
lrwxrwxrwx. 1 root root 7 Sep 18 2019 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 Sep 18 2019 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 media
drwxr-xr-x. 2 root root 6 Apr 11 2018 mnt
drwxr-xr-x. 3 root root 16 Sep 18 2019 opt
dr-xr-xr-x. 211 root root 0 Nov 9 14:25 proc
dr-xr-x---. 5 root root 262 Nov 9 16:04 root
drwxr-xr-x. 38 root root 1220 Nov 9 14:30 run
lrwxrwxrwx. 1 root root 8 Sep 18 2019 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 Apr 11 2018 srv
dr-xr-xr-x. 13 root root 0 Nov 9 14:25 sys
-rw-r--r--. 1 root root 12637 Nov 9 16:13 timg.png
drwxrwxrwt. 30 root root 4096 Nov 9 16:05 tmp
drwxr-xr-x. 13 root root 155 Sep 18 2019 usr
drwxr-xr-x. 20 root root 282 Sep 18 2019 var
[root@localhost /]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf timg.png
group1/M00/00/00/wKizhV-o-jiAQ08WAAAxXVoV3i4602.png
可以看到,文件上传成功,返回文件ID号:group1/M00/00/00/wKizhV-o-jiAQ08WAAAxXVoV3i4602.png,返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
- group1:组名
- M00:磁盘
- 00/00:目录
- wKizhV-o-jiAQ08WAAAxXVoV3i4602.png:文件名称
七、总结
本篇文章主要总结了如何搭建FastDFS环境,包括Tracker和Storage的搭建,并实现了上传文件的测试,但是现在并不能下载文件,因为需要安装Nginx作为服务器以支持Http方式访问文件,下一篇文章将会总结如何安装Nginx实现下载文件。