首页 > 代码库 > FastDFS分布式文件系统配置与部署

FastDFS分布式文件系统配置与部署

?

?

?

FastDFS分布式文件系统配置与部署

白宁超

2017年4月14日

?

?

:1.1-1.4节是对FastDFS基本配置,如果读者只是安装分布式文件系统,简单关注其原理建议阅读1.2节与1.5节。如果读者仅仅就是安装为目的建议直接阅读1.5节。

本人邮箱:datathinks@qq.com

主页网址:http://www.cnblogs.com/baiboy/

?

目录

?

1.1 分布式文件系统介绍????1

1.2 系统架构介绍????1

1.3 FastDFS性能方案????7

1.4 Linux基本命令操作????8

1.5????安装VirtualBox虚拟机并配置Ubuntu????9

1.6 Ubuntu环境下安装并配置FastDFS????9

1.6.1 基本操作与配置????9

1.6.2 安装libfastcommon与FastDFS????10

1.6.3 配置Tracker、Storage、Clent、HTTP服务????11

1.6.4 设置环境变量和软链接????14

1.6.5 查看tracker和storage服务运行情况????15

1.6.6 测试上传文件功能????16

1.6.7 安装Nginx 和 fastdfs-nginx-module,pcre,zlib????17

1.6.8 配置fastdfs-nginx-module 和 Nginx????20

1.6.9 关闭防火墙????22

1.6.10 上传测试????22

1.7 开机启动服务????24

1.8 参考文献????25

?

?

1.1 分布式文件系统介绍

分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System。一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间。

特点:在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制。分布式文件系统可能包含的功能有:透通的数据复制与容错。

分布式文件系统是被设计用在局域网。而分布式数据存储,则是泛指应用分布式运算技术的文件和数据库等提供数据存储服务的系统。决定因素:数据的存储方式、数据的读取速率、数据的安全机制。发展历史:大致分为三个发展阶段,网络文件系统(1980s)、共享SAN文件系统(1990s)、面向对象的并行文件系统(2000s)

FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合中小文件(建议范围:4KB < file_size <500MB),对以文件为载体的在线服务,如相册网站、视频网站等。

1.2 系统架构介绍

FastDFS由跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)构成。

跟踪服务器Tracker Server

主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。tracker根据storage的心跳信息,建立group==>[storage serverlist]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

存储服务器Storage Server

主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。storage接受到写文件请求时,会根据配置好的规则选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据作为本地文件存储到该目录中。

客户端Client

主要是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。每个客户端服务器都需要安装Nginx

基本架构如下图所示。

技术分享

?

FastDFS的存储策略

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

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

FastDFS的上传过程

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

技术分享

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

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

技术分享

FastDFS的文件同步

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

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

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

FastDFS的文件下载

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

技术分享

跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

?

1.3 FastDFS性能方案

方案 考虑的角度

FastDFS?

部署

部署复杂程度

简单

服务器配置要求

一般配置

文件系统接口

非POSIX(可移植性操作系统)

支持FUSE

不支持(用户空间文件系统)

是否需要配套的客户端程序

需要

是否支持目录结构

不支持

可拓展性

可拓展

性能

小文件支持

大文件支持

一般

数据安全

单点依赖

冗余保护

分组(组内冗余)

故障恢复

支持单点故障恢复

应用

产品级别

大中型

是否成熟

比较成熟

实际应用

支付宝、京东商城、飞信、迅雷、赶集网

维护

是否开源

license?

GPL v3?

社区活跃程度

活跃

文档语言

英文

文档完善程度

完整

开发语言

C ?

其他

移行成本

较高

存储机制

基于文件进行存储,同组的互备关系

元数据存储方式

由存储节点自动生成返回给客户端文件ID,ID中包含组名、文件路径和文件名

版本号

v4.06?

其他特点

1 不会对文件进行分块处理。
2 文件同步直接通过点对点,同组内存储节点进行通信同步,不同组内不进行通信;
3 目前提供了C,java,PHP API;
4 通过http方式下载; 5 FastDFS目前还需要应用端自己实现文件列表、目录管理相关的事情。

1.4 Linux基本命令操作

系统的基本操作

Ctrl+Alt+shift+Fn 切换终端

ls –l 查看

su - username 切换登录

Reboot 重启

pwd 当前路径

shutdown -r now 关机

