FastDFS安装使用说明

Dawn ·
更新时间:2024-09-21
· 515 次阅读

1. 单机版FastDFS安装 1.1 上传

将压缩包上传到linux下的/home/fdfs目录:

1.2 安装依赖

FastDFS运行需要一些依赖,如下:

1.2.1 安装GCC依赖

GCC用来对C语言代码进行编译运行,使用yum命令安装:

sudo yum -y install gcc 1.2.2 安装unzip工具

unzip工具对压缩包进行解压

sudo yum install -y unzip zip 1.2.3 安装libevent sudo yum -y install libevent 1.2.4 安装Nginx所需依赖 sudo yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel 1.2.5 安装libfastcommon-master

这个没有yum包,只能通过编译安装:

解压刚刚上传的libfastcommon-master.zip

unzip libfastcommon-master.zip

进入解压完成的目录:

cd libfastcommon-master

编译并且安装:

sudo ./make.sh sudo ./make.sh install

到这里为止,所有依赖都已经安装完毕,接下来安装FastDFS:

1.3 安装FastDFS 1.3.1 编译安装

这里采用编译安装,步骤与刚才的编译安装方式一样:

解压

tar -zxvf FastDFS_v5.08.tar.gz

进入目录

cd FastDFS

编译并安装

sudo ./make.sh sudo ./make.sh install

校验安装结果

1)安装完成,应该能在/etc/init.d/目录,通过命令ll /etc/init.d/ | grep fdfs看到FastDFS提供的启动脚本:

其中:

fdfs_trackerd 是tracker启动脚本 fdfs_storaged 是storage启动脚本

2)可以在 /etc/fdfs目录,通过命令查看到以下配置文件模板:

其中:

tarcker.conf.sample 是tracker的配置文件模板 storage.conf.sample 是storage的配置文件模板 client.conf.sample 是客户端的配置文件模板 1.3.2 启动tracker

FastDFS的tracker和storage在刚刚的安装过程中,都已经被安装了,因此安装这两种角色的方式是一样的。不同的是,两种需要不同的配置文件。

启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可。

编辑tracker配置

首先将模板文件进行赋值和重命名:

sudo cp tracker.conf.sample tracker.conf sudo vim tracker.conf

打开tracker.conf,修改base_path配置:

base_path=/home/fdfs/tracker # tracker的数据和日志存放目录 创建目录

刚刚配置的目录可能不存在,创建出来

sudo mkdir -p /home/fdfs/tracker

启动tracker

可以使用 sh /etc/init.d/fdfs_trackerd 启动,不过安装过程中,fdfs已经被设置为系统服务,可以采用熟悉的服务启动方式:

sudo service fdfs_trackerd start # 启动fdfs_trackerd服务,停止用stop

另外,可以通过以下命令,设置tracker开机启动:

sudo chkconfig fdfs_trackerd on 1.3.3 启动storage

启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可。

编辑storage配置

首先将模板文件进行赋值和重命名:

sudo cp storage.conf.sample storage.conf sudo vim storage.conf

打开storage.conf,修改base_path配置:

base_path=/home/fdfs/storage # storage的数据和日志存放目录 store_path0=/home/fdfs/storage # storage的上传文件存放路径 tracker_server=111.229.237.1:22122 # tracker的地址 创建目录

刚刚配置的目录可能不存在,创建出来

sudo mkdir -p /home/fdfs/storage

启动storage

使用 sh /etc/init.d/fdfs_storaged 启动,同样可以用服务启动方式:

sudo service fdfs_storaged start # 启动fdfs_storaged服务,停止用stop

另外,可以通过以下命令,设置tracker开机启动:

sudo chkconfig fdfs_storaged on

最后,通过ps -ef | grep fdfs 查看进程:

1.4 安装Nginx及FastDFS模块 1.4.1 FastDFS的Nginx模块

解压

tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

配置config文件

# 进入配置目录 cd /home/home/fdfs/fastdfs-nginx-module/src/ # 修改配置 vim config # 执行下面命令(将配置中的/usr/local改为/usr): :%s+/usr/local/+/usr/+g

配置mod_fastdfs.conf

# 将src目录下的mod_fastdfs.conf复制到 /etc/fdfs目录: sudo cp mod_fastdfs.conf /etc/fdfs/ # 编辑该文件 sudo vim /etc/fdfs/mod_fastdfs.conf

修改一下配置:

connect_timeout=10 # 客户端访问文件连接超时时长(单位:秒) tracker_server=47.102.132.1:22122 # tracker服务IP和端口 url_have_group_name=true # 访问链接前缀加上组名 store_path0=/home/fdfs/storage # 文件存储路径

复制 FastDFS的部分配置文件到/etc/fdfs目录

cd /home/fdfs/FastDFS/conf/ cp http.conf mime.types /etc/fdfs/ 1.4.2 安装Nginx

