fastDfs-理解安装,一篇就够了
觉得可以,点关注
contos7
fastdfs-5.11
fastdfs-nginx-module-1.20
libfastcommon-1.0.40
nginx-1.12.0
在百度网盘可以找到对应资源
链接: https://pan.baidu.com/s/19fZUvkJ-BBJ6zJAhsuEqJg 提取码: 55cd
将package包复制到  / 目录下,只需复制粘贴即可安装完成
后续更新最小集群安装
什么是FastDFS
- FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS架构
- 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 来快速定义文件
- 通过组名tracker能够很快的定位到客户端需要访问的存储服务器组是group1,并选择合适的存储服务器提供客户端访问。
- 2.存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件。
配置虚拟机ip,静态环境
vi /etc/sysconfig/network-scripts/ifcfg-eth0
- 修改内容,没有的添加
bootproto=static
onboot=yes
IPADDR=10.200.47.105
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=119.29.29.29
- 重启网络服务
systemctl restart network
fastDfs安装
- 创建文件夹
mkdir -p /package 											#存放安装包
mkdir -p /package/util										#工具安装包
mkdir -p /package/perl										#perl安装包
mkdir -p /package/gcc										#gcc环境安装包
mkdir -p /data/fastdfs/log
mkdir -p /data/fastdfs/data
mkdir -p /data/fastdfs/tracker
mkdir -p /data/fastdfs/client
- 安装环境
# 将gcc环境rpm包上传到/package/gcc
rpm  -ivh  /package/gcc/*.rpm --nodeps --force
# 将perl的rpm安装包上传到/package/perl
rpm  -ivh  /package/perl/*.rpm --nodeps --force
# netstat工具安装
rpm -ivh /package/util/*.rpm --nodeps --force
- 安装LibFastCommon,将libfastcommon-1.0.40.tar.gz文件上传到/package
cd /package
tar -zxvf libfastcommon-1.0.40.tar.gz
cd libfastcommon-1.0.40
./make.sh && ./make.sh install
- 做软连接
ln -s  /usr/lib64/libfastcommon.so  /usr/local/lib/libfastcommon.so
ln -s  /usr/lib64/libfastcommon.so  /usr/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 将fastdfs-5.11.tar.gz文件上传到/package
cd /package
tar -zxvf fastdfs-5.11.tar.gz
cd fastdfs-5.11
./make.sh && ./make.sh install
配置
- Tracker -- >> 跟踪器
cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
vim tracker.conf
## 关注如下几个配置
## 存储数据和日志文件的基本路径
base_path=/data/fastdfs/tracker
## Http服务端口
http.server_port=8080
## 默认提供服务端口
port=22122
- 启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
# 查看状态
netstat -apn|grep fdfs
# 打印结果
tcp  0  0 0.0.0.0:22122  0.0.0.0:*   LISTEN  10780/fdfs_trackerd
- 配置数据存储
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
vim /etc/fdfs/storage.conf
# 关注如下配置
# storage存储data和log的跟路径
base_path=/data/fastdfs/data
# 默认组名
group_name=group1
# 默认端口,相同组的storage端口号必须一致
port=23000
# 配置一个存储路径
store_path_count=1
store_path0=/data/fastdfs/data
# 配置跟踪器IP和端口
tracker_server=10.200.47.105:22122
- 启动存储服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
# 查看状态
netstat -apn|grep fdfs
# 查看日志
tail -f /data/fastdfs/data/logs/storaged.log
# 日志展示:单台FastDFS安装成功
set tracker leader: 192.168.72.130:22122
# 查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
Storage 1:
    id = 192.168.72.130
    ip_addr = 192.168.72.130 (localhost.localdomain)  ACTIVE
配置客户端测试
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf
# 关注如下几个配置
# client数据和日志目录
base_path=/data/fastdfs/client
# 配置跟踪器IP和端口
tracker_server=192.168.72.130:22122
- 客户端测试 调用客户端文件上传命令
- /usr/bin/fdfs_upload_file /etc/fdfs/client.conf
- 如 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/client.conf.sample
 
- 返回文件上传的相对路径和编号
- group1/M00/00/00/CsgvaV3t_K-AM2FxAAAFtXJOjeo.sample
 
- 文件成功上传storage服务器,但是还无法查看下载。需要安装Nginx服务器用来支持Http方式访问文件
安装Nginx
- 将fastdfs-nginx-module-1.20.tar.gz文件上传到/package
fastdfs-nginx-module作用说明:FastDfs通过Tracker服务器,向Storage存储数据
cd /package
tar -zxvf fastdfs-nginx-module-1.20.tar.gz
- 将nginx-1.12.0.tar.gz文件上传到/package
cd /package
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --add-module=/package/fastdfs-nginx-module-1.20/src/
make && make install
- 如果编译出错
 /usr/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
- 修改
vim /package/fastdfs-nginx-module-1.20/src/config
# 将以下两句话替换
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
# 再次执行
cd /package/nginx-1.12.0
./configure --add-module=/package/fastdfs-nginx-module-1.20/src/
make && make install
- 检查nginx是否安装成功
/usr/local/nginx/sbin/nginx -V
- 将配置文件拷贝不然浏览器无法访问nginx
cp /package/fastdfs-5.11/conf/http.conf /etc/fdfs/
cp /package/fastdfs-5.11/conf/mime.types /etc/fdfs/
- 配置fastdfs-nginx-module客户端
cd /package/fastdfs-nginx-module-1.20/src
cp mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
# 调整如下配置
# 链接超时
connect_timeout=20
# 配置跟踪器IP和端口
tracker_server=192.168.72.130:22122
# 路径包含group
url_have_group_name = true
# 必须和storage配置相同
store_path0=/data/fastdfs/data
- 配置nginx
cd /usr/local/nginx/conf/
vim nginx.conf
# 修改如下
server {
    listen       80;
    location ~/group([0-9])/M00 {
        root /data/fastdfs/data;
        ngx_fastdfs_module;
    }
}
启动nginx服务
## 启动
/usr/local/nginx/sbin/nginx
## 停止
/usr/local/nginx/sbin/nginx -s stop
## 重启
/usr/local/nginx/sbin/nginx -s reload
- 防火墙操作
systemctl status firewalld		 			#查看firewall防火墙状态
firewall-cmd --list-ports					#查看firewall防火墙开放端口
systemctl start firewalld.service			#打开firewall防火墙
systemctl stop firewalld.service			#关闭firewall防火墙
firewall -cmd --reload						#重启firewal防火墙
- 端口操作
ps -ef | grep nginx
从容停止Nginx:kill -QUIT 主进程号
快速停止Nginx:kill -TERM 主进程号
强制停止Nginx:kill -9 主进程号
启动:/usr/local/nginx/sbin/nginx
重启:/app/nginx/sbin/nginx -s reload -c nginx.conf
开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
FastDFS扩展模块特性
- 仅支持HTTP HEAD和GET
- 支持token方式的防盗链(缺省是关闭的)
- ts:生成token的时间(unix时间戳)
- token:32位的token字符串(md5签名)
- 支持指定保存的缺省文件名,URL参数名为filename
- 支持断点续传
推荐的FastDFS部署方案
- 文件上传和删除等操作:使用FastDFS client API,目前提供了C、PHP extension和Java的client API
- 文件下载采用HTTP方式:使用nginx或者apache扩展模块,不推荐使用FastDFS内置的web server
- 不要做RAID,直接挂载单盘,每个硬盘作为一个mount point
最大并发连接数设置
- 参数名:max_connections
- 缺省值:256
- 说明:FastDFS采用预先分配好buffer队列的
 做法,分配的内存大小为:max_connections * buff_size,因此配置的连接数越大,消耗的内存越多。不建议配置得过大,以避免无谓的内存开销。
工作线程数设置
- 参数名: work_threads
- 缺省值:4 • 说明:为了避免CPU上下文切换的开销,以及不必要的资源消耗,不建议将本参数设置得过大。为了发挥出多个CPU的效能,系统中的线程数总和,应等于CPU总数。
- 对于tracker server,公式为:work_threads + 1 = CPU数 • 对于storage,公式为:
 work_threads + 1 + (disk_reader_threads + disk_writer_threads) * store_path_count = CPU数
storage目录数设置
- 参数名:subdir_count_per_path
- 缺省值:256
- 说明:FastDFS采用二级目录的做法,目录会在FastDFS初始化时自动创建。存储海量小文件,打开了trunk存储方式的情况下,建议将本参数适当改小,比如设置为32,此时存放文件的目录数为 32 * 32 = 1024。假如trunk文件大小采用缺省值64MB,磁盘空间为2TB,那么每个目录下存放的trunk文件数均值为:2TB / (1024 * 64MB) = 32个
storage磁盘读写线程设置
- disk_rw_separated:磁盘读写是否分离
- disk_reader_threads:单个磁盘读线程数
- disk_writer_threads:单个磁盘写线程数
- 如果磁盘读写混合,单个磁盘读写线程数为读线程数和写线程数之后
- 对于单盘挂载方式,磁盘读写线程分别设置为1即可
- 如果磁盘做了RAID,那么需要酌情加大读写线程数,这样才能最大程度地发挥磁盘性能
storage同步延迟相关设置
- sync_binlog_buff_interval:将binlog buffer写入磁盘的时间间隔,取值大于0,缺省值为60s
- sync_wait_msec:如果没有需要同步的文件,对binlog进行轮询的时间间隔,取值大于0,缺省值为100ms
- sync_interval:同步完一个文件后,休眠的毫秒数,缺省值为0 • 为了缩短文件同步时间,可以将上述3个参数适当调小即可
fastDfs-理解安装,一篇就够了的更多相关文章
- JSON理解(一篇就够了)
		可以看看视频讲解,视频几十分钟就结束了 JSON 1.什么是json 其实是一种数据格式的规范,与开发的语言无关,轻量级的数据格式 全称JavaScript Object Notation 2.优点: ... 
- ExpandoObject与DynamicObject的使用  RabbitMQ与.net core(一)安装  RabbitMQ与.net core(二)Producer与Exchange  ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)  .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了
		ExpandoObject与DynamicObject的使用 using ImpromptuInterface; using System; using System.Dynamic; names ... 
- C#实现多级子目录Zip压缩解压实例  NET4.6下的UTC时间转换  [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了  asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程  asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案  .NET Core开发日志
		C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ... 
- [转帖]nginx学习,看这一篇就够了:下载、安装。使用:正向代理、反向代理、负载均衡。常用命令和配置文件
		nginx学习,看这一篇就够了:下载.安装.使用:正向代理.反向代理.负载均衡.常用命令和配置文件 2019-10-09 15:53:47 冯insist 阅读数 7285 文章标签: nginx学习 ... 
- 如果这样来理解HTTPS,一篇就够了!
		1.前言 可能有初学者会问,即时通讯应用的通信安全,不就是对Socket长连接进行SSL/TLS加密这些知识吗,干吗要理解HTTPS协议呢. 这其实是个误解:当今主流的移动端IM数据通信,总结下来无外 ... 
- [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了
		[译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 本文首发自:博客园 文章地址: https://www.cnblogs.com/yilezhu/p/ ... 
- Vue学习看这篇就够
		Vue -渐进式JavaScript框架 介绍 vue 中文网 vue github Vue.js 是一套构建用户界面(UI)的渐进式JavaScript框架 库和框架的区别 我们所说的前端框架与库的 ... 
- Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)  JAVA日志的前世今生  .NET MVC采用SignalR更新在线用户数  C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础   C#多线程编程系列(一)- 简介
		Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ... 
- React入门看这篇就够了
		摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ... 
- 《IM开发新手入门一篇就够:从零开发移动端IM》
		登录 立即注册 TCP/IP详解 资讯 动态 社区 技术精选 首页 即时通讯网›专项技术区›IM开发新手入门一篇就够:从零开发移动端IM 帖子 打赏 分享 发表评论162 想开 ... 
随机推荐
- 超出隐藏兼容H5
			常用的字体超出隐藏不能兼容H5和ios 所以整理了两种用jquery来实现的方法,然后弊端是只能隐藏指定字数不能段落隐藏 方法一. //超出隐藏兼容iosfunction hide(text,nube ... 
- python经典面试算法题1.4:如何对链表进行重新排序
			本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.4 对链表按照如下要求重新排序 [微软笔试题] 难度系数: ... 
- 关于vue ui组件
			一.vue ui 组件 1: vue 当前很火前端框架vue 针对PC用户 pc 端与移动端区别 (1)屏幕宽度:992px > (2)操作方式:鼠标 事件 手指:触碰操作 -饿了么:基于 ... 
- ThinkPHP6 核心分析:系统服务
			什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数.注册路由等(不限于这些操作,主要是看 ... 
- PHP 在 Laravel 中动态隐藏 API 字段
			我最近在 Laravel Brasil 社区看到一个问题,结果比看起来更有趣.想象一下你有一个 UsersResource 用下面的实现: <?php namespace App\Http\Re ... 
- 020.掌握Pod-Pod基础使用
			一 Pod定义详解 1.1 完整Pod定义文件 apiVersion: v1 #必选,版本号,例如v1,版本号必须可以用 kubectl api-versions 查询到 kind: Pod #必选, ... 
- 【SQL SERVER】2017 Developer 安装教程
			官网下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 1.下载之后双击exe文件,选择基本 自定义都行 2.选择 ... 
- [error]The command could not be located because '/usr/bin' is not included
			配置HBase环境变量的时候写错了,写成了如下: 之后便报错 解决: 系统命令找不到时,通常是路径不对,直接在命令行用全路径即可,配置环境变量时,加入自己的环境变量,还要附带上之前的变量.如最后加上: ... 
- nyoj 36-最长公共子序列 (动态规划,DP, LCS)
			36-最长公共子序列 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:18 submit:38 题目描述: 咱们就不拐弯抹角了,如题,需要你做的就是写 ... 
- gitbook 入门教程之一招彻底解决 favicon 图标失效问题
			favicon-absolute 项目 favicon-absolute 插件采用绝对路径设置网站 favicon 图标,相对于相对路径来说更加简单方便. 