whereis filename 文件路径

rm –rf 删除

touch 文件名 创建文件

cp path1 path2 复制文件

mkdir 创建目录

mv 移动改名

Vi环境

vi filename 打开文件

i 插入

Esc 退出

dd 删除行

x Esc下删除

wq 保存

a 插入光标后面

o 插入下一行

hjkl 左下上右

Ctrl+b 向后翻页

Ctrl+f 向前翻页

/ Esc下查找

r 替换光标处文字

u 撤销

压缩与解压

gzip 压缩gz文件

unzip 解压zip

tar -czvf file1 file2 压缩

tar -zxvf file 解压.tar.gz

linux系统修改编码:

#vi /etc/sysconfig/i18n 将原内容

LANG="en_US.UTF-8"

SYSFONT="latarcyrheb-sun16"

修改为

LANG="zh_CN.GB18030"

LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"

SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"

SYSFONT="lat0-sun16"

Ubuntu初始化root密码:

sudo passwd

Ubuntu配置VmwareTools工具:先下载然后找到文件拷贝桌面并解压,随后找到文件一路安装。

?

  1. 安装VirtualBox虚拟机并配置Ubuntu
  1. VirtualBox虚拟机安装参照:

http://jingyan.baidu.com/article/73c3ce280755f8e50243d945.html

  1. VirtualBox下安装ubuntu参照:

http://jingyan.baidu.com/article/2009576197fd24cb0721b409.html

1.6 Ubuntu环境下安装并配置FastDFS

虚拟机

Oracle VM VirtualBox

操作系统

Ubuntu16.04

Fastdfs必备软件(本文软件下载均采用wget方式)

fastdfs-5.05 、 fastdfs-nginx-module-v1.16 、 libfastcommon-v1.0.7

Nginx

nginx-1.10.1?

Fastdfs主页

https://github.com/happyfish100/fastdfs

联网模式

NAT自动转换模式

IP地址

自动生成,ifconfig查看,本文是10.0.2.15

1.6.1 基本操作与配置

切换到root角色操作:sudo passwd #修改root权限密码

技术分享

创建必要文件夹

mkdir /software #下载tar.zp软件包并安装

mkdir /software/testfile #上载文件测试文件夹

mkdir /data #fastdfs根文件

mkdir /data/fastdfs/track #tracker文件配置路径

mkdir /data/fastdfs/storage #storage配置路径

mkdir /data/fastdfs/cli????ntlog #client配置路径

技术分享

1.6.2 安装libfastcommon与FastDFS

(1) 下载安装libfastcommon

cd /software

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

技术分享

解压 libfastcommon:

tar -zxvf V1.0.7.tar.gz

进入libfastcommon-1.0.7里面,进行编译和安装:

cd libfastcommon-1.0.7

./make.sh

./make.sh install

?

技术分享

(2) 下载安装 FastDFS,这里也是通过wget下载。

cd /software

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

技术分享

tar -zxvf V5.05.tar.gz

cd fastdfs-5.05

./make.sh

./make.sh install

技术分享

1.6.3 配置Tracker、Storage、Clent、HTTP服务

(1) 配置Tracker服务

1.6.2操作成功后,进入/etc/fdfs目录。会看到三个.sample后缀的文件,均是作者给我们的示例文件,我们需要将其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。

cd /etc/fdfs

ls

cp tracker.conf.sample tracker.conf # 配置跟踪文件

vi tracker.conf # 进入conf文件

技术分享

进入conf文件后完成以下参数的修改:

# the base path to store data and log files

base_path=/data/fastdfs/track # 修改跟踪路径

技术分享

# HTTP port on this tracker server

http.server_port=80 # 修改端口号

技术分享

完成以上操作之后即配置好tracker服务,采用以下方式启动服务,查看监听:

export LD_LIBRARY_PATH=/usr/lib64/

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

netstat -unltp|grep fdfs #查看服务

技术分享

(2) 配置Storage服务

本文采用单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有?Group(组)的概念,同一组内服务器互备同步。

cd /etc/fdfs

cp storage.conf.sample storage.conf # 修改存储路径

vi storage.conf # 修改存储文件

技术分享

进入conf文件后完成以下参数的修改:

group_name=group1 # 修改组名

技术分享

# the base path to store data and log files

base_path=/data/fastdfs/storage # 修改存储路径

技术分享

