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 想开 ...
随机推荐
- iOS开发高级分享 - iOS的可折叠表视图
导言 我曾经开发过一个iphone应用程序,它显示了大量的输入,这些输入分为不同的类别,在`UITableView`...若要更改其中一个输入的值,用户按下表视图中的对应行,并在出现的单独屏幕中更改该 ...
- 在VMware环境下安装Windows2008
1.软硬件安装 软件:推荐使用VMware,这里我使用的是VMware15 镜像:Windows 2008 如果没有镜像可以到这里 链接:https://pan.baidu.com/s/1r_7K-U ...
- 如何给HTML标签中的文本设置修饰线
text-decoration属性介绍 text-decoration属性是用来设置文本修饰线呢,text-decoration属性一共有4个值. text-decoration属性值说明表 值 作用 ...
- [HTML] 学HTML写的第一第二个网页
①第一个网页 <h2>英雄联盟(电子竞技类游戏)</h2> <p><b>(英雄联盟)</b>(简称lol)是由美国<i>Roit ...
- C#实现整型数据字任意编码任意进制的转换和逆转换
实现如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespa ...
- 领扣(LeetCode)七进制数 个人题解
给定一个整数,将其转化为7进制,并以字符串形式输出. 示例 1: 输入: 100 输出: "202" 示例 2: 输入: -7 输出: "-10" 注意: 输入 ...
- RHEL7.2 SSH无密码登录非root用户
1 修改三台虚拟机的/ect/hosts文件 [hadoop@hadoop01 ~]$ cat /etc/hosts 127.0.0.1 localhost localhost.localdomain ...
- python: __future__的介绍
__future__ 给旧版本python提供新版本python的特性例如: 在python2.X中可以使用print"" 也可以使用print() 但是加载这个print的新特性 ...
- ubuntu 16.04上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/977f5125/,欢迎阅读! compile glog and glags on ubuntu 16.04 Series comp ...
- 18063-圈中的游戏-(第九章第4题)-"数组指针的使用"-数学分析
代码借鉴CSDN大佬https://blog.csdn.net/weixin_41409140/article/details/88071047(对大佬的大佬代码进行分析) 18063 圈中的游戏 时 ...