一、FastDFS介绍


1.1.简介

  FastDFS是一款开源的高性能分布式文件系统(DFS)。主要功能:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size < 500MB)为载体的在线服务。

  FastDFS系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Clinet)。

 Tracker Server:跟踪服务器,主要做调节工作,起到均衡的作用;负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳。

  Storage Server:存储服务器。主要提供容量和备份服务器;以group为单位,每个group内可以有多台storage server,数据互为备份。

  Client客户端,上传下载数据的服务器,也就是我们自己的项目部署在的服务器。


FastDFS集群_第1张图片


1.2.FastDFS的存储策略

  为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是互相独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

  在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供的服务。当存储空间不足时或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将他们配置成一个新的卷,这样就扩大了存储系统的容量。


1.3.FastDFS的上传过程

  FastDFS向使用者提供基本的文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

   Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Trackre。

  当Tracker收到客户端上传文件请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。


FastDFS集群_第2张图片


1.4.FastDFS的文件同步

  写文件时,客户端将文件写至group内的一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内的其他的storage server。

  每个storage写文件后,会同时写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内的所有server的始终保持同步。

  Storage的同步进度会作为元数据的一部分汇报到tracker上,tracker在选择读storage的时候会以同步进度作为参考。


1.5.FastDFS的文件下载

  客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。


二、安装FastDFS环境


2.1.前言

  操作环境:Centos 7.4

    安装包下载到/server/tools下,解压到当前目录

  IP划分:

172.10.0.110    Tracker Server

172.30.0.111    Group1Storage Server

172.30.0.112    Group1Storage Server


2.2.下载安装libfasttcommon

  1. libfastcommon是从FastDFS和FastDHT中提取出来的公共C函数库,基础环境,安装即可。

  2. 下载

    wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

  3. 解压

    tar -zxvf V1.0.7.tar.gz

  4. 编译、安装

cd libfastcommon-1.0.7

./make.sh

./make.sh install

   5.libfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

 


2.3.下载FastDFS

1. 下载

wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

2. 解压

tar -zxvf V5.05.tar.gz

3. 编译、安装

cd fastdfs-5.05

./make.sh

./make.sh install

4. 默认安装的相应文件与目录

A. 服务器脚本

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_tracker

B. 配置文件

/etc/fdfs/client.conf.sample

/etc/fdfs/storage.conf.sample

/etc/fdfs/tracker.conf.sample

C. 命令工具在 /usr/bin/ 目录下 

5.  FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin 但实际命令安装在 /usr/bin/

ln -s /usr/bin/fdfs_trackerd   /usr/local/bin

ln -s /usr/bin/fdfs_storaged   /usr/local/bin

ln -s /usr/bin/stop.sh         /usr/local/bin

ln -s /usr/bin/restart.sh      /usr/local/bin

 

2.4. 配置FastDFS跟踪器(Tracker

1. 进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf

cd /etc/fdfs

cp tracker.conf.sample tracker.conf 

2. 编辑tracker.conf

# 配置文件是否不生效,false 为生效

disabled=false

# 提供服务的端口

port=22122

# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)

base_path=/data/fastdfs/tracker

# HTTP 服务端口

http.server_port=80 

3. 创建tracker基础数据目录,即base_path对应的目录。

mkdir -p /data/fastdfs/tracker

4. 启动Tracker

5. tracker server 目录及文件结构

Tracker服务启动成功后,会在base_path下创建datalogs两个目录。目录结构如下:

${base_path}

  |__data

  |   |__storage_groups.dat:存储分组信息

  |   |__storage_servers.dat:存储服务器列表

  |__logs

  |   |__trackerd.log tracker server 日志文件

 

2.5. 配置FaastDFS存储(Storage

1. 进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

cd /etc/fdfs

cp storage.conf.sample storage.conf 

2. 编辑storage.conf

vim storage.conf

# 配置文件是否不生效,false 为生效

disabled=false

# 指定此 storage server 所在 ()

group_name=group1

# storage server 服务端口

port=23000

# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)

heart_beat_interval=30

# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)

base_path=/data/fastdfs/storage

# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。

store_path_count=1

# 逐一配置 store_path_count 个路径,索引号基于 0

# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。

store_path0=/data/fastdfs/file

# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。

# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。

subdir_count_per_path=256

# tracker_server 的列表 ,会主动连接 tracker_server

# 有多个 tracker server 时,每个 tracker server 写一行

tracker_server=172.30.0.110:22122

# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。

sync_start_time=00:00

sync_end_time=23:59

# 访问端口

http.server_port=80 

3. 创建Storage基础数据目录,对应base_path目录。

mkdir -p /data/fastdfs/storage 

4. 创建store_path0对应目录

mkdir -p /data/fastdfs/file

5. 启动Storage

6.   查看storagetracker是否通信

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

二、FastDFS配置nginx模块(每台storage都需要部署)

3.1. 下载fastdfs-nginx-module

1. fastdfs-nginx-module模块说明

FastDFS通过tracker服务器,将文件放在storage服务器存储,但是同组存储服务器之间需要进行文件复制,有同步延迟的问题。

假设tracker服务器将文件上传到了172.30.0.111,上传成功的文件ID已经返回给客户端。

此时FastDFS存储集群机制会将这个文件同步到同组存储172.30.0.112,在文件还没有复制完成的情况下,客户端如果用这个文件ID172.30.0.112上取文件,就会出现文件无法访问的错误。

fastdfs-nginx-module可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

2. 下载fastdfs-nginx-module

wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

3. 解压

unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

4. 重命名

 mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1  fastdfs-nginx-module-master

 

3.2. 安装nginx

1. 安装依赖包

yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2. 下载nginx

wget http://nginx.org/download/nginx-1.12.2.tar.gz

3. 解压

tar zxf nginx-1.12.2.tar.gz

4. 编译安装

cd nginx-1.12.2

./configure --add-module=../fastdfs-nginx-module-master/src

make && make install

5. 查看nginx的模块

/usr/local/nginx/sbin/nginx -V

image.png

6. 修改nginx.conf

FastDFS集群_第3张图片

 

注意:listen 80端口要与/etc/fdfs/stortage.conf中的(前面改成为80了)相对应。如果改成其他端口,则需要统一,同时在防火墙中打开该端口。

Location的配置,如果有多个group则配置location ~/group([0-9])/M00.没有则不用配group

 

3.3. 配置fastdfs-nginx-module

1. 复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录

cd /softpackages/fastdfs-nginx-module-master/src

cp mod_fastdfs.conf /etc/fdfs/

2.  修改配置

# 连接超时时间

connect_timeout=10

# Tracker Server

tracker_server=172.30.0.110:22122

# StorageServer 默认端口

storage_server_port=23000

# 如果文件IDuri中包含/group**,则要设置为true

url_have_group_name = true

# Storage 配置的store_path0路径,必须和storage.conf中的一致

store_path0=/data/fastdfs/file

3.  启动nginx

image.png 

 

 

环境架构图:

FastDFS集群_第4张图片