FastDFS简介
FastDFS是什么?我们这里可以看一下度娘的解释。FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。我这里使用服务器环境是 Centos7.
注意:FastDFS只能上传500MB的小文件
FastDFS角色简介
tracker:跟踪者,负责调度存储服务。
storage:用于文件存储。
client:调用tracker
集群示例图
跟踪器(Tracter)和存储节点(Storage)都可以由一台多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,者缺一不可。
上传文件交互过程
1.client询问tracker上传到的storage,不需要附加参数;
2.tracker返回一台可用的storage;
3.client直接和storage通讯完成文件上传;
下载文件交互过程
1.client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
2.tracker返回一台可用的storage;
3.client直接和storage通讯完成文件下载。
安装准备
FastDFS相关包可在https://github.com/happyfish100下载.
nginx安装包可在http://nginx.org/en/download.html下载
我已经上传到百度网盘了,大家可以下载快些
链接:https://pan.baidu.com/s/1jB1koQIBwR1OC07J6mb4mg
提取码:frfc
上传下面4个文件到 /usr/local/fastdfs 目录下面
开始安装
安装libfastcommon
cd /usr/local/fastdfs
unzip libfastcommon-master.zip
cd libfastcommon-master
如果之前没有安装过gcc,则要按照gcc
yum -y install gcc-c++
编译
./make.sh
./make.sh install
建立软连接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
安装FastDFS
/usr/local/fastdfs目录,解压FastDFS安装包
cd /usr/local/fastdfs
unzip fastdfs-master.zip
cd fastdfs-master
yum -y install perl
./make.sh
./make.sh install
重上图能看到已经安装到了/etc/fdfs目录中中,复制一下3个默认的配置文件后面编辑需要使用。
cd /etc/fdfs/
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
至此FastDFS已经安装完毕,接下来的工作就是依次配置Tracker和Storage了。
配置
配置tracker
创建tracker工作目录
在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs/tracker目录用于存放Tracker服务器的相关文件:
mkdir -p /opt/fastdfs/tracker
修改tracker配置文件
配置下面4个配置:
vi /etc/fdfs/tracker.conf
#启用配置文件,默认启用配置文件(默认值)
disabled=false
#设置tracker的端口号,通常采用22122这个默认端口 (默认值)
port=22122
#设置tracker的数据文件和日志目录
base_path=/opt/fastdfs/tracker
#设置http端口号,(默认值)
http.server_port=8080
启动tracker
service fdfs_trackerd start
查看启动日志
tail -f /opt/fastdfs/tracker/logs/trackerd.log
通过netstat命令查看一下端口监听情况
netstat -unltp|grep fdfs
配置storage
为storage配置工作目录
步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir -p /opt/fastdfs/storage_data /opt/fastdfs/storage
修改storage配置文件
vi /etc/fdfs/storage.conf
#启用配置文件(默认值)
disabled=false
#组名,根据实际情况修改 (默认值)
group_name=group1
#设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 (默认值)
port=23000
#设置storage数据文件和日志目录
base_path=/opt/fastdfs/storage
#存储路径个数,需要和store_path个数匹配 (默认值)
store_path_count=1
#实际文件存储路径
store_path0=/opt/fastdfs/storage_data
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
tracker_server=192.168.100.128:22122
#设置 http 端口号 (默认值)
http.server_port=8888
启动storage
service fdfs_storaged start
如果启动成功,/opt/fastdfs/storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看目录下面是否有文件
#查看目录
ls /opt/fastdfs/storage/data
#查看端口监听情况
netstat -unltp|grep fdfs
查看日志
tail -f /opt/fastdfs/storage/logs/storaged.log
验证是否配置成功
fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
为什么 安装 FastDFS的nginx模块
我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了192.168.100.128,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.100.128,如果复制没有完成,客户端就用这个ID在192.168.100.128取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。
FastDFS的nginx模块安装
安装nginx依赖
#安装nginx依赖
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
mkdir -p /usr/local/nginx
#安装nginx并添加fastdfs-nginx-module
cd /usr/local/fastdfs
tar -zxvf nginx-1.18.0.tar.gz
unzip fastdfs-nginx-module-master.zip
#解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:
cd /usr/local/fastdfs/nginx-1.18.0
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs/fastdfs-nginx-module-master/src
修改fastdfs配置
把FastDFS的安装目录/usr/local/fastdfs/fastdfs-master/conf目录下得http.conf和mime.types和/usr/local/fastdfs/fastdfs-nginx-module-master/src目录下的mod_fastdfs.conf 拷贝到/etc/fdfs目录下:
cp /usr/local/fastdfs/fastdfs-master/conf/http.conf /etc/fdfs/
cp /usr/local/fastdfs/fastdfs-master/conf/mime.types /etc/fdfs/
cp /usr/local/fastdfs/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
修改mod_fastdfs.conf配置文件
vi /etc/fdfs/mod_fastdfs.conf
#保存日志目录
base_path=/opt/fastdfs/storage
#tracker服务器的IP地址以及端口号
tracker_server=192.168.100.128:22122
#storage服务器的端口号(默认值)
storage_server_port=23000
#文件 url 中是否有 group 名
url_have_group_name = true
#存储路径
store_path0=/opt/fastdfs/storage_data
#设置组的个数,事实上这次只使用了group1,设置了group_count = 1,接下来就需要在文件尾部追加这1个group setting:
6.group_count = 1
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs/storage_data
修改nginx.conf配置文件
编辑 /usr/local/nginx/conf/nginx.conf,在http模块中添加一个server如下
server {
listen 9999;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
location ~/group1/M00 {
#fdfs配置的数据存储路径
root /opt/fastdfs/storage_data/data;
ngx_fastdfs_module;
}
}
启动nginx
/usr/local/nginx/sbin/nginx
设置开机自启动
编辑/etc/rc.d/rc.local让系统开机自启动fdfs服务
vi /etc/rc.d/rc.local
#在尾部增加下面一行命令
service fdfs_trackerd start
service fdfs_storaged start
/usr/local/nginx/sbin/nginx
修改文件权限
chmod +x /etc/rc.d/rc.local
总结
通过上述的说明是不是FastDFS 可以搭建成功,下面我们就使用spring boot 来作为客户端来使用FastDFS 存储等相关操作。