FastDFS 学习笔记
一、理论基础
FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器。
分布式文件系统FastDFS
FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统。
FastDFS的两个核心概念分别是:Tracker(跟踪器)、Storage(存储节点)
跟踪器Tracker主要做调度工作,相当于mvc中的controller的角色,在访问上起负载均衡的作用。跟踪器和存储节点都可以由一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
跟踪器Tracker负责管理所有的Storage和group,每个Storage在启动后会连接Tracker,
告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,
建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
存储节点Storage采用了分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。
一个卷[Volume](组[group])可以由一台或多台存储服务器组成,一个组中的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
二、安装环境
操作系统版本: CentOS release 6.5
yum install unzip zip gcc-c++
创建一个文件夹/opt/dfspackages/,用来保存相关软件
公共函数库:libfastcommon-master.zip
下载地址:
https://codeload.github.com/happyfish100/libfastcommon/zip/master
主程序:fastdfs-5.10.tar.gz
下载地址:https://github.com/happyfish100/fastdfs
https://codeload.github.com/happyfish100/fastdfs/zip/master
NGINX与DFS链接模块: fastdfs-nginx-module_v1.16.tar.gz
https://github.com/happyfish100/fastdfs-nginx-module
https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master
下载完之后通过WinScp,SECURET 等工具直接传送到服务器
接下来FastDFS的安装过程步骤如下:
三、安置步骤
3.1 libfastcommon包安装
FastDFS 将以前版本的公共的一些函数单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon。
unzip libfastcommon-master.zip
执行编译步骤:./make.sh
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
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
mkdir /opt/fastdfs_tracker
编辑上/etc/fdfs/tracker.conf 配置文件,打开文件后依次做以下修改:
#启用配置文件(默认false)
#设置tracker的端口号,通常采用22122这个默认端口
port=22122
base_path=/opt/fastdfs_tracker
http.server_port=6666
为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
最后通过命令启动Tracker服务器:
service fdfs_trackerd start
如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs
服务运行的22122端口正常
创建Storage服务器的文件目录,注意同Tracker相比要多建一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
接下来修改/etc/fdfs/storage.conf配置文件,打开文件后依次做以下修改:
#设置storage端口号,默认是23000,同一个组的storage端口号必须一致
port=23000
#设置storage数据文件和日志目录
base_path=/opt/fastdfs_storage
#实际文件存储路径
store_path0=/opt/fastdfs_storage_data
#存储路径个数,需要和store_path个数匹配
tracker_server=117.27.1.11 :22122
#设置 http 端口号
http.server_port=8888
配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下来就可以启动Storage服务了:
service fdfs_storaged start
验证成功启动的方法:
netstat -unltp|grep fdfs
成功的话,/opt/fastdfs_storage/data目录下生成好的文件夹,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件夹。
新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:
查看:storage服务器是否已经登记到 tracker服务器,运行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到117.27.1.11 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器
至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,
这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,
安nginx模块依赖lib库
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
前提要先安装好nginx等
接下来就具体记录一下fastdfs-nginx-module的安装配置过程
代码下载地址:https://github.com/happyfish100/fastdfs-nginx-module
进入源码nginx安装文件夹
解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
./configure --prefix=/usr/local/nginx --add-module=/opt/dfspackages/fastdfs-nginx-module-master/src
make
make install
make && make install
useradd -g nginx nginx
配置nginx.conf文件,加入server{ }中
listen 9999;
location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
cp /opt/dfspackages/fastdfs-master/conf/http.conf /etc/fdfs/
cp /opt/dfspackages/fastdfs-master/conf/mime.types /etc/fdfs/
cp /opt/dfspackages/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
tracker_server=192.168.111.11:22122
storage_server_port=23000
url_have_group_name = true
store_path0=/opt/fastdfs_storage_data
group_count = 3
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/00
最后启动nginx:
/usr/local/nginx/sbin/nginx
浏览器也可以看到nginx的主页
转载于:https://www.cnblogs.com/haoge92/p/9327934.html
FastDFS 学习笔记相关推荐
- FastDFS学习笔记 -- day04 与Nginx整合
一.在 tracker 服务器上安装 nginx 说明:在每个tracker上安装nginx的只要目的是做负载均衡及实现高可用,如果只有一台tracker服务器,则可以不配置nginx 二.在 sto ...
- FastDFS 学习笔记
一.理论基础 FastDFS比较适合以中小文件为载体的在线服务,比如跟NGINX(APACHE)配合搭建图片服务器. 分布式文件系统FastDFS FastDFS是纯C语言实现,只支持Linux.Fr ...
- FastDFS学习笔记
FastDFS课程内容 第一部分:FastDFS基础回顾 为什么要有分布式文件系统.分布式文件系统对比.FastDFS特性.linux安装.java访问FastDFS 第二部分:FastDFS系统架构 ...
- 初级Java学习笔记总结
java高并发解决方案: 1.页面静态:静态访问消耗的资源少 信息录入然后生成静态页面以供访问 2.数据库集群和库表散列 主-从数据库关 ...
- 小滴课堂-项目大课学习笔记(2)海量数据存储-分布式文件存储系统
在了解分布式文件存储之前,我们可以先来了解一下什么是分布式存储,分布式存储的系统又分为哪些 什么是分布式存储 在近些年来,随着各大的互联网公司的大数据应用的崛起,分布式系统被广泛的投入到实践当中.互联 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
最新文章
- 关于中台的思考与尝试
- 1年内4次架构调整,谈Nice的服务端架构变迁之路--转
- java中在做除法操作时,对有余数的结果进行取整
- finalizer_Java Finalizer和Java文件输入/输出流
- Java 8中的5个功能将改变您的编码方式
- android view使用方法,android – 如何使用getView()方法,它在哪里被调用?
- STM32-时钟-时钟树-时钟初始化配置
- jquery mysql表格_使用jQuery设计数据表格:设计表格基类
- 不占内存的浏览器_4款黑科技办公网站,高效实用,不占内存,高手的必备神器...
- 百度SDN实践与思考
- 智能视频监控中的多目标跟踪分析
- Ubuntu IP系统配置文件使用命令设置地址
- python音乐制作_Python实现音乐的剪辑
- PSCS6下载和安装教程
- 穷人和富人的差别在哪里
- java上传文件怎么设置成777权限_777权限是什么意思?文件夹权限为777如何修改设置?...
- 【运放学习】:虚短、虚短、虚地、深度负反馈
- SQLyog的安装及使用
- JavaScript入门3JS外置对象:Window、Document对象与DOM实例详解
- MySQL查询任课老师所在系_查询数据库系统课程的任课教师。