-
fastDFS
-
概念
-
是由不知道现在还是不是淘宝员工的余庆开发的系统
-
开源的轻量级分布式文件系统,针对文件进行管理,功能包括:文件存储,文件同步,文件访问。解决了大容量存储和负载均衡问题。
-
解决了冗余备份,负载均衡,线性扩容,注重高可用,高性能。
-
-
原理
-
用c语言编写的开源的轻量级分布式文件系统。fastdfs架构有三个角色:tracker-server,storage-server,client。 client向tracker发送请求,由tracker决定谁去存储或提供下载文件,然后将storage-server的IP与端口发送给客户端。
-
-
架构
-
-
跟踪服务器,主要负责调度工作,起到均衡作用,负责管理所有的storage和group,并于storage保持周期性心跳,storage会定期向tracker报告信息,会生成一个关系映射表。用来维护后端storage。
-
存储服务器,提供容量和备份;一组为单位,每个group内部都可以有多台storage。storage本身没有文件系统,而是利用系统本身划分出来的空间。也可以指定多个磁盘点的挂载路径。
-
client,对数据进行上传下载等动作的服务器。fastdfs提供了基本的访问接口,upload,download,append,delete。
-
-
-
上传流程
-
-
tracker-server选择storage的几种常见算法
-
round robin
-
所有组轮询
-
-
specified group
-
指定某一个确定的组
-
-
load balance
-
剩余存储空间多的group优先
-
-
-
文件路径与文件名称的格式
-
-
红色:组名,文件上传后所在storage的组名 黑色:虚拟磁盘路径与磁盘选项storage_path*=对应(默认为storage_path0=) 蓝色:storage在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。总共256*256个 绿色:由存储服务器根据特定规则生成的包含了一些元数据信息。
-
-
-
-
下载流程
-
-
同步时间管理
-
为了避免storage之间数据还未完成同步,就有客户端进行访问,造成访问文件没有或者被拒绝,tracker会根据每个存储服务器定时上传的信息来确定是否完成同步。
-
-
集成nginx
-
提供了fastdfs-nginx-module模块,利用该模块可以重定向到文件上传时的源服务器取文件,避免客户端因为复制延迟造成文件无法访问的错误。使用nginx后就可以使用web的方式来获取文件资源。
-
-
部署fastdfs
-
架构
-
-
所需软件包
-
fastdfs
-
libfastcommon
-
fastdfs-nginx-module
-
nginx
-
-
-
tracker-server与storage-server的部署都一样,只是启用的配置文件不一样,因此可以同步部署
-
安装libfastcommon
-
编译环境
-
gcc* libevent libtool zlib-devel pcre-devel
-
-
处理内核安全机制与防火墙
-
解压后无需配置进行编译安装即可
-
./make.sh ./make.sh install
-
-
将/usr/lib64下libfastcommon.so拷贝到/usr/lib下
-
cp /usr/lib64/libfast* /usr/lib
-
-
-
安装主程序fastdfs
-
依赖于libfastcommon的编译环境
-
解压后直接进行编译安装即可
-
./make.sh ./make.sh install
-
安装完毕后到/etc/init.d/查看是否生成了tracker与storage的服务控制脚本。
-
-
再到/etc/fdfs/下查看是否生成了对应的配置文件
-
-
再到/usr/bin搜寻fdfs开头的命令文件确认已经正常安装。
-
-
-
在101与102启用tracker-server的配置文件
-
需要将例子文件拷贝一份将.sample去掉
-
需要修改的参数
-
base_path=/fastdfs/tracker
-
自定义日志和数据存放目录
-
-
storage_group=group1
-
确保等号后面的字符串与storage配置文件中的一致,确认该tracker-server管理改组存储服务器。
-
-
-
需要注意的参数
-
disable = false
-
双重否定表示肯定
-
-
port=22122
-
默认监听的服务端口
-
-
-
将自定义的数据存放目录创建出来
-
mkdir -p /fastdfs/tracker
-
-
启动tracker-server
-
/etc/init.d/fdfs_trackerd start
-
启动后可以检查进程与存放目录看是否有对应的进程与对应的目录生成。
-
-
-
在103与104启用storage-server的配置文件
-
同样的需要将模板文件拷贝将.sample去掉
-
配置文件修改的参数
-
base_path=/fastdfs/tracker
-
自定义日志和数据存放目录
-
-
storage_path0=/fastdfs/storage
-
第一个存储目录
-
-
指定tracker-server的IP与端口,支持域名
-
tracker_server=192.168.10.101:22122
-
tracker_server=192.168.10.102:22122
-
-
group_name=group1
-
与tracker-server保持一致
-
-
http.server_port=8888
-
http访问文件的端口,实际上是fastdfs-nginx-module去利用nginx识别定位文件信息的端口,是nginx程序用的而不是客户端网页访问端口
-
-
-
配置文件需要注意的参数
-
disable = false
-
双重否定表示肯定启用
-
-
port=23000
-
默认监听的服务端口
-
-
-
同样的将storage需要的目录创建出来
-
mkdir -p /fastdfs/storage
-
-
启动服务查看进程
-
-
任意一个安装了libfastcommon与fastdfs的都可以当作客户端
-
以101为例
-
启用/etc/fdfs/下的client的配置文件,拷贝后将.sample去掉。
-
修改配置文件
-
base_path=/fastdfs/client
-
tracker_server=192.168.10.101:22122
-
tracker_server=192.168.10.102:22122
-
-
-
测试
-
利用命令选择任意一文件进行上传
-
上传成功后会生成该文件对应的路径与文件名
-
-
该命令生成的信息会更加详细
-
-
-
-
-
到此为止一个简陋的fastdfs系统就已经搭建完毕
-
无法通过web页面去访问
-
无法避免复制延迟导致的文件无法访问
-
-
解决办法
-
为所有storage节点安装fastdfs-nginx-module模块
-
编译环境依赖于前面的环境
-
解压模块源码包后进入到安装目录修改源码文件
-
src中的config文件
-
去掉红圈中的local
-
-
-
编译安装nginx
-
解压后进入安装目录
-
创建进程用户
-
useradd -M -s /sbin/nologin nginx
-
-
拷贝头文件到修改源代码的目录,在集成nginx与fastdfs-nginx-module时,nginx集成选项需要这些头文件。
-
-
配置参数
-
-
该目录就是修改配置模块源代码的目录
-
-
-
编译与编译安装
-
make && make install
-
-
优化为全局命令
-
-
-
-
配置fastdfs
-
将fastdfs-nginx-module解压目录src下的mod_fastdfs.conf配置文件拷贝到/etc/fdfs目录中。并修改配置文件参数。
-
tracker_server=192.168.10.101:22122
-
tracker_server=192.168.10.102:22122
-
uri_have_group_name=true
-
很关键,决定了url的生成方式
-
-
store_path=/fastdfs/storage
-
自定义数据路径
-
-
-
拷贝fastdfs解压目录conf下的文件到/etc/fdfs中
-
http.conf
-
通过web访问需要
-
-
mime.types
-
依赖的配置环境
-
-
-
创建软链接将文件存储目录连接到实际存放数据的目录
-
-
为了方便系统管理与提升性能
-
-
-
在nginx配置文件中添加参数
-
在server单元中加入location
-
-
即可启用该模块
-
-
-
-
最后重启各个服务重新加载配置文件
-
最后在拉出一台服务器搭建nginx做反向代理,配置uptream与使用即可,这里不做过多讲解。
-
仍需使用生成的路径与文件名,只不过更换IP地址
-
-
-
-
-
-
将以上所有复制到xmind即可形成条理性笔记。