分布式文件系统是指可以将用户上传的很多很多文件保存在多台计算机上,主要解决单台服务器硬盘容量不够用问题,并且能够做到数据传输的负载均衡、以及数据存储的主从备份。
FastDFS是一个轻量级、高性能的开源分布式文件系统包括文件存储、文件同步、文件访问(上传、下载)、存取负载均衡、在线扩容、相同内容只存储一份等功能,适合有大容量存储需求的应用或系统。做分布式系统开发时,其中要解决的一个问题就是图片、音视频、文件共享的问题,分布式文件系统正好可以解决这个需求。
流行的开源分布式文件系统有很多:mogileFS;fastDFS;mooseFS…
1、FastDFS的架构
FastDFS两个主要的角色:Tracker Server 和 Storage Server ,相互独立,不进行相互通信。
Tracker Cluster:跟踪服务器的集群,有一组Tracker Server(跟踪服务器)组成。
Storage Cluster :存储集群,有多组 Storage Server(存储服务器)组成。
Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。
Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息
Group:文件组,也可以称为卷。同组内服务器上的文件是完全相同的,做集群时往往一个组会有多台服务器,上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务器,保存的数据不同,而且相互独立,不进行通信。
meta data:文件相关属性,键值对(Key Value Pair)方式,如:width=1024, height=768。
2、FastDFS文件上传流程
Client通过Tracker server查找可用的Storage server。
Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
上传完成,Storage server返回Client一个文件ID,文件上传结束。
3、FastDFS的下载流程
Client通过Tracker server查找要下载文件所在的的Storage server。
Tracker server向Client返回包含指定文件的某个Storage server的IP地址和端口号。
Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并指定要下载文件。
下载文件成功。
4、CentOS7下搭建FastDFS
4.1、准备的资料
需要nginx和fastDFS的相关资料
对于.tar.gz的文件,可以采用tar -zxvf xxxx.xx.tar.gz -C /opt/module
对于.zip的文件,可以采用unzip xxxx.zip -d /opt/module
4.2、单节点FastDFS的安装
统一在root账号下安装。
(1)安装gcc
yum -y install gcc gcc-c++ autoconf make
(2)安装libevent
yum -y install libevent
(3)安装libfastcommon-master
unzip libfastcommon-master.zip //解压
cd libfastcommon-master //进入文件下
./make.sh //编译
./make.sh install //安装
到64位的lib下复制文件到/usr/lib
cp /usr/lib64/libfastcommon.so /usr/lib
(4)安装fastdfs-6.0.6
cd到fastdfs-6.0.6的目录下,
然后就开始执行./make.sh和./make.sh install
紧接着,系统会把文件安装到/usr/bin目录下,然后
然后,cd /etc/fdfs,拷贝fastDFS的相应文件到/etc/fdfs
最好配置/etc/fdfs下面的文件:
mkdir /fastdfs/tracker -p
cd /fastdfs
mkdir storage client
先配置tracker
vim /etc/fdfs/tracker.conf
base_path的值改为/fastdfs/tracker
启动配置,启动/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf ,重启/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
接下来storage
vim /etc/fdfs/storage.conf
base_path的值改为/fastdfs/storage, group_name的值改为boye, store_path0的值改为/fastdfs/storage,tracker_server的值改为192.168.138.101:22122
启动配置,启动/usr/bin/fdfs_trackerd /etc/fdfs/storage.conf ,重启/usr/bin/fdfs_trackerd /etc/fdfs/storage.conf restart
最后client
vim /etc/fdfs/storage.conf
base_path的值改为/fastdfs/client,tracker_server的值改为192.168.138.101:22122
测试
/usr/bin/sdfs_test /etc/fdfs/tracker.conf upload /opt/software/exam.jpg
(5)安装fastdfs-nginx-module
解压文件后,cd /fastdfs-nginx-module/src文件目录下,修改config,去掉里面所有的local,最后得到如图
(6)安装nginx
安装前,得需要安装pcre库(一些正则表达式库)和zlib以及openssl。
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
解压nginx的包后,开始重要的安装配置环节。
Nginx的配置
①编译前配置(复制粘贴到控制台)
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/opt/module/fastdfs-nginx-module/src
②编译和安装
make
make install
③环境配置
进入到/opt/module/fastdfs-nginx-module/src下,cp mod_fastdfs.conf /etc/fdfs,然后在/etc/fdfs目录下,修改mod_fastdfs.conf文件
base_path的值改为/fastdfs/tmp(记得要在fastdfs目录下mkdir tmp), group_name的值改为boye, url_have_group_name的值改为true,tracker_server的值改为192.168.138.101:22122, store_path0的值改为/fastdfs/storage
进入到/usr/local/nginx/conf目录下,然后修改nginx.conf,添加一个服务器,如图
保存配置后,mkdir /var/tmp/nginx -p
查看nginx的配置是否正确,/usr/local/nginx/sbin/nginx -t
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --zone=public --add-port=80/tcp --permanent
至此,整个搭建结束。