Fastdfs
简介
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。
FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标
使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
架构
Fastdfs由两部件组成
Tracker server
其主要用来做负载均衡以及调度
客户端通过Tracker server的策略找到Storage server进行文件的上传下载
Storage server
客户端通过Tracker server上传的文件最终保存到Storage server中
Storage server没有自己的文件系统而是利用操作系统进行文件存储
服务端角色
Tracker
其可以组件集群用来检测 每个Tracker节点地位平等 通过Tracker检测Storage节点状态
Storage
Storage之间可以组件集群 集群可以分多个组 每个组之间的信息不同 但是组内成员的信息相同 组成员地位一致无主从概念之分
Fastdfs交互信息
上传文件
客户端上传文件给服务器之后 服务器返回一个ID给客户端 客户端通过ID中的文件索引来访问存储在服务端的数据
文件索引:组号 虚拟磁盘路径 数据两级目录 文件名
组名:文件上传后所在的 storage 组名称,在文件上传成功后有 storage 服务器返回, 需要客户端自行保存。
虚拟磁盘路径:storage 配置的虚拟路径,与磁盘选项 store_path*对应。如果配置了 store_path0 则是 M00,如果配置了 store_path1 则是 M01,以此类推。
数据两级目录:storage 服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据 文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储 服务器 IP 地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
文件下载
客户端通过tracker端返回的storage的IP去寻找storage
通过生成的ID去向服务端进行文件查找
服务端通过ID返回对应的数据
Fastdfs配置
依赖包下载
[root@SR~]# wget -c http://nginx.org/download/nginx-1.17.7.tar.gz # 下载nginx
[root@SR~]# wget -c "https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz" -O fastdfs-6.06.tar.gz # 下载fastdfs
[root@SR~]# wget -c "https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz" -O fastdfs-nginx-module-1.22.tar.gz # 下载 fastdfs-nginx-module
[root@SR~]# wget -c "https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz" -O libfastcommon-1.0.43.tar.gz # 下载 libfastcommon
[root@SR ~]# yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel # 下载编译包
解压
[root@SR ~]# tar -xf fastdfs-6.06.tar.gz
[root@SR ~]# tar -xf fastdfs-nginx-module-1.22.tar.gz
[root@SR ~]# tar -xf libfastcommon-1.0.43.tar.gz
[root@SR ~]# tar -xf nginx-1.17.7.tar.gz
编译安装libfastcommon
[root@SR ~]# cd libfastcommon-1.0.43/
[root@SR libfastcommon-1.0.43]# ./make.sh && ./make.sh install # 编译安装
[root@SR libfastcommon-1.0.43]# ls /usr/lib64/ | grep libfastcommon # 检测安装是否成功
[root@SR libfastcommon-1.0.43]# ls /usr/lib/ | grep libfastcommon
配置fastdfs
编译安装
[root@SR fastdfs-6.06]# cd fastdfs-6.06/
[root@SR fastdfs-6.06]# ./make.sh && ./make.sh install
[root@SR fastdfs-6.06]# ls /usr/bin|grep fdfs
启用配置文件
[root@SR fdfs]# cd /etc/fdfs/ # 切换到fdfs目录
# 配置文件做备份
[root@SR fdfs]# cp client.conf.sample client.conf
[root@SR fdfs]# cp storage.conf.sample storage.conf
[root@SR fdfs]# cp tracker.conf.sample tracker.conf
修改tracker.conf配置文件
[root@SR fdfs]# mkdir -p /usr/bin/python3.6/fastdfs/tracker
[root@SR fdfs]# vim tracker.conf
base_path=/usr/bin/python3.6/fastdfs/tracker # 修改该目录为上述对应tracker目录
启动tracker
[root@SR fdfs]# /etc/init.d/fdfs_trackerd start # 启动服务
[root@SR fdfs]# ps -ef|grep fdfs # 检测启动状态
修改storage.conf配置文件
[root@SR fdfs]# mkdir -p /usr/bin/python3.6/fastdfs/storage
[root@SR fdfs]# vim storage.conf
base_path=/usr/bin/python3.6/fastdfs/storage
store_path0=/usr/bin/python3.6/fastdfs/storage
tracker_server=192.168.1.104:22122
启动storage
[root@SR fdfs]# /etc/init.d/fdfs_storaged start
[root@SR fdfs]# ps -ef | grep fdfs
修改client.conf配置文件
[root@SR fdfs]# vim client.conf
base_path=/usr/bin/python3.6/fastdfs/tracker
tracker_server=192.168.1.104:22122
使用方式
[root@SR ~]# fdfs_upload_file /etc/fdfs/client.conf /root/springboot.jpg
nginx
安装依赖包
[root@SR ~]# yum -y install pcre pcre-devel
添加模块
[root@SR ~]# cd nginx-1.17.7/
[root@SR nginx-1.17.7]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
fastdfs-nginx-module-1.22配置
[root@SR ~]# cd /root/fastdfs-nginx-module-1.22/src/
[root@SR src]# cp config config.bak #备份配置问
修改配置文件
[root@SR src]# vim config
:%s+/usr/local+/usr # 将config文件中的/usr/local替换成/usr
nginx添加模块
[root@SR nginx-1.17.7]# ./configure --add-module=/root/fastdfs-nginx-module-1.22/src/ # fastdfs-nginx-module-1.22/src 中src所在的路径
[root@SR nginx-1.17.7]# make && make install # 编译安装
修改fastdfs-ngin-module中的配置文件
[root@SR nginx-1.17.7]# cp /root/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
[root@SR nginx-1.17.7]# vim /etc/fdfs/mod_fastdfs.conf
connect_timeout=10
tracker_server=192.168.1.104:22122
url_have_group_name = true
store_path0=/usr/bin/python3.6/fastdfs/storage
复制fastdfd
[root@SR ~]# cp /root/fastdfs-6.06/conf/http.conf /etc/fdfs/
[root@SR ~]# cp /root/fastdfs-6.06/conf/mime.types /etc/fdfs/
修改nginx配置文件
[root@SR fdfs]# cd /usr/local/nginx/conf/
[root@SR conf]# cp nginx.conf nginx.conf.bak # 备份配置文件
[root@SR conf]# vim nginx.conf # 修改配置文件
server {
listen 80;
server_name 192.168.1.104;
location ~/group([0-9]) {
root /fastdfs/storage/data;
ngx_fastdfs_module;
}
}
[root@SR ~]# /usr/local/nginx/sbin/nginx # 启动nginx
设置开机启动服务
[root@SR fdfs]# vim /etc/rc.d/rc.local
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
/usr/local/nginx/sbin/nginx
[root@SR ~]# chmod +x /etc/rc.d/rc.local # 给予执行权限