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个参数适当调小即可
posted @ 2019-12-11 10:25  梦幻·小白  阅读(1178)  评论(0编辑  收藏  举报