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