分布式文件系统
- 概念:分布式文件系统(Distributed File System,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分布在网络上任意位置的资源提供一个逻辑上的树形文件系统结构,从而使用户访问分布在网络上的共享文件更加简便。单独的 DFS共享文件夹的作用是相对于通过网络上的其他共享文件夹的访问点。
- 优点
- 一台计算机的文件系统处理能力扩充到多台计算机同时处理
- 一台计算机挂了还有另外副本计算机提供数据
- 每台计算机可以放在不同的地域这样用户可以就近访问,提高访问速度
FastDFS
-
概念:FastDFS是用C语言编写的一款开源的分布式文件系统,由淘宝架构师余庆编写并开源。专为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容,注重高可用高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传和下载等服务
-
优点:
- NFS、GFS都是通用的分布式文件系统,通用的优点是开发体验好,但是系统复杂度高,性能一般,而专用的分布式文件系统虽然开发体验差,但是系统的复杂度低性能高。
- 非常适合存储图片等小文件,FastDFS不对文件进行分块,所以就没有分块合并的开销,FastDFS网络通信采用socket,通信速度很快
-
Tracker:Tracker Server作用是负载均衡和调度,通过Tracker Server在文件上传时可以根据一些策略找到storage Server提供文件上传服务。可以将Tracker称为追踪服务器或调度服务器。
-
Storage:Storage Server作用是文件存储,客户端上传文件最终在Storage服务器上,Storage Server没有实现自己的文件系统而是使用操作系统的文件系统来管理文件。可以将Storage称为存储服务器。采用分组存储方式,由一个或者多个组构成。不同组的Storage Server之间不会互相通信,同组之间进行文件同步,可横向扩容。
-
Storage状态收集:Storage Server会连接集群中所有的Tracker Server,定时向它们报告自己的状态,包括磁盘剩余空间,文件同步状况,文件上传下载次数等统计信息。
文件上传流程
- 客户端上传文件后,存储服务器将文件id返回给客户端,此文件id用于以后访问该文件的索引信息。文件的索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名
group1/M00/02/44/wasjklixchnnawposNUBYUIJK45612.sh
- 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存
- 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store path对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推
- 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储文件
- 文件名 :与文件上传时不同。是由存储服务器特定信息生成,文件名包含:源存储服务器IP地址,文件创建时间戳,文件大小,随机数和文件扩展名等信息。
文件下载流程
——FastDFS安装配置
只能在Linux下安装,没有提供windows安装
重点:fastdfs6.02,fastdfs-nginx-module-1.21,libfastcommon-1.0.41,nginx-1.18.0,版本不一致可能会出错,本人已踩坑
-
安装前置依赖:
yum install gcc libevent libevent-devel-y
-
libfastcommon公共函数库安装:
- 地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.41.tar.gz
- 上传到 /opt 下解压:
tar -zxvf libfastcommon-1.0.38.tar.gz
- 编译:
[root@localhost libfastcommon-1.0.38]# ./make.sh
- 安装:
./make.sh install
-
FastDFS安装:
- 地址:https://github.com/happyfish100/fastdfs/archive/V6.02.tar.gz
- 上传到 /opt下解压:
tar -zxvf fastdfs-5.11.tar.gz
- 编译:
[root@localhost fastdfs-5.11]# ./make.sh
(编译失败执行:yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
) - 安装:
./make.sh install
- 安装成功后,/usr/bin 目录中会存在 fdfs_appender_test 等文件(在任何目录下都可执行fdfs命令)
- /etc/fdfs 中存放fdfs配置文件(必须放在该目录下,否则没办法启动)
[root@localhost fdfs]# ls
client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample
-
将 /fastdfs-5.11/conf/ 目录下的http.conf和mime.types文件拷贝到 /etc/fdfs/
[root@localhost conf]# cp http.conf /etc/fdfs/
[root@localhost conf]# cp mime.types /etc/fdfs/
-
tracker配置文件:
/etc/fdfs 复制 tracker.conf.sample 为 tracker.conf,修改两处
# the base path to store data and log files
base_path=/home/fastdfs/tracker(若没有文件夹即创建)
- storage配置文件
1. 组名:group_name=group1
2. 端口:port=23000
3. 向tracker心跳间隔秒:heart_beat_interval=30
#########以下更改##############
4. storage基础目录:base_path=/home/fastdfs/storage
5. 磁盘存储目录:store_path0=/home/fastdfs(多个磁盘定义多个store_path)
6. 上报tracker的地址:tracker_server=192.168.43.55:22122(多个tracker配置多个地址,勿用“,”隔开)
- 启动和停止 /usr/bin(任意路径下)
- tracker脚本:
fdfs_trackerd /etc/fdfs/tracker.conf start
- storage脚本:
fdfs_storaged /etc/fdfs/storage.conf start
- tracker脚本:
——集成Nginx安装
-
扩展模块fastdfs-nginx-module-1.21安装:
- 地址:https://github.com/happyfish100/fastdfs-nginx-module/tree/V1.21
- 上传解压:
unzip fastdfs-nginx-module-1.21
-
Nginx安装:
- 地址:http://nginx.org/download/nginx-1.18.0.tar.gz
- 安装前置环境:
- 安装gcc:
yum install gcc-c++
- 安装pcre:
yum install -y pcre pcre-devel
- 安装openssl:
yum install -y openssl openssl-devel
- 安装zlib:
yum install -y zlib zlib-devel
- 安装gcc:
- 集成 fastdfs-nginx-module:
[root@localhost nginx-1.18.0]./configure --prefix=/usr/local/nginx_fdfs --add-module=/opt/fastdfs-nginx-module-master/src
- 编译:
[root@localhost nginx-1.18.0]# make
- 安装:
[root@localhost nginx-1.18.0]# make install
-
扩展模块下mod_fastdfs.conf配置文件修改
# 需要手动创建该目录
base_path=/home/fastdfs/nginx_mod
...
tracker_server=192.168.43.55:22122
...
url_have_group_name = true
...
store_path0=/home/fastdfs
- 将mod_fastdfs.conf 文件拷贝到 /etc/fdfs/:
cp mod_fastdfs.conf /etc/fdfs/
- 修改 /usr/local/nginx_fdfs 下的配置文件nginx.conf
# 增加以下配置
location ~ /group[1-9]/M0[0-9] {
ngx_fastdfs_module;
}
- 启动集成fastdfs模块的Nginx:
/usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf
如果出现错误,在 /usr/local/nginx_fdfs/logs 和 /home/fastdfs/nginx_mod 中会有日志