CentOS7搭建FastDFS

一、介绍

1.介绍FastDFS

FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。

FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。

FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

2.FastDSF架构

FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

上传机制
首先客户端请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求上传文件,存储服务器接收到请求后生产文件,并且将文件内容写入磁盘并返回给客户端file_id、路径信息、文件名等信息,客户端保存相关信息上传完毕。

下载机制
客户端带上文件名信息请求Tracker服务获取到存储服务器的ip地址和端口,然后客户端根据返回的IP地址和端口号请求下载文件,存储服务器接收到请求后返回文件给客户端。

二、安装组件

基础环境
APISIX主要使用了以下这些端口:

名称 说明 版本
centos 7.x
libfastcommon FastDFS分离出的一些公用函数包 libfastcommon-1.0.43.tar.gz
FastDFS FastDFS本体 fastdfs-6.06.tar.gz
fastdfs-nginx-module FastDFS和nginx的关联模块 fastdfs-nginx-module-1.22.tar.gz
nginx nginx nginx-1.20.2.tar.gz

下载地址:
链接:https://pan.baidu.com/s/1IW3Eat_IQLgsZATOeIL7eg
提取码:m46y

三、安装步骤

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y

mkdir -p /data/ent/fastdfs
将安装包上传到/data/ent/fastdfs目录

1.安装libfastcommon

tar zxvf libfastcommon-1.0.43.tar.gz
cd libfastcommon-1.0.43
./make.sh 
./make.sh install

2.安装FastDFS

tar zxvf fastdfs-6.06.tar.gz
cd fastdfs-6.06
./make.sh
./make.sh install

安装完成后会在/usr/bin目录下生成许多fastdfs相关的命令文件,以fdfs开头。
查看命令:ls -la /usr/bin/fdfs*

3.配置Tracker服务

进入/etc/fdfs目录,有3个.sample为后缀的文件(自动生成的fdfs模板配置文件)
通过cp命令拷贝tracker.conf.sample,删除.sample后缀作为正式文件

创建tracker目录

mkdir -p /data/ent/fastdfs/tracker
cd /etc/fdfs/
cp tracker.conf.sample /data/ent/fastdfs/tracker/tracker.conf

编辑tracker.conf文件修改相关参数
vim /data/ent/fastdfs/tracker/tracker.conf

#主要修改
#tracker存储data和log的跟路径,必须提前创建好
base_path=/data/ent/fastdfs/tracker
#tracker默认端口22122
port=22122 
#http访问端口,需要和nginx相同
http.server_port=80 
# 绑定本机ip地址
bind_addr=10.20.254.134
# 文件存储的组,storage中的组配置需要和此处一致
store_group=group1

启动tracker(支持start|stop|restart)

# 启动
/usr/bin/fdfs_trackerd /data/ent/fastdfs/tracker/tracker.conf start
# 停止
/usr/bin/fdfs_trackerd /data/ent/fastdfs/tracker/tracker.conf stop
# 重启
/usr/bin/fdfs_trackerd /data/ent/fastdfs/tracker/tracker.conf restart
#杀掉所有tracked进程
killall fdfs_trackerd

查看tracker启动日志

tail -f /data/ent/fastdfs/tracker/logs/trackerd.log

查看端口情况

tail -f /data/ent/fastdfs/tracker/logs/trackerd.log

4.配置Storage服务

创建storage目录

mkdir -p /data/ent/fastdfs/storage
cp /etc/fdfs/storage.conf.sample /data/ent/fastdfs/storage/storage.conf

编辑storage.conf文件修改相关参数
vim /data/ent/fastdfs/storage/storage.conf

# 主要修改
#storage存储data和log的跟路径,必须提前创建好
base_path=/data/ent/fastdfs/storage
#storge默认23000,同一个组的storage端口号必须一致
port=23000  
#默认组名,根据实际情况修改
group_name=group1  
#存储路径个数,需要和store_path个数匹配
store_path_count=1  
#如果为空,则使用base_path
store_path0=/data/ent/fastdfs/storage
#配置该storage监听的tracker的ip和port
tracker_server=10.20.254.134:22122 

启动storage(支持start|stop|restart)

# 启动
/usr/bin/fdfs_storaged /data/ent/fastdfs/storage/storage.conf start
# 停止
/usr/bin/fdfs_storaged /data/ent/fastdfs/storage/storage.conf stop
# 重启
/usr/bin/fdfs_storaged /data/ent/fastdfs/storage/storage.conf restart
#杀掉所有storaged进程
killall fdfs_storaged

查看storage启动日志

tail -f /data/ent/fastdfs/storage/logs/storaged.log 

查看端口情况

netstat -apn|grep fdfs

通过monitor来查看storage是否成功绑定

/usr/bin/fdfs_monitor /data/ent/fastdfs/storage/storage.conf 

5.安装Nginx和fastdfs-nginx-module模块

解压文件

tar zxvf fastdfs-nginx-module-1.22.tar.gz
tar zxvf nginx-1.20.2.tar.gz 
mv nginx-1.20.2 nginx
cd nginx/

配置并加载fastdfs-nginx-module模块

./configure --prefix=/data/ent/fastdfs/nginx-1.20.2 --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre --with-stream --add-module=/data/ent/fastdfs/fastdfs-nginx-module-1.22/src 

编译安装

make
make install

启动、停止nginx命令

# 启动nginx
/data/ent/fastdfs/nginx-1.20.2/sbin/nginx
# 停止nginx,此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
/data/ent/fastdfs/nginx-1.20.2/sbin/nginx -s stop 
# 退出nginx,此方式停止步骤是待nginx进程处理任务完毕进行停止
/data/ent/fastdfs/nginx-1.20.2/sbin/nginx -s quit 
# 重新加载nginx
/data/ent/fastdfs/nginx-1.20.2/sbin/nginx -s reload
#查看nginx版本
/data/ent/fastdfs/nginx-1.20.2/sbin/nginx -v

