@FastDFS环境搭建(V5.08)
此文章管道地址https://www.jianshu.com/p/3f24bb9bb742
CSDN上少有V5.08版本相关介绍,在此与大家分享
注意:下载libfastcommon安装包 选用“libfastcommon-master.zip”!
什么是FastDFS?
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS架构
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些 策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务 器。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上, Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将 storage 称为存储服务器。
架构
服务端两个角色:
Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
Storage:实际保存文件 Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。
Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
● 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
● 虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
● 数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
● 文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
比如请求下边的文件:
请求的文件
● 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
● 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。
Ubuntu 16.10
FastDFS_v5.08.tar.gz
nginx-1.12.2.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
libfastcommon
5.2 服务器规划
服务器名称 IP地址和端口 备注
fastdfs-tracker 192.168.0.118:22122 跟踪服务器/调度服务器
fastdfs-storage 192.168.0.119:23000 存储服务器
5.3 下载并安装FastDFS依赖包libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
官网下载:https://sourceforge.net/projects/libfastcommon/files/latest/download
我下载的地址:https://github.com/happyfish100/libfastcommon.git
我一般是将软件安装到/usr/local下的,这里就将解压的包放在/usr/local/文件夹下。
libfastcommon解压后
然后解压、编译并安装。
cd /usr/local/libfastcommon
./make.sh
./make.sh install
5.4 下载并安装FastDFS
官网:https://sourceforge.net/projects/fastdfs/files
再进入下层目录,选择自己需要的版本
我选择的版本FastDFS_v5.08.tar.gz。
tar -zxvf FastDFS_v5.08.tar.gz -C /usr/local
然后进入到解压目录FastDFS
./make.sh
./make.sh install
默认安装的文件及目录:
默认安装的文件及目录
默认安装的文件及目录
1)服务脚本:
ls /etc/init.d/ |grep fdfs
2)样例配置文件
ls /etc/fdfs/
3)命令行工具
ls /usr/bin |grep fdfs
5.4 配置跟踪服务器(tracker server)
1)拷贝tracker server和client端样例配置文件并重命名
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
配置文件并重命名
2)编辑tracker server配置文件tracker.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=22122(默认为22122)
base_path=/data/fastdfs/tracker
3)编辑client端的配置文件client.conf,需要修改内容如下
base_path=/data/fastdfs/tracker
tracker_server=192.168.0.118:22122(这是我默认的)
4)创建tracker server数据目录
mkdir -p /data/fastdfs/tracker
5)测试启动tracker server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录,然后使用netstat查看端口是否起来
fdfs_trackerd /etc/fdfs/tracker.conf restart
netstat -antp | grep trackerd
启动TrackerServer
6)关闭tracker server
fdfs_trackerd /etc/fdfs/tracker.conf stop
5.4 配置存储服务器(storage server)
1)拷贝storage server样例配置文件并重命名
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
2)编辑storage server配置文件storage.conf,需要修改内容如下:
disabled=false(默认为false,表示是否无效)
port=23000(默认为23000)
base_path=/data/fastdfs/storage
tracker_server=192.168.0.118:22122
store_path0=/data/fastdfs/storage
http.server_port=8888(默认为8888)
http.server_port=8888 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口。
3)创建storage server数据目录
mkdir -p /data/fastdfs/storage
4)测试启动storage server,启动成功会自动在/data/fastdfs/tracker目录新建data和logs目录(启动storage server的前提是tracker server必须事先已启动)
fdfs_storaged /etc/fdfs/storage.conf restart
netstat -antp | grep storage
5.5 文件上传测试
我把桌面的test.png上传,返回文件ID就说明文件已经上传成功
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/yvettee/桌面/test.png
文件上传测试结果
5.6 FastDFS和nginx整合
1)在tracker上安装nginx
在每个tracker上安装nginx,主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx。所以此处不用配置Nginx。
2)在Storage上安装nginx
需要安装fastdfs-nginx-module模块。
PS:FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
下载地址:https://github.com/happyfish100/fastdfs-nginx-module
我下载解压到了/usr/local/fastdfs-nginx-module目录下,然后修改config文件将/usr/local/路径改为/usr/,或者直接执行命令:%s+/usr/local/+/usr/+g批量替换。
修改config
拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑。
cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
vim /etc/fdfs/mod_fastdfs.conf
修改内容如下:
connect_timeout=10
base_path=/tmp(默认为/tmp)
tracker_server=192.168.0.118:22122(注意:几个配置文件中的TrackerServer都是一样的)
storage_server_port=23000(默认配置为23000)
url_have_group_name = true
store_path0=/data/fastdfs/storage
group_name=group1(默认配置为group1)
3)安装nginx依赖库
Nginx安装和配置
安装完nginx后,有一个很重要的一步,执行下面的命令,这个命令是将第三方模块安装并编译进nginx。
cd /usr/local/nginx/nginx-1.12.2 ----(进入nginx的安装目录)
./configure --add-module=/usr/local/fastdfs-nginx-module/src ----(将已编译的fastdfs-nginx-module安装到nginx中)
make
make install
4)拷贝FastDFS中的部分配置文件到/etc/fdfs目录中
cp /usr/local/FastDFS/conf/http.conf /etc/fdfs
cp /usr/local/FastDFS/conf/mime.types /etc/fdfs
5)配置nginx
编辑nginx.conf文件vim /usr/local/nginx/conf/nginx.conf
需要增加的内容如下:
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
说明:
a、"user root"是解决下载操作时报404的问题
b、8888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应
c、storage对应有多个group的情况下,访问路径带group名称,例如:/group1/M00/00/00/**,对应nginx配置:
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
启动Nginx服务后,访问之前已经上传的图片。
http://192.168.0.118:8888/group1/M00/00/00/wKgAdltz6b2AStumAA588hqcTa0993.png