# store_path#, based 0, if store_path0 not exists, it‘s value is base_path

# the paths must be exist

store_path0=/data/fastdfs/storage #这里可以设置多个存储服务器

#store_path1=/home/yuqing/fastdfs2

技术分享

# tracker_server can ocur more than once, and tracker_server format is

# "host:port", host can be hostname or ip address

tracker_server=10.0.2.15:22122 # 改为本地ip,查看本地ip:ifconfig

http.server_port=8888 # 设置端口号,如果没有冲突尽量默认

技术分享

完成以上操作之后即配置好storage服务,采用以下方式启动服务,查看监听:

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

netstat -unltp|grep fdfs #查看服务

ls技术分享

(3) 配置Clint服务

cd /etc/fdfs

cp clint.conf.sample clint.conf #修改客户端路径文件

vi clint.conf

技术分享

进入conf文件后完成以下参数的修改:

base_path=/data/fastdfs/clintlog #设置客户端存储路径

tracker_server=10.0.2.15:22122 #改为本地ip

http.tracker_server_port=80

#include http.conf 注意,#include http.conf 这句,原配置文件中有2个#,删掉一个。

技术分享

(4) 配置HTTP服务

cp /software/fastdfs-5.05/conf/http.conf /etc/fdfs/http.conf # 配置http服务文件

cd /etc/fdfs

vi http.conf

技术分享

进入conf文件后完成以下参数的修改:

http.anti_steal.token_check_fail=/data/fastdfs/httppic/anti-steal.jpg

1.6.4 设置环境变量和软链接

在32位ubuntu中,libfastcommon会安装在/usr/lib 中,64位系统则安装在 /usr/lib64 中。依次执行以下命令:(根据自己的操作系统选择路径)

export LD_LIBRARY_PATH=/usr/lib64/

或者手动修改

vi /etc/ld.so.conf下配置/usr/lib64

ldconfig

软链接:

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

1.6.5 查看tracker和storage服务运行情况

netstat -unltp|grep fdfs #查看服务

如果没有正常运行,启动服务命令如下:

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

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

技术分享

测试Tracker 和 Storage 服务通信

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

技术分享

1.6.6 测试上传文件功能

cd /software/testfile

ls

touch test.txt

vi test.txt

fdfs_test /etc/fdfs/client.conf upload /software/testfile/test.txt

技术分享

见到上述结果证明测试成功。复制url地址到web浏览器中查看:

技术分享

现在只是支持上传,还不支持下载功能。下文是配置文件下载,

1.6.7 安装Nginx 和 fastdfs-nginx-module,pcre,zlib

上文并配置启动了 Tracker 和 Storage 服务,已经可以上传文件了。下文需要配合 Nginx 来进行文件的上传下载。

cd /software

wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

技术分享

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

技术分享

查看文件

技术分享

  1. 在安装Nginx之前,需要安装如下(gcc/pcre/zlib/openssl)插件

查看zlib是否安装

dpkg -l | grep zlib

下面是在ubuntu环境下的插件安装,使用centos时采用不同的方式安装:

Ubuntu插件安装

openssl安装:sudo apt-get install openssl libssl-dev

pcre安装: ????sudo apt-get install libpcre3 libpcre3-dev

???? sudo apt-get install openssl libssl-dev

zlib安装:????sudo apt-get install zlib1g-dev

gcc安装:????sudo apt-get install build-essential

CentOS插件安装

gcc安装:yum install gcc-c++

pcre安装:yum install -y pcre pcre-devel

zlib安装:yum install -y zlib zlib-devel

OpenSSL安装:yum install -y openssl openssl-devel

  1. 接下来可以安装Nginx

cd /software

# wget -c https://nginx.org/download/nginx-1.10.1.tar.gz

tar -zxvf nginx-1.10.1.tar.gz

cd nginx-1.10.1

配置 nginx 安装,加入fastdfs-nginx-module模块。

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

技术分享

编译安装

Make

技术分享

make install

技术分享

查找安装路径

whereis nginx

技术分享

启动、停止nginx

cd /usr/local/nginx/sbin/

./nginx #启动

./nginx -s stop #此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程

./nginx -s quit #:此方式停止步骤是待nginx进程处理任务完毕进行停止。

./nginx -s reload

  1. 查询nginx进程:

ps aux|grep nginx