6.配置Nginx和fastdfs-nginx-module模块

将fastdfs-nginx-module/src下的mod-fastdfs.conf配置文件拷贝到/etc/fdfs文件目录下
cp /data/ent/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs

修改mod_fastdfs.conf文件
vim /etc/fdfs/mod_fastdfs.conf

主要修改如下信息:

base_path=/data/ent/fastdfs
# tracker的地址
tracker_server=10.20.254.134:22122 
# 组名
group_name=group1 
# url是否包含group名称
url_have_group_name=true 
# 需要和storage配置的相同
storage_server_port=23000 
# 存储路径个数,需要和store_path个数匹配
store_path_count=1  
# 文件存储的位置
store_path0=/data/ent/fastdfs/storage
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true

配置nginx
vim /data/ent/fastdfs/nginx-1.20.2/conf/nginx.conf
添加如下信息:

server {
    listen       80; #此端口需跟tracker.conf设置的http.server_port一致
    server_name  localhost;
    location ~/group([0-9])/M00 {
        ngx_fastdfs_module;
}

拷贝fastdfs解压目录中的http.conf和mime.types到/etc/fdfs目录下

cp /data/ent/fastdfs/fastdfs-6.06/conf/http.conf /etc/fdfs
cp /data/ent/fastdfs/fastdfs-6.06/conf/mime.types /etc/fdfs

启动nginx

/data/ent/fastdfs/nginx-1.20.2/sbin/nginx

查看nginx日志

tail -f /data/ent/fastdfs/nginx-1.20.2/logs/error.log 

四、常见命令测试

1.上传文件

设置客户端配置

cd /etc/fdfs/
cp client.conf.sample client.conf
#修改配置 vim  /etc/fdfs/client.conf
# tracker服务器文件路径
base_path=/data/ent/fastdfs/tracker
# tracker服务器IP地址和端口号
tracker_server=10.20.254.134:22122 
# tracker服务器的http端口号,必须和tracker的设置对应起来
http.tracker_server_port=80 

新建一个测试文档index.html,内容为11
echo "11" > index.html

执行上传命令
语法

/usr/bin/fdfs_upload_file  <config_file> <local_filename>

示例

/usr/bin/fdfs_upload_file /etc/fdfs/client.conf index.html 

返回:group1/M00/00/00/ChT-hmJVQgqAXTvnAAAAA_xguBk69.html

# 说明
# 组名:group1
# 磁盘:M00 
# 目录:00/00 
# 文件名称:CnqV01trmeyAbAN0AAAABLh3frE677.txt

查看结果

浏览器访问
http://ip:端口/上传返回路径
例如:http://10.20.254.134/group1/M00/00/00/ChT-hmJVQgqAXTvnAAAAA_xguBk69.html

2.下载文件

语法

/usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]

示例

/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/ChT-hmJVQgqAXTvnAAAAA_xguBk69.html t.html

3.删除文件

语法

/usr/bin/fdfs_delete_file <config_file> <file_id>

示例

/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/ChT-hmJVQgqAXTvnAAAAA_xguBk69.html

五、卸载FastDFS

1、停止服务

# 停止tracker服务
/usr/bin/fdfs_trackerd /data/ent/fastdfs/tracker/tracker.conf stop
# 停止storage服务
/usr/bin/fdfs_storaged /data/ent/fastdfs/storage/storage.conf stop

2、通过storage.conf找到base_path和store_path,然后删除相关文件

cat /data/ent/fastdfs/storage/storage.conf  |grep base_path
cat /data/ent/fastdfs/storage/storage.conf  |grep store_path

# 注意,如果有未备份的文件,请先备份再删除
rm -rf base_path文件夹
rm -rf store_path文件夹

3、通过tracker.conf找到base_path和store_path,然后删除相关文件

cat /data/ent/fastdfs/tracker/tracker.conf |grep base_path
rm -rf base_path文件夹

4、删除配置文件目录

rm -rf /etc/fdfs/

5、删除/usr/bin/目录下FastDFS的可执行文件

# 列表查看
ll /usr/bin/fdfs_*
# 执行删除
rm -rf /usr/bin/fdfs_*

** 6、删除/usr/include/目录下FastDFS相关的shell脚本**

# 列表查看
ll /usr/include/fastdfs/*
# 删除
rm -rf /usr/include/fastdfs/

7、删除/usr/lib64/目录下的库文件

 # 列表查看
 ll /usr/lib64/libfdfsclient*
 # 删除
 rm -rf /usr/lib64/libfdfsclient*

8、删除/usr/lib/目录下的库

# 列表查看
ll /usr/lib/libfdfsclient*
# 删除
rm -rf /usr/lib/libfdfsclient*

六、FAQ

1.clienet连接tracker后返回storage内网地址

6.0以上可以配置双ip,fdfs的tracker和storage都配置成内网,然后设置代理或公网IP代理到tracker和storage的内网IP(也可以只代理22122端口到tracker的22122,代理23000端口到storage的23000),通过tracker.conf设置use_storage_id = true,storage_ids.conf配置storaged的内外网ip,即可在client获取到storage的外网IP
vim /data/ent/fastdfs/tracker/tracker.conf
添加如下格式:storage_id group_id 内网IP,外网IP
例如:

100001   group1  192.168.32.32,59.197.183.105
100002   group1  192.168.33.220,59.197.183.195