文章目录
FastDFS简介
FastDFS是一款开源的轻量级分布式文件系统,使用C实现,支持Linux、BSD等unix-like操作系统。值得注意的是,fastdfs并不是通用的文件系统,只能通过专用的API访问。
fastdfs为互联网应用量身定做,解决了大容量文件存储的问题,fastdfs追求高性能和高扩展性。fastdfs的主要概念:
-
tracker-server:跟踪服务器。用于跟踪文件,主要起调度作用。在内存中记录了所有存储组和存储服务器的状态信息,是客户端和数据存储的主要枢纽。相比GFS更为精简,因为不记录文件索引。
-
storage-server: 存储服务器。用于存储文件。直接使用操作系统的文件系统来管理和组织文件。
-
group: 组,卷。多个服务器存在一个组中,在一个组中的服务器存储的文件是完全相同的,并且同一个组的服务器地位是对等的。对于文件的操作可以在任意一个组中的服务器上进行。
-
metadata: 元数据。以键值对的方式存储,用于存储文件的相关信息。
各大存储系统的对比
话说没有对比就没有伤害,fastdfs也不是万能的,需要根据业务来选择适合的存储系统。
存储系统 | 适合存储的文件类型 | 文件分布情况 | 系统性能 | 复杂度 | FUSE(用户文件系统) | POSIX() | 备份机制 | 通讯协议接口 | 社区情况 | 实现语言 |
---|---|---|---|---|---|---|---|---|---|---|
FastDFS | 4KB至500MB | 将小文件合并存储 | 很高 | 简单 | 不支持 | 不支持 | 组内冗余备份 | HTTP API | 国内用户 | C |
TFS | 所有文件 | 小文件合并以块组织分片 | - | 复杂 | 不支持 | 不支持 | 块存储多份,主辅灾备 | HTTP API | 少 | C++ |
MFS | 大于64K | 分片存储 | Master节点占用内存较高 | - | 支持 | 支持 | 多点备份,动态冗余 | 使用FUSE挂载 | 较多 | Perl |
HDFS | 大文件 | 大文件分片块存储 | - | 简单 | 支持 | 支持 | 多副本 | 原生API | 较多 | Java |
Ceph | 对象大文件 | OSD一主多从 | - | 复杂 | 支持 | 支持 | 多副本 | 原生API | 较少 | C++ |
MogileFS | 海量小图片 | - | 高 | 复杂 | 支持 | 不支持 | 动态冗余 | 原生API | 文档少 | Perl |
ClusterFS | 大文件 | - | - | 简单 | 支持 | 支持 | - | - | 多 | C |
- GitHub项目主页:https://github.com/happyfish100/fastdfs
FastDFS客户端与服务器端交互原理
FastDFS+Nginx整合
- 架构图
- 安装FastDFS
mkdir /source
cd /source
yum install -y gcc gcc-c++ make cmake wget libevent
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.35.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.10.tar.gz
tar -zxvf V1.0.35.tar.gz
tar -zxvf V5.10.tar.gz
cd libfastcommon-1.0.35
./make.sh
./make.sh install
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
cd ../
cd fastdfs-5.10/
./make.sh
./make.sh install
cd ../
rm -rf libfastcommon-1.0.35
rm -rf fastdfs-5.10
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
mkdir -p /data/fdfs/tracker
mkdir -p /data/fdfs/storage
ln -s /usr/bin/stop.sh /usr/local/bin/stop.sh
ln -s /usr/bin/restart.sh /usr/local/bin/restart.sh
- 修改配置文件
修改跟踪器配置文件:
base_path=/data/fdfs/tracker
修改存储器配置文件:
base_path=/data/fdfs/storage
store_path0=/data/fdfs/storage
tracker_server=192.168.80.3:22122
修改客户端配置文件:
base_path=/data/fdfs/client
tracker_server=192.168.80.3:22122
- 启动
/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_storaged start
netstat -tunlap | grep :22122
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 7247/fdfs_trackerd
tcp 0 0 192.168.80.3:22122 192.168.80.3:39318 ESTABLISHED 7247/fdfs_trackerd
tcp 0 0 192.168.80.3:39318 192.168.80.3:22122 ESTABLISHED 7444/fdfs_storaged
启动后要查看状态, 出现 active (exited)
字样可以尝试重启服务。
- 测试
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /source/FastDFS_v5.05.tar.gz
group1/M00/00/00/wKhQA1ysjSGAPjXbAAVFOL7FJU4.tar.gz
文件存储在:
ll /data/fdfs/storage/data/00/00/wKhQA1ysjSGAPjXbAAVFOL7FJU4.tar.gz
- 安装Nginx并配置模块
# 安装Nginx需要的pcre(Perl兼容正则表达式)库,允许Nginx使用rewrite模块提供URL重写功能。
yum install pcre pcre-devel perl-ExtUtils-Embed -y
# 安装openssl-devel,允许Nginx提供HTTPS服务。
yum install openssl-devel -y
# 下载软件包
cd /source
wget http://59.80.44.46/nginx.org/download/nginx-1.14.2.tar.gz
wget http://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
# 解压软件包
tar xvf nginx-1.14.2.tar.gz
tar xvf fastdfs-nginx-module_v1.16.tar.gz
# 创建必要的软连接
ln -s /usr/include/fastdfs/ /usr/local/include/fastdfs
ln -s /usr/include/fastcommon/ /usr/local/include/fastcommon
cp FastDFS/conf/http.conf /etc/fdfs/
cp FastDFS/conf/mime.types /etc/fdfs/
cp fa