前言
天猫、淘宝等购物网站,海量的商品图片和视频,是如何存储的?当用户访问量大时,又如何保障下载速度?分布式文件系统就是用来解决这些问题的。
那么分布式文件系统该如何应用呢?别急,明天袁老师就会率领大家来学习这些十分实用的技能:
分布式文件系统概述
支流的分布式文件系统的介绍
重点介绍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称为存储服务器。
- Tracker集群
FastDFS集群中的Tracker Server能够有多台,Tracker Server之间是互相平等关系同时提供服务,Tracker Server不存在单点故障。客户端申请Tracker Server采纳轮询形式,如果申请的Tracker无奈提供服务则换另一个Tracker。 - Storage集群
Storage集群采纳了分组存储形式。Storage集群由一个或多个组形成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage Server之间是平等关系,不同组的Storage Server之间不会互相通信,同组内的Storage Server之间会相互连接进行文件同步,从而保障同组内每个Storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是统一的。
采纳分组存储形式的益处是灵便、可控性较强。比方上传文件时,能够由客户端间接指定上传到的组也能够由Tracker进行调度抉择。一个分组的存储服务器拜访压力较大时,能够在该组减少存储服务器来裁减服务能力(纵向扩容)。当零碎容量有余时,能够减少组来裁减存储容量(横向扩容)。
- Storage状态收集
Storage Server会连贯集群中所有的Tracker Server,定时向他们报告本人的状态,包含磁盘残余空间、文件同步情况、文件上传下载次数等统计信息。 - 文件上传流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于当前拜访该文件的索引信息。文件索引信息包含:组名,虚构磁盘门路,数据两级目录,文件名。
组名
文件上传后所在的Storage组名称,在文件上传胜利后由Storage服务器返回,须要客户端自行保留。
虚构磁盘门路
Storage配置的虚构门路,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录
Storage服务器在每个虚构磁盘门路下创立的两级目录,用于存储数据文件。
文件名
与文件上传时不同。是由存储服务器依据特定信息生成,文件名蕴含:源存储服务器IP地址、文件创建工夫戳、文件大小、随机数和文件拓展名等信息。
- 文件下载流程
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%E3%80%82
(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 install
mkdir -p /usr/lib64
mkdir -p /usr/lib
mkdir -p /usr/include/fastcommon
install -m 755 libfastcommon.so /usr/lib64
install -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/fastcommon
if [ ! -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/fastdfs
base_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.conf
group_name=group1
storage存储服务器端口
port=23000
向tracker心跳距离(秒)
heart_beat_interval=30
storage根底目录(目录不存在,须要自行创立)
base_path=/home/yuqing/fastdfs
base_path=/home/fastdfs
store寄存文件的地位(store_path)。能够了解一个磁盘一个store_path,多个磁盘多个store_path
store_path0=/home/yuqing/fastdfs
store_path0=/home/fastdfs/fdfs_storage
如果有多个挂载磁盘,则定义多个store_path*属性,如下:
store_path1=...
store_path2=...
配置tracker服务器IP
tracker_server=192.168.230.131:22122
如果有多个则配置多个tracker
tracker_server=192.168.230.xxx:22122
(3)创立store寄存文件的目录,须要自行创立。
[root@user ~]# mkdir /home/fastdfs/fdfs_storage
复制代码
1.
2.
(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解决大容量存储和负载平衡的问题。