目录
FastDFS. 1
1 介绍.... 1
2 安装.... 4
2.1 安装libfastcommon. 4
2.1.1 下载安装包并解压.... 4
2.2 安装FastDFS. 5
2.3 安装nginx. 8
2.3.1 更新nginx安装库.... 8
2.3.2 安装nginx. 8
2.4 存储服务器(storage server)安装并配置nginx. 10
2.4.1 安装fastdfs-nginx-module. 10
1 介绍
FastDFS是一款开源的、分布式文件系统(Distributed File System),由淘宝开发平台部资深架构师余庆开发。该开源项目的主页是 http://code.google.com/p/fastdfs 。可以通过fastdfs.sourceforge.NET 下载。FastDFS孵化平台(ChinaUnix)版块http://bbs.chinaunix.net/forum-240-1.html。
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能,就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key valuepair)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
FastDFS架构图
1) Tracker cluster中各个tracker server相互独立,不进行相互通信。
2) Storage cluster中各个storage组(Volume1,Volume2...)相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。
3) 每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。
上传时序图
1) Client通过Tracker server将文件上传到Storage server。
2) Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3) Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
4) 上传完成,Storage server返回Client一个文件ID,文件上传结束。
下载时序图
1) Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。
2) Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3) Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。
2 安装
安装FastDFS还需要安装libfastcommon作为前提条件,首先准备安装包FastDFS和libfastcommon。
libfastcommon下载地址: https://github.com/happyfish100/libfastcommon/releases
FastDFS的下载地址:https://github.com/happyfish100/fastdfs/releases
首先安装libfastcommon,得到libfastcommon-1.0.35.tar.gz后解压、编译、安装。
运行环境相关软件:
² CentOS 7.0
² Libfastcommon-1.0.35
² FastDFS-5.10
² Nginx
² Fastdfs-nginx-module
服务器规划
服务器名
备注
Fastdfs-tracker
跟踪服务器/调度服务器
Fastdfs-storge
存储服务器
2.1 安装libfastcommon
2.1.1 下载安装包并解压
- 下载libfastcommon
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.35.tar.gz
- 解压
tar -zxvf V1.0.35.tar.gz
- 安装
cd libfastcommon-1.0.35
./make.sh
./make.sh install
提示:执行./make.sh命令时报如下错误,需要安装gcc
gcc安装命令:yum -y install gcc gcc-c++ make automake autoconf libtool perl
2.2 安装FastDFS
- 解压
tar xvf V5.10.tar.gz
- 安装
cd fastdfs-5.10
./make.sh
./make.sh install
2.2.1.1 采用默认方式安装后的文件及目录
² 服务脚本
[root@fastdfs-tracker ~]# ll /etc/init.d/ |grep fdfs
-rwxr-xr-x. 1 root root 918 4月 22 22:08 fdfs_storaged
-rwxr-xr-x. 1 root root 920 4月 22 22:08 fdfs_trackerd
² 样例配置文件
[root@fastdfs-tracker ~]# ll /etc/fdfs/
总用量 20
-rw-r--r--. 1 root root 1461 4月 22 22:08 client.conf.sample
-rw-r--r--. 1 root root 7927 4月 22 22:08 storage.conf.sample
-rw-r--r--. 1 root root 7200 4月 22 22:08 tracker.conf.sample
² 命令行工具
[root@fastdfs-tracker ~]# ll /usr/bin|grep fdfs
-rwxr-xr-x. 1 root root 252272 4月 22 22:08 fdfs_appender_test
-rwxr-xr-x. 1 root root 252225 4月 22 22:08 fdfs_appender_test1
-rwxr-xr-x. 1 root root 242449 4月 22 22:08 fdfs_append_file
-rwxr-xr-x. 1 root root 242013 4月 22 22:08 fdfs_crc32
-rwxr-xr-x. 1 root root 242508 4月 22 22:08 fdfs_delete_file
-rwxr-xr-x. 1 root root 243627 4月 22 22:08 fdfs_download_file
-rwxr-xr-x. 1 root root 243369 4月 22 22:08 fdfs_file_info
-rwxr-xr-x. 1 root root 255657 4月 22 22:08 fdfs_monitor
-rwxr-xr-x. 1 root root 863913 4月 22 22:08 fdfs_storaged
-rwxr-xr-x. 1 root root 258712 4月 22 22:08 fdfs_test
-rwxr-xr-x. 1 root root 257881 4月 22 22:08 fdfs_test1
-rwxr-xr-x. 1 root root 365232 4月 22 22:08 fdfs_trackerd
-rwxr-xr-x. 1 root root 243547 4月 22 22:08 fdfs_upload_appender
-rwxr-xr-x. 1 root root 244453 4月 22 22:08 fdfs_upload_file
2.2.1.2 配置跟踪服务器(tracker server)
- 拷贝tracker server和client端样例配置文件并重命名
[root@fastdfs-tracker ~]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
[root@fastdfs-storage ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
- 编辑tracker server配置文件tracker.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
- 编辑client端的配置文件client.conf,需要修改内容如下
base_path=/data/fastdfs/tracker
#tracker_server中IP指定的是tracker server的IP
tracker_server=192.168.128.134:22122
- 创建tracker server数据目录
[root@fastdfs-tracker ~]# mkdir -p /data/fastdfs/tracker
- 测试启动tracker server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录
[root@fastdfs-tracker ~]# cd /data/fastdfs/tracker/
[root@fastdfs-tracker tracker]# ls
[root@fastdfs-tracker tracker]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server:
[root@fastdfs-tracker tracker]# ss -lntup|grep 22122
Tcp LISTEN 0 128 *:22122 *:* users:(("fdfs_trackerd",3785,5))
[root@fastdfs-tracker tracker]# ls
data logs
- 关闭tracker server
[root@fastdfs-tracker tracker]# /etc/init.d/fdfs_trackerd stop
waiting for pid [3785] exit ...
pid [3785] exit.
2.2.1.3 配置存储服务器(storage server)
- 拷贝storage server样例配置文件并重命名
[root@fastdfs-storage ~]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
- 编辑storage server配置文件storage.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=192.168.128.135:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888,nginx中配置的监听端口那之一致)
- 创建storage server数据目录
[root@fastdfs-storage ~]# mkdir -p /data/fastdfs/storage
- 测试启动storage server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)
[root@fastdfs-storage ~]# cd /data/fastdfs/storage/
[root@fastdfs-storage storage]# ls
[root@fastdfs-storage storage]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server:
[root@fastdfs-storage storage]# ss -lntup|grep 23000
tcp LISTEN 0 128 *:23000 *:* users:(("fdfs_storaged",3786,5))
[root@fastdfs-storage storage]# ls
data logs
2.2.1.4 文件上传测试
执行如下上传命令:
[root@fastdfs-tracker~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/oldcat/imgs/test.jpg
group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg
返回文件ID即说明文件已经上传成功
2.3 安装nginx
2.3.1 更新nginx安装库
# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum makecache
# yum update
2.3.2 安装nginx
yum info nginx
yum install nginx
2.4 存储服务器(storage server)安装并配置nginx
2.4.1 安装fastdfs-nginx-module
注:FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.128.135,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.128.136,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.128.136上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
2.4.1.1 下载fastdfs-nginx-moudule
[root@fastdfs-storagetools]# wget http://nchc.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module\_v1.16.tar.gz
[root@fastdfs-storage tools]# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
[root@fastdfs-storage tools]# cd fastdfs-nginx-module/src/
[root@fastdfs-storage tools]# vi config
编辑config文件,执行如下命令进行批量替换并保存退出
:%s+/usr/local/+/usr/+g
修改完成后
2.4.1.2 拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑
[root@fastdfs-storage~]#cp /home/centos/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
[root@fastdfs-storage ~]# vim /etc/fdfs/mod_fastdfs.conf
修改内容如下:
connect_timeout=10
base_path=/tmp(默认为/tmp)
tracker_server=192.168.128.135:22122
storage_server_port=23000(默认配置为23000)
url_have_group_name = true
store_path0=/data/fastdfs/storage
group_name=group1(默认配置为group1)
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs/storage
2.4.1.3 nginx添加fastdfs-nginx-module模块
查看nginx版本
[root@bogon centos]# nginx -V
[root@bogon centos]# wget http://nginx.org/download/nginx-1.12.1.tar.gz
[root@bogon centos]# tar -zvxf nginx-1.12.1.tar.gz
更新一下依赖相关包
[root@bogon nginx-1.12.1]# yum -y install pcre*
[root@bogon nginx-1.12.1]# service nginx stop
#编译./configure 后面加上 第1步nginx -V查看到的所有配置参数,后面加上你要加的模块配置
[root@bogon nginx-1.12.1]#./configure --prefix=/etc/nginx ……(第1步nginx-V内容)……--add-module=/home/centos/fastdfs-nginx-module
[root@bogon nginx-1.12.1]#make
[root@bogon nginx-1.12.1]#make install
注:报如下错:
需要执行yum -y install openssl-devel
2.4.1.4 拷贝FastDFS中的部分配置文件到/etc/fdfs目录中
[root@bogon conf]# cd /home/centos/fastdfs-5.10/conf
[root@bogon conf]# cp http.conf /etc/fdfs/
[root@bogon conf]# cp mime.types /etc/fdfs/
2.4.1.5 配置nginx,如下所示:
[root@bogon conf.d]# cd /etc/nginx/conf.d/
[root@bogon conf.d]# vi fdfs.conf
修改配置如下:
server {
listen 8888;
server_name localhost;
location ~ /group[0-9]/ {
root /data/fastdfs/storage/data;
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}