首页 > 其他分享 >解密!FastDFS的安装及部署(实战篇)

解密!FastDFS的安装及部署(实战篇)

时间:2023-04-13 10:34:08浏览次数:51  
标签:文件 实战篇 fastdfs FastDFS 解密 Storage root libfastcommon

前言

天猫、淘宝等购物网站,海量的商品图片和视频,是如何存储的?当用户访问量大时,又如何保证下载速度?分布式文件系统就是用来解决这些问题的。

那么分布式文件系统该如何使用呢?别急,今天袁老师就会带领大家来学习这些非常实用的技能:

  • 分布式文件系统概述
  • 主流的分布式文件系统的介绍
  • 重点介绍FastDFS架构
  • 掌握FastDFS的安装和配置

FastDFS概述

1.分布式文件系统

分布式文件系统(Distributed File System)是一个软件/软件服务器,此软件可以用来管理在多个服务器节点中的文件(这些服务器节点通过网络相连并构成一个庞大的文件存储服务器集群,即这些服务器节点都是用来存储文件资源的,且用DFS来管理这些文件)。而传统文件系统与分布式文件系统的对比,有如下区别:

解密!FastDFS的安装及部署(实战篇)_Storage

经过对比,我们会发现传统文件系统存在如下缺点:

若用户数量多,则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完成文件上传和下载。

解密!FastDFS的安装及部署(实战篇)_服务器_02

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. 文件上传流程

解密!FastDFS的安装及部署(实战篇)_Server_03

客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。

解密!FastDFS的安装及部署(实战篇)_服务器_04

组名

文件上传后所在的Storage组名称,在文件上传成功后由Storage服务器返回,需要客户端自行保存。

虚拟磁盘路径

Storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。

数据两级目录

Storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。

文件名

与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

5. 文件下载流程

解密!FastDFS的安装及部署(实战篇)_Server_05

Tracker根据请求的文件路径即文件ID来快速定义文件,比如请求下边的文件:

解密!FastDFS的安装及部署(实战篇)_服务器_06

以上请求处理过程如下:

  • 通过组名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
复制代码

(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解决大容量存储和负载均衡的问题。

标签:文件,实战篇,fastdfs,FastDFS,解密,Storage,root,libfastcommon
From: https://blog.51cto.com/u_15739596/6182417

相关文章

  • SM4Utils加解密demo
    SM4Utils加解密demopackagecom.example.core.mydemo.sm4;importcn.org.bjca.utils.SM4Utils;publicclassSM4Test{publicstaticvoidmain(String[]args){Stringkey="77rTb25789srfbhulsjwnv==";Stringiv="BPEpTshuwas......
  • 解密prompt系列5. APE+SELF=自动化指令集构建代码实现
    上一章我们介绍了不同的指令微调方案,这一章我们介绍如何降低指令数据集的人工标注成本!这样每个人都可以构建自己的专属指令集,哈哈当然我也在造数据集进行时~介绍两种方案SELFInstruct和AutomaticPromptEngineer,前者是基于多样的种子指令,利用大模型的上下文和指令理解能力,......
  • 开源.NetCore通用工具库Xmtool使用连载 - 加密解密篇
    【Github源码】《上一篇》详细介绍了Xmtool工具库中的正则表达式类库,今天我们继续为大家介绍其中的加密解密类库。在开发过程中我们经常会遇到需要对数据进行加密和解密的需求,例如密码的加密、接口传输数据的加密等;当前类库中只封装了Base64、AES两种加密解密方法,因为C#提供了几......
  • 基于FPGA的AES加密解密vivado仿真,verilog开发,包含testbench
    1.算法描述         AES,高级加密标准,是采用区块加密的一种标准,又称Rijndael加密法.严格上来讲,AES和Rijndael又不是完全一样,AES的区块长度固定为128比特,秘钥长度可以是128,192或者256.Rijndael加密法可以支持更大范围的区块和密钥长度,Rijndael使用的密......
  • Flash加密解密(一)——doswf混淆还原
     研究了一段时间的加密解密技术,对比其他类型的软件加密,swf加密方法是非常有限的,想要彻底保护swf十分困难。而且随着技术的进步,个人认为swf加密技术难以抵挡解密技术的发展,只能在一定程度给予保护。这次主要带大家分析doswf中最简单的混淆处理。后续我会给大家介绍使用doswf最强加......
  • Flash加密解密(三)——特殊混淆让asv2010解析代码失败
    1.Flash加密解密(一)——doswf混淆还原2.Flash加密解密(二)——Doswf生成代码分析3.Flash加密解密(三)——特殊混淆让asv2010解析代码失败从前面两节的分析可以看出,脆弱的swf文件极其容易被一些现成的工具反编译回可执行源代码。一旦可以进行动态调试,那么这个文件将被他人掌控,即使你使用......
  • 加密与解密之加壳程序
    描述自己实现一个简单的加壳程序,能够对选取程序的代码段进行加密,并添加外壳部分,在运行时还原本文分为三个部分:外壳程序,加壳程序,和用户交互程序外壳程序写到Stub.dll中,方便同加壳程序共享数据,获取原程序的PE文件信息将数据段合并到代码段,方便加壳程序读取并添加到原程序中......
  • 加密与解密之二次开发
    描述二次开发的含义:通过直接编辑二进制,来修改已编译好的程序,实现目标功能本文的原程序模拟一个windows是最常见的采用事件循环机制的窗口程序,通过二次开发,给这个程序上锁,加上一个验证身份框,只有输对用户名密码,才能正常使用程序功能原程序创建一个窗口,加入事件循环,响应窗口......
  • 实战篇:使用rook在k8s上搭建ceph集群
    写在开篇“上一次,我发了一篇:《理论篇:让我们一起鲁克鲁克——rook(开源存储编排)》。这次,来一篇实战,使用rook在k8s上把ceph集群搞起来。后续,还会陆续分享如何对接k8s(作为k8s的后端存储)、以及分享一些在生产上的实践经验。”环境规划主机名IP角色数据磁盘k8s-a-mast......
  • C# DES AES 加密解密
    ///<summary>///加密解密帮助类///</summary>publicstaticclassEncryptHelper{#regiondes实现///<summary>///Des默认密钥向量///</summary>publicstaticbyte[]DesIv={0x12,0x34,0x56,0x78,0x90,0xAB,0xCD,0xEF......