解压

tar -xvf nginx-1.10.0.tar.gz

配置

sudo ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --add-module=/home/fdfs/fastdfs-nginx-module/src

–conf-path=/etc/nginx/nginx.conf

编译安装

sudo make && sudo make install #注意:如果nginx已安装,只编译,不安装 make 备份之前的nginx mv /usr/sbin/nginx /usr/sbin/nginx-bck cd objs cp nginx /usr/sbin #先拷贝原有文件

配置nginx整合fastdfs-module模块

需要修改nginx配置文件,在/etc/nginx/config/nginx.conf文件中:

sudo vim /etc/nginx/conf/nginx.conf

将文件中,原来的server 80{ ...} 部分代码替换为如下代码:

server { listen 80; server_name localhost; # 监听域名中带有group的,交给FastDFS模块处理 location ~/group([0-9])/ { ngx_fastdfs_module; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }

启动

nginx # 启动 nginx -s stop # 停止 nginx -s reload # 重新加载配置 2.FastDFS介绍 2.1 简介 FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 2.2 角色 FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 2.3 特性 分组存储,灵活简洁、对等结构,不存在单点 文件ID由FastDFS生成,作为文件访问凭证,FastDFS不需要传统的name server 和流行的web server无缝衔接,FastDFS已提供apache和nginx扩展模块 大、中、小文件均可以很好支持,支持海量小文件存储 支持多块磁盘,支持单盘数据恢复 支持相同文件内容只保存一份,节省存储空间 存储服务器上可以保存文件附加属性 下载文件支持多线程方式,支持断点续传 2.4 同步机制 采用binlog文件记录更新操作,根据binlog进行文件同步 同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行; 文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器; 3.Springboot整合FastDFS 3.1 导入依赖 com.github.tobato fastdfs-client 1.26.1-RELEASE 3.2 配置config /** * @author yan * @Date:2020/3/31 */ @Configuration @Import(FdfsClientConfig.class) //解决jmx重复注册bean的问题 @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING) public class FastClientImporter { } 3.3 yml配置 fdfs: so-timeout: 25000 connect-timeout: 6000 tracker-list: - ip地址:22122 3.4 FastDFS上传第三方视频资源 /** * @author yan * @Date:2020/3/31 */ @Configuration @Slf4j public class DownloadUtils { @Autowired private FastFileStorageClient storageClient; public String saveUrlAs(String url) { String fn = ""; String extension = StringUtils.substringAfterLast(url, "."); HttpURLConnection conn = null; InputStream inputStream = null; try { // 建立链接 URL httpUrl = new URL(url); conn = (HttpURLConnection) httpUrl.openConnection(); //以Post方式提交表单,默认get方式 conn.setRequestMethod("GET"); conn.setDoInput(true); conn.setDoOutput(true); // post方式不能使用缓存 conn.setUseCaches(false); //连接指定的资源 conn.connect(); //获取网络输入流 inputStream = conn.getInputStream(); StorePath storePath = storageClient.uploadFile(inputStream,conn.getContentLength(), extension, null); if (storePath != null) { fn = storePath.getFullPath(); } conn.disconnect(); } catch (Exception e) { log.error("下载直播视频出错:" + e.getMessage()); } return fn; } } 3.5 测试类 /** * @author yan * @Date:2020/3/31 */ @SpringBootTest(classes = {DemoTestApplication.class}) @RunWith(SpringRunner.class) @Slf4j class DemoTestApplicationTests { @Autowired private DownloadUtils downloadUtils; @Test void contextLoads() throws Exception { String url = "http://jdvodyyjqy.vod.126.net/jdvodyyjqpdzy/0-51736678926296-1578878142518-0-mix.mp4"; String s = downloadUtils.saveUrlAs(url); log.info("文件地址回调:"+s); } } 4.FastDFS常用工具类封装 /** * @author yan * @Date:2020/3/31 */ @Slf4j @Configuration public class FastDFSUtils { @Autowired private FastFileStorageClient storageClient; /** *文件删除 * @param fileUrl */ public void deleteFile(String fileUrl) { if (StringUtils.isEmpty(fileUrl)) { return; } try { StorePath storePath = StorePath.praseFromUrl(fileUrl); storageClient.deleteFile(storePath.getGroup(), storePath.getPath()); } catch (FdfsUnsupportStorePathException e) { log.error("文件删除失败:{}",e.getMessage()); } } /** * 上传文件 * * @param file * 文件对象 * @return 文件访问地址 * @throws IOException */ public String uploadFile(MultipartFile file) throws IOException { StorePath storePath = storageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null); return storePath.getFullPath(); } }
作者:渴死的咸鱼



fastdfs

需要 登录 后方可回复, 如果你还没有账号请 注册新账号