FastDFS集群

1、FastDFS介绍nginx


1.1.简介c++

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

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

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

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

  Client客户端,上传下载数据的服务器,也就是咱们本身的项目部署在的服务器。架构


image.png


1.2.FastDFS的存储策略app

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

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


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,最后根据以上的信息生成文件名存储文件。


image.png


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生成的文件名,接下来客户端根据这个文件名便可访问到该文件。


2、安装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

2、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

image.png

 

注意: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 

 

 

环境架构图:

image.png

相关文章
相关标签/搜索