前言
FastDFS是一款轻量级的分布式文件系统,本人在刚接触FastDFS安装的时候,踩了不少的坑。为了给自己以后安装留份记录,也为了帮助大家少走弯路,写下这篇博客供大家参考;
如果在你安装过程中出现的问题,欢迎大家在评论区交流;
安装
一、安装依赖
1、安装c语言编译环境和一些工具
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget
2、安装FastDFS需要依赖的libfastcommon包
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz //下载安装包
tar -zxvf V1.0.38.tar.gz //解压
cd libfastcommon-1.0.38 //进入安装目录
./make.sh //编译
./make.sh install //安装
二、安装FastDFS
1、安装FastDFS并查看是否安装成功
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz //下载安装包
tar -zxvf V5.11.tar.gz //解压
cd fastdfs-5.11 //进入安装目录
./make.sh //编译
./make.sh install //安装
ls -la /usr/bin/fdfs* //查看是否安装成功,安装成功则会显示下图中内容
三、配置Tracker和Storage
1、进入/etc/fdfs目录,有三个.sample后缀的文件(自动生成的fdfs模板配置文件),通过cp命令拷贝其中两个文件(因为本机不做客户端,所以client配置文件无需服务),并删除.sample后缀作为正式配置文件。
cd /etc/fdfs //进入目录
cp tracker.conf.sample tracker.conf
cp storage.conf.sample storage.conf
2、创建文件系统存储路径
mkdir -p /usr/local/fastdfs/tracker //tracker存储data和log的目录
mkdir -p /usr/local/fastdfs/storage //storage存储data和log的目录
3、编辑tracker.conf,设置参数
vim /etc/fdfs/tracker.conf
//设置以下参数
base_path=/usr/local/fastdfs/tracker //指定tracker存储data和log的跟路径,必须提前创建好
port=22122 //tracker默认
http.server_port=80 //http端口,需要和nginx相同
3、启动tracker服务(支持systemctl start|stop|restart 服务名)
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start //启动服务
4、查看端口情况,如下图
netstat -apn|grep fdfs
四、配置Storage
1、编辑storage.conf,设置参数
vim /etc/fdfs/storage.conf
//设置以下参数
base_path=/usr/local/fastdfs/storage //storage存储data和log的跟路径,必须提前创建好
port=23000 //storge默认23000,同一个组的storage端口号必须一致
group_name=group1 //默认组名,根据实际情况修改
store_path_count=1 //存储路径个数,需要和store_path个数匹配
store_path0=/usr/local/fastdfs/storage //如果为空,则使用base_path
tracker_server=你的服务器ip地址:22122 //配置该storage监听的tracker的ip和port
2、启动storage服务(支持systemctl start|stop|restart 服务名)
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
3、查看日志和查看端口
vim /usr/local/fastdfs/tracker/logs/trackerd.log //发现已经开始选举,并且作为唯一的一个tracker,被选举为leader
netstat -apn|grep fdfs //查看端口
五、安装fastdfs-nginx-module和nginx
为什么需要用Nginx访问?
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。
假设Tracker服务器将文件上传到了192.168.4.125,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.4.126,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.4.126上取文件,就会出现文件无法访问的错误。
而fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误
安装fastdfs-nginx-module
1、新建安装目录并下载安装包
mkdir -p /usr/local/myservice //创建下载和安装目录
cd /usr/local/myservice //进入目录
wget http://nginx.org/download/nginx-1.15.2.tar.gz //下载nginx
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz //下载中间模块
2、解压fastdfs-nginx-module并编辑配置文件
tar -xvf V1.20.tar.gz
cd fastdfs-nginx-module-1.20/src/
vim config //编辑配置文件
//修改以下两项:因为默认配置的路径是错误的,所以我们需要更改,不更改的话,安装nginx会报错
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
3、复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改
cp /usr/local/myservice/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs
vim /etc/fdfs/mod_fastdfs.conf //编辑
//修改以下配置
tracker_server=你的服务器ip地址:22122 //tracker的地址
url_have_group_name=true //url是否包含group名称
storage_server_port=23000 //需要和storage配置的相同
store_path_count=1 //存储路径个数,需要和store_path个数匹配
store_path0=/usr/local/fastdfs/storage //文件存储的位置,与storage.conf中配置相同
4、复制 FastDFS 的部分配置文件到/etc/fdfs 目录
cd 你的fastdfs的安装路径/FastDFS/conf/
cp http.conf mime.types /etc/fdfs/
安装nginx
1、安装
yum -y install libpcre3 libpcre3-dev openssl libssl-dev libperl-dev //安装依赖
cd /usr/local/myservice/ //我们之前把nginx的tar包下载在这里
tar -zxvf nginx-1.15.2.tar.gz
cd nginx-1.10.1 //进入nginx安装目录
//增加配置,并加载fastdfs-nginx-module模块:
//prefix路径存放nginx配置文件路径,sbin-path指定nginx安装目录,addmodule指定fastdfs-nginx-module位置
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/myservice/fastdfs-nginx-module-1.20/src
//编译和安装
make
make install
2、配置
vim /opt/nginx/conf/nginx.conf //编辑nginx配置文件
//将侦听80端口和域名为localhost的server修改成以下内容
listen 80;
server_name 你发请求的域名;
//监听域名中带有group的,交给FastDFS模块处理,这个location放在 location /{ **}之前
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
3、启动nginx
cd /usr/local/myservice/nginx-1.10.1
nginx //启动nginx
nginx -s stop //停止nginx
nginx -s reload //重新载入配置文件
4、查看nginx是否启动,启动成功会有一个主进程和一个工作进程
ps -ef | grep nginx
至此服务器端的部署全部完成
六、SpringBoot项目使用客户端测试
一、引入依赖
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>1.26.2</version>
</dependency>
二、application.yml中添加配置
fdfs:
thumb-image:
height: 60
width: 60
tracker-list:
- 你的服务器ip地址:22122 #fastdfs的tracker服务地址,是一个列表可以配置多个
so-timeout: 1501 #读取时间
connect-timeout: 1601 #连接超时时间
三、添加配置类
@Configuration
@Import(FdfsClientConfig.class)
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class FastClientImporter {
}
四、使用,效果如下图
//注入操作fastdfs服务器对象
@Autowired
private FastFileStorageClient storageClient;
//读取文件==自行创建和读取
//获取文件后缀名
String type = StringUtils.substringAfterLast(filename, ".");
//上传文件需要四个参数
//第一个参数:文件的字节流
//第二个参数:文件的大小
//第三个参数:文件的类型
//第四个参数:
StorePath storePath = this.storageClient.uploadFile(file.getInputStream(), file.getSize(), type, null);
//上传后通过getFullPath获取文件路径
// group1/M00/00/00/rBEABF_Al8uAZi6IAABjnEn4Es0791.jpg是一串这个玩意
storePath.getFullPath();
//在浏览器中通过下面地址就能访问
"你的服务器ip或备案好的域名访问/" + group1/M00/00/00/rBEABF_Al8uAZi6IAABjnEn4Es0791.jpg