技术分享

  1. 设置开机自启动即在rc.local增加启动代码、。(可略过此步)

vi /etc/rc.local

增加一行

/usr/local/nginx/sbin/nginx

设置执行权限:

chmod 755 rc.local

1.6.8 配置fastdfs-nginx-module 和 Nginx

(1) 配置mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下

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

vi mod_fastdfs.conf

对conf文件作以下修改

# valid only when load_fdfs_parameters_from_tracker is true

tracker_server=10.0.2.15:22122

# default value is false

url_have_group_name = true

# must same as storage.conf

store_path0=/data/fastdfs/storage

#store_path1=/home/yuqing/fastdfs1

cp mod_fastdfs.conf /etc/fdfs

(2) 把fastdfs-5.05下面的配置中还没有存在/etc/fdfs中的拷贝进去

????cd /software/fastdfs-5.05/conf

????cp anti-steal.jpg http.conf mime.types /etc/fdfs/

技术分享

(3) 配置Nginx,编辑nginx.config

????cd /usr/local/nginx/conf

????vi nginx.conf

在配置文件中加入:

location /group1/M00 {

root /data/fastdfs/storage/;

ngx_fastdfs_module;

}

技术分享

  1. 由于我们配置了group1/M00的访问,我们需要建立一个group1文件夹,并建立M00到data的软链接。

mkdir /data/fastdfs/storage/data/group1

ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00

技术分享

  1. 启动 Nginx ,会打印出fastdfs模块的pid,正常不会报错的

/usr/local/nginx/sbin/nginx

技术分享

  1. 在浏览器中输入IP10.0.2.15地址,可以看到如下画面,说明我们 Nginx 结合 fastdfs-nginx-module 模块安装并配置成功啦。可以跳过1.6.9

技术分享

1.6.9 关闭防火墙(真实环境不要这么做,默认安装时防火墙是关闭的)

开放80端口访问权限。在iptables中加入重启就行,或者你直接关闭防火墙,????本地测试环境可以这么干,但到线上万万不能关闭防火墙的。

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

重启防火墙,使设置生效:

service iptables restart

?

1.6.10 上传测试

因为执行文件全部在/usr/bin目录下,我们切换到这里,并新建一个test.txt文件,随便写一点什么,我写了This is a test file. by:mafly这句话在里边。然后测试上传:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/bin/test.txt

技术分享

复制地址到浏览器查看

技术分享

如上是完整的配置过程,如果需要建立集群,只需要扩展服务器并对tracker和storage服务进行配置即可。各个服务器结点都需要安装Nginx。

1.7 开机启动服务

(1) 启动开机检查Tracker、Storage服务是否开启:

netstat -unltp|grep fdfs #查看服务

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

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

(2) 试Tracker 和 Storage 服务通信

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

(3) 查看Nginx是否开启:

ps aux|grep nginx

/usr/local/nginx/sbin/nginx

(4) 测试上传下载

fdfs_test /etc/fdfs/client.conf upload /software/testfile/test.txt

????技术分享

1.8 参考文献

[1] FastDFS Github, https://github.com/happyfish100

[2] FastDFS 分布式文件存储, https://community.qingcloud.com/topic/321/%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E5%AD%98%E5%82%A8fastdfs-%E4%B8%80-%E5%88%9D%E8%AF%86fastdfs

[3] FastDFS 简单了解,http://www.cnblogs.com/mafly/p/fastdfs.html

[4] FastDFS 在CentOS下配置安装部署,http://blog.mayongfa.cn/192.html

[5] FastDFS 配置Nginx模块及上传测试,http://blog.mayongfa.cn/193.html

[6] 分布式存储CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群,http://www.cnblogs.com/PurpleDream/p/4510279.html

[7] Hadoop 分布式文件系统:架构和设计,https://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

[8] FastDFS安装使用实践,http://soartju.iteye.com/blog/803477

[9] FastDFS安装部署操作手册,http://blog.csdn.net/XingJames/article/details/52759876

[10] FastDFS安装和配置,http://www.ctolib.com/docs/sfile/Linux-Tutorial/FastDFS-Install-And-Settings.html

[11] Ubuntu下安装并配置FastDFS,http://www.linuxdiyf.com/linux/27518.html

[12] 多机安装部署,http://blog.csdn.net/ricciozhang/article/details/49402273

?

FastDFS分布式文件系统配置与部署