1.FastDFS介绍
FastDFS是用语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
安装流程
1、Tracker
a)主要是配置0
2、storage
a)主要是配置
3、Nginx+fastdfs_nginx_module
1.1FastDFS架构
FastDFS架构包括Tracker server和Storage server。客户端请求Tracker server 进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
如下图:
Tracker 集群
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server 采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。Storage集群
Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务
器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
Storage状态收集
Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。
文件上传流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
?组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需
要客户端自行保存。
?虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了
store_path0则是M00,如果配置了store_path1则是M01,以此类推。
?数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据
文件。
?文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储
服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
文件下载流程
tracker根据请求的文件路径即文件ID 来快速定义文件。
比如请求下边的文件:
1.通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。
2.FastDFS+Nginx实现文件服务器
2.1架构
架构图
3.安装配置
1.1下载
tracker和storage使用相同的安装包
下载地址:https://www.wendangku.net/doc/e015758022.html,/projects/FastDFS/或https://https://www.wendangku.net/doc/e015758022.html,/happyfish100/FastDFS(推荐)
本教程下载:FastDFS_v5.05.tar.gz
3.1FastDFS依赖库安装
a)依赖库gcc-c++安装
FastDFS采用C语言编写,因此需要先安装C++库。
如下命令来执行云安装:yum install gcc-c++
如下图:
b)Libevent安装
FastDFS依赖libevent库,需要安装:
yum -y install libevent
c)安装libfastcommon
libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
首先上传libfastcommon包到服务器。
将文件上传到服务器
在将文件移动到/usr/local/server目录进行解压
编译、安装
注意:一定要将/usr/lib64目录下的libfastcommon.os拷贝到/usr/lib目录下。
4.1Tracker安装
上传FastDFS_v5.05.tar.gz文件到服务器
解压执行编译安装
解压:tar –xfFastDFS_v5.05.tar.gz
编译:到解压目录FastDFS下,可以看到一个make.sh,输入编译指令./make.sh执行编译。
安装:./make.sh install
如图:
执行完成后,会将如下3个文件拷贝到/etc/fdfs目录下,拷贝这个动作它自己会执行。
client.conf.sample
storage.conf.sample
tracker.conf.sample
a)配置tracker
client.conf.sample
storage.conf.sample
tracker.conf.sample
把如上3个文件的.sample后缀去掉,修改后
client.conf
storage.conf
tracker.conf
编辑tracker.conf文件
Base_path是日志和数据存储目录,需要修改陈自己的路径,这里改成/home/FastDFS,然后在home目录下创建FastDFS目录。
这里不需要改,但要明白store_lookup=N 和store_group=groupN这里的N 必须相同。
创建FastDFS文件夹
b)启动tracker
启动命令:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.confrestart
通过ps–ef|grep tracker 查看进程信息。
c)设置开机启动
设置开机启动,只需要将启动命令写入/etc/rc.local即可!
vi /etc/rc.local
把如下指令写入rc.local即可。
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.confrestart
5.1FastDFS—storage安装
Storage在同一台安装tracker的机器上不需要进行安装,只需要修改配置即可,但如果不是同一台机器这里需要执行上面tracker安装的过程(libfastcommon、libevent、storage的编译+安装)
a)配置
到/etc/fdfs目录,编辑storage.conf,修改storage相关配置。
vistorage.conf
group_name=group1
base_path=/home/yuqing/FastDFS改为:base_path=/home/FastDFS
store_path0=/home/yuqing/FastDFS改为:
store_path0=/home/FastDFS/fdfs_storage
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=.....
#store_path2=......
tracker_server=192.168.174.130:22122 #配置tracker服务器:IP
#如果有多个则配置多个tracker
tracker_server=192.168.101.4:22122
注意:store_path0=/home/FastDFS/fdfs_storage
这里的路径必须存在,否则启动storage的时候会一直报错。
创建fdfs_storage目录
Cd /home/FastDFS
mkdirfdfs_storage
b)启动storage
执行命令:
/usr/bin/fdfs_storaged /etc/fdfs/storage.confrestart
查看进程:
Ps –ef|grep storage
启动的时候这里通常会有点卡,等1分钟,如果还卡着说明配置有问题,就需要回头仔细检查配置文件了。
c)设置开启启动
仍然只需要在/etc/rc.local文件中加入启动命令即可。
/usr/bin/fdfs_storaged /etc/fdfs/storage.confrestart
6.1本地测试
a)测试配置
本地测试文件上传,也需要配置相关参数,首先配置/etc/fdfs/client.conf
Viclient.conf
修改2个参数
Base_path=/home/FastDFS
Tracker_server=192.168.174.130:22122
这里的base_path指定了FastDFS数据的存储目录,而tracker_server指定了对应stracker的ip以及访问端口。
b)执行测试
先从本地拷贝一个图片到服务器某一个目录下
通过upload来执行上传操作。
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/2.jpg
可以通过如下地址来访问图片:
http://192.168.174.130/group1/M00/00/00/wKiugllwVSuAMo6gAAEiTo59C9I154_big.jpg 但由于这里没有配置Nginx,所以暂时无法访问。
c)防火墙开放22122端口
为了让外界程序能够访问我们的stracker,需要开放端口。
vi /etc/sysconfig/iptables
d)JavaAPI测试
在自己电脑上编写java代码远程调用:
client.conf文件的内容如下:
tracker_server=192.168.174.130:22122
上面代码步骤解析:
1、加载配置文件,配置文件中的内容就是tracker服务的地址。
配置文件内容:tracker_server=192.168.174.130:22122
2、创建一个TrackerClient对象。直接new一个。
3、使用TrackerClient对象创建连接,获得一个TrackerServer对象。
4、创建一个StorageServer的引用,值为null
5、创建一个StorageClient对象,需要两个参数TrackerServer对象、
StorageServer的引用
6、使用StorageClient对象上传图片。
7、返回数组。包含组名和图片的路径。
因为请求访问流程是先访问tracker,tracker会将storage的访问地址响应给客户端,客户端再去请求对应的storage,所以防火墙还应该开放storage对应的端口。如下图:
4.Fastfdfs整合Nginx
为了通过http请求的方式去访问storage里存储的文件,我们可以通过给Nginx添加fastdfs-nginx-module模块来实现,当然,使用nginx的主要目的是负载均衡及实现高可用。
1.1安装fastdfs-nginx-module
上传fastdfs-nginx-module_v1.16.tar.gz
将fastdfs-nginx-module_v1.16.tar.gz移动到/usr/local/server目录下。
a)解压配置
tar –xf fastdfs-nginx-module_v1.16.tar.gz
再进入fastdfs-nginx-module/src目录
b)配置config
viconfig
这里有3处有local,而之前安装fastdfs的时候,对应的文件全部在/usr/lib下或者在/usr下,所以这里要将local去掉,否则会有很多错误提示找不到文件。
改之前:
改之后:
c)配置mod_fastdfs.conf
编辑mod_fastdfs.conf,配置文件如下
Base_path=/home/FastDFS这里是fastdfs的文件目录存放地址。
tracker_server这个是tracker的访问ip和端口
group_name这个是每一个storage对应的组
url_have_group_name访问文件,是否需要加上组名
store_path0 组群中store_path0的文件存储目录
我们需要改的只有base_path、tracker_server.
上面配置修改完成后,不要忘了把它拷贝到/etc/fdfs目录下
d)拷贝对应库文件到/usr/lib目录