Linux之Fastdfs
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 # 给予执行权限