前言
天猫、淘宝等购物网站,海量的商品图片和视频,是如何存储的?当用户访问量大时,又如何保证下载速度?分布式文件系统就是用来解决这些问题的。
那么分布式文件系统该如何使用呢?别急,今天就学习这些非常实用的技能:
- 分布式文件系统概述
- 主流的分布式文件系统的介绍
- 重点介绍FastDFS架构
- 掌握FastDFS的安装和配置
FastDFS概述
1.分布式文件系统
分布式文件系统(Distributed File System)是一个软件/软件服务器,此软件可以用来管理在多个服务器节点中的文件(这些服务器节点通过网络相连并构成一个庞大的文件存储服务器集群,即这些服务器节点都是用来存储文件资源的,且用DFS来管理这些文件)。而传统文件系统与分布式文件系统的对比,有如下区别:
经过对比,我们会发现传统文件系统存在如下缺点:
若用户数量多,则IO操作会很频繁 则对磁盘的访问压力会较大;
若磁盘故障,则可能会造成数据的丢失;
一个磁盘的存储容量有限。
2.主流的分布式文件系统
2.1 HDFS
Hadoop Distributed File System,Hadoop分布式文件系统。这是一个高容错的系统,适合部署到廉价的机器上,能提供高吞吐量的数据访问,非常适合大规模数据应用。HDFS采用主从结构,一个HDFS是由一个name节点和N个data节点组成。name节点储存元数据,一个文件分割成N份存储在不同的data节点上。
2.2 GFS
Google File System,可扩展的分布式文件系统,用于大型的,分布式的,对大量数据进行访问的应用。GFS可以运行于廉价的普通硬件上,可以提供容错功能,它可以给大量的用户提供总体性能较高的服务。GFS采用主从结构,一个GFS集群由一个master和大量的chunkserver(分块服务器)组成,一个文件被分割若干块,分散储存到多个分块server中。
2.3 FastDFS
FastDFS由淘宝资深架构师余庆编写并开源,使用C语言编写而成。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标。使用FastDFS能够很容易搭建出一套高性能的文件服务器集群,实现文件上传、下载等服务。
HDFS和GFS都是通用的文件系统,他们的优点是开发体验好,但是系统的复杂度较高,性能也一般。相比之下,专用的分布式文件系统体验差,但是复杂度低,性能也高。尤其是FastDFS,特别适合图片、小视频等小文件。因为FastDFS对文件是不分割的,所以没有文件合并的开销。并且FastDFS网络通信使用Socket,速度也较快。
基于FastDFS的诸多优点,所以接下来我们就重点给大家介绍FastDFS的使用。
FastDFS架构
FastDFS架构包括Tracker Server和Storage Server。客户端请求Tracker Server进行文件上传、下载,通过Tracker Server调度最终由Storage Server完成文件上传和下载。
Tracker Server作用是负载均衡和调度,通过Tracker Server在文件上传时可以根据一些策略找到Storage Server提供文件上传服务。可以将Tracker称为追踪服务器或调度服务器。
Storage Server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage Server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将Storage称为存储服务器。
1. Tracker集群
FastDFS集群中的Tracker Server可以有多台,Tracker Server之间是相互平等关系同时提供服务,Tracker Server不存在单点故障。客户端请求Tracker Server采用轮询方式,如果请求的Tracker无法提供服务则换另一个Tracker。
2. Storage集群
Storage集群采用了分组存储方式。Storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage Server之间是平等关系,不同组的Storage Server之间不会相互通信,同组内的Storage Server之间会相互连接进行文件同步,从而保证同组内每个Storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由Tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
3. Storage状态收集
Storage Server会连接集群中所有的Tracker Server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。
4. 文件上传流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
组名
文件上传后所在的Storage组名称,在文件上传成功后由Storage服务器返回,需要客户端自行保存。
虚拟磁盘路径
Storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录
Storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名
与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
5. 文件下载流程
Tracker根据请求的文件路径即文件ID来快速定义文件,比如请求下边的文件:
以上请求处理过程如下:
- 通过组名Tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
- 存储服务器根据文件存储“虚拟磁盘路径”和“数据两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。
了解了FastDFS的运行原理之后,接下来我们就来开始进行FastDFS的安装及配置过程吧。
FastDFS安装及配置
1.FastDFS安装
1.1 安装gcc
使用yum命令安装gcc和gcc-c++,编译时需要使用。
[root@user ~]# yum install -y gcc gcc-c++
说明:Linux系统下使用gcc编译C语言的代码,使用g++编译C++的代码。
1.2 安装libevent
使用yum安装libevent,运行时需求。
[root@user ~]# yum -y install libevent
1.3 安装libfastcommon
libfastcommon是由FastDFS官方提供的,在GitHub开源的一个C基础库,包含了FastDFS运行所需要的一些基础库。它提供了ini文件解析、logger、64位唯一整数生成器、字符串处理、socket封装、对象池、skiplist、定时任务调度器、时间轮等等。在这一步的安装过程中,要经历如下几个小的安装步骤。
(1)访问libfastcommon包下载地址:
https://github.com/happyfish100/libfastcommon。
(2)将libfastcommon-1.0.39.zip安装包上传到CentOS的/opt目录下。
# 1.Windows系统使用Xftp工具或者lrzsz工具将libfastcommon-1.0.39.zip安装包上传至CentOS系统# 2.Mac系统使用scp命令将libfastcommon-master.zip安装包上传至CentOS系统scp /Users/yuanxin/Downloads/libfastcommon-1.0.39.zip root@192.168.230.131:/opt
(3)在CentOS系统中安装解压zip包的命令。
[root@user ~]# yum install -y unzip
(4)通过unzip命令解压libfastcommon-1.0.39.zip压缩包,获取libfastcommon-1.0.39目录。
[root@user ~]# unzip libfastcommon-1.0.39.zip
(5)进入libfastcommon-1.0.39目录,执行make.sh脚本文件。
[root@user ~]# cd libfastcommon-1.0.39[root@user libfastcommon-1.0.39]# ./make.sh
(6)如果执行make.sh脚本时,提示“权限不够”,则需要对make.sh文件进行授权。然后再重新执行make.sh脚本文件。
[root@user libfastcommon-1.0.39]# ./make.sh-bash: ./make.sh: 权限不够[root@user libfastcommon-1.0.39]# chmod 777 make.sh[root@user libfastcommon-1.0.39]# ./make.sh
(7)然后执行安装命令。
[root@user libfastcommon-1.0.39]# ./make.sh installmkdir -p /usr/lib64mkdir -p /usr/libmkdir -p /usr/include/fastcommoninstall -m 755 libfastcommon.so /usr/lib64install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h fast_allocator.h fast_buffer.h skiplist.h multi_skiplist.h flat_skiplist.h skiplist_common.h system_info.h fast_blocked_queue.h php7_ext_wrapper.h id_generator.h char_converter.h char_convert_loader.h common_blocked_queue.h multi_socket_client.h skiplist_set.h fc_list.h json_parser.h /usr/include/fastcommonif [ ! -e /usr/lib/libfastcommon.so ]; then ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so; fi
说明:libfastcommon安装好后会在/usr/lib64目录下生成libfastcommon.so库文件。
(8)将/usr/lib64目录下的libfastcommon.so库文件拷贝到/usr/lib目录下。
[root@user libfastcommon-1.0.39]# cd /usr/lib64[root@user lib64]# cp libfastcommon.so /usr/lib
1.4 安装Tracker
在这一步的安装过程中,也要经历如下几个安装步骤。
(1)将fastdfs-5.11.tar.gz安装包上传到CentOS的/opt目录下。
# 1.Windows系统使用Xftp工具或者lrzsz工具将fastdfs-5.11.tar.gz安装包上传至CentOS系统# 2.Mac系统使用scp命令将fastdfs-5.11.tar.gz安装包上传至CentOS系统scp /Users/yuanxin/Downloads/fastdfs-5.11.tar.gz root@192.168.230.131:/opt
(2)解压fastdfs-5.11.tar.gz安装包。
[root@user opt]# tar -zxvf fastdfs-5.11.tar.gz
(3)进入fastdfs-5.11目录,执行make.sh脚本文件。
[root@user opt]# cd fastdfs-5.11[root@user fastdfs-5.11]# ./make.sh[root@user fastdfs-5.11]# ./make.sh install
(4)安装成功将fastdfs-5.11安装目录下的conf目录下的所有文件拷贝到/etc/fdfs/下。
[root@user fastdfs-5.11]# cp /opt/fastdfs-5.11/conf/* /etc/fdfs/
2.FastDFS配置
2.1 Tracker配置
在这一步的安装过程中,要经历如下几个安装步骤。
(1)打开/etc/fdfs/目录下的tracker.conf配置文件。
[root@user ~]# vim /etc/fdfs/tracker.conf
(2)修改base_path属性的值,将base_path属性的取值设置成/home/fastdfs。
# tracker追踪者服务器端口port=22122# 存储数据和日志文件的基础目录(Tracker运行时会向此目录存储storage的管理数据)# base_path=/home/yuqing/fastdfsbase_path=/home/fastdfs
(3)基础目录/home/fastdfs是不存在的,需要自行进行创建。
[root@user ~]# mkdir /home/fastdfs
2.2 Storage配置
在这一步的安装过程中,要经历如下几个安装步骤。
(1)打开/etc/fdfs/目录下的storage.conf配置文件。
[root@user ~]# vim /etc/fdfs/storage.conf
(2)修改base_path属性、store_path0属性和tracker_server属性的取值。
# 配置组名# 此存储服务器所属的组的名称。# 注释或删除从tracker服务器获取的该项,此时在tracker.conf中必须将use_storage_id设置为true,并且必须正确配置storage_ids.confgroup_name=group1# storage存储服务器端口port=23000# 向tracker心跳间隔(秒)heart_beat_interval=30# storage基础目录(目录不存在,需要自行创建)# base_path=/home/yuqing/fastdfsbase_path=/home/fastdfs# store存放文件的位置(store_path)。可以理解一个磁盘一个store_path,多个磁盘多个store_path# store_path0=/home/yuqing/fastdfsstore_path0=/home/fastdfs/fdfs_storage# 如果有多个挂载磁盘,则定义多个store_path*属性,如下:# store_path1=...# store_path2=...# 配置tracker服务器IPtracker_server=192.168.230.131:22122# 如果有多个则配置多个tracker# tracker_server=192.168.230.xxx:22122
(3)创建store存放文件的目录,需要自行创建。
[root@user ~]# mkdir /home/fastdfs/fdfs_storage
(4) 启动服务
启动服务时要经历如下几个小的步骤。
启动tracker。
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
启动storage。
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
查看所有运行的端口。
netstat -ntlp
结语
关于FastDFS安装和配置的教程就介绍到这里了,请大家赶紧去试一试能不能徒手搭建起一个FastDFS的开发环境吧。
如果你还想继续进行FastDFS后续内容的学习,接下来我们还会给大家继续更新FastDFS的文件存储、文件同步、文件访问(文件上传、文件下载)等相关知识的内容,以及如何使用FastDFS解决大容量存储和负载均衡的问题。