前言
天猫、淘宝等购物网站,海量的商品图片和视频,是如何存储的?当用户访问量大时,又如何保障下载速度?分布式文件系统就是用来解决这些问题的。
那么分布式文件系统该如何应用呢?别急,明天袁老师就会率领大家来学习这些十分实用的技能:
分布式文件系统概述
支流的分布式文件系统的介绍
重点介绍 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 解决大容量存储和负载平衡的问题。