当前位置: 首页 > news >正文

FastDFS集群部署与性能优化实战

目录

一、介绍

二、FastDFS原理

三、FastDFS部署

1.资源清单

2.修改主机名

3.安装libfastcommon(tracker01、tracker02、storage1、storage2)

4.安装编译FastDFS(tracker01、tracker02、storage1、storage2)

5.配置tracker服务器(tracker01、tracker02)

6.配置Storage服务(storage1、storage2)

7.配置client(tracker01)

8.测试上传文件(tracker01)

9.在所有storage节点安装fastdfs-nginx-module和nginx(storage1、storage2)

10.部署代理(nginx)


一、介绍

1.FastDFS是一个开源的轻量级分布式文件系统,他对文件进行管理

2.功能:文件存储、文件同步、文件访问等

3.解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务

二、FastDFS原理

1.FastDFS架构

a.Tracker server

- 跟踪服务器,主要做调度工作,起到均衡的作用

- 负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳

b.Storage server

- 存储服务器,主要提供容量和备份服务;以group为单位每个Group内部可以由多台storage server,数据互为备份

- 客户端上传的文件最终存储在storage服务器上,Storage server没有实现自己的文件系统,而是利用操作系统的文件系统来管理文件,可以将stroage称为存储服务器

c.Client

- 客户端,上传下载数据的服务器

- FastDFS向使用者提供基本文件访问接口,以客户端库的方式提供给用户使用

2.文件的上传

a.选择tracker server

- 当集群中不止一个tracker server时,由于tracker之间时完全对等的关系,客户端在uoload文件时可以任意选择一个tracker。当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持选择group的规则:

- Round robin:所有的group间轮询

- Spcifind group:指定某一个确定的group

- Load balance:剩余存储空间多group优先

b.选择storage server

- 当选定group后,tracker会在geoup内选择一个storage内选择一个storage server给客户端,支持选择storage的规则:

- Round robin:在group内的所有storage间轮询

- First server ordered by ip:按ip排序

- First server ordered by priority:按优先级排序

c.选择storage path

- 当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持规则如下:

- Round robin:多个存储目录间轮询

- 剩余存储空间最多的优先

d.生成Fileid(文件标识)

- 选定存储目录后,storage会为文件生一个Fileid,由storage server IP、文件创建时间、文件大小、文件crc32和一个随机数拼接而成,然后将这个二进制串进行base64编码,转换为可打印的字符串

e.生成文件名

- 当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名拼接而成

3.文件的下载

a.定位文件

- 客户端上传文件后存储服务器会将文件ID返回给客户端,将此文件ID用于以后访问该文件的索引信息。

- 文件索引信息包括:组名、虚拟磁盘路径、数据两级目录、文件名

b.定位文件所在的group

- 通过组名tracker能够很快的定位到客户端要访问的存储服务器组,并将选择合适的存储服务器提供客户端访问

c.定位文件位置

- 存储服务器根据“文件存储虚拟磁盘路径”和“数据文件两级目录”可以很快定位到文件所在目录,并根据文件名找到客户端需要访问的文件

4.同步时间管理

a.写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storageserver写完文件后,会由后台线程将文件同步至同group内其他的storage server。

b.每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

c.storage 的同步进度会作为元数据的一部分汇报到tracker上,tracke 在选择读storage的时候会以同步进度作为参考。比如一个group内有A、B、C三个storage server,A向C同步到进度为T1(T1以前写的文件都已经同步到B上了),B向C同步到时间戳为T2(T2>T1),tracker接收到这些同步进度信息时,就会进行整理,将最小的那个做为C的同步时间戳,本例中T1即为C的同步时间戳为T1(即所有T1以前写的数据都已经同步到C上了);同理,根据上述规则,tracker会为A、B生成一个同步时间戳。

5.集成Nginx

a.fastdfs-nginx-module可以重定向文件连接到文件上传时的源服务器取文件,避免客户端由于延迟导致的文件无法访问错误

b.使用nginx反向代理后,后端可以以HTTP请求的方式来访问文件资源。访问nginx反向代理+上传文件时的ID

三、FastDFS部署

1.资源清单

操作系统

主机名

IP

备注

OpenEuler 24.03

tracker01

192.168.16.142

跟踪服务器1

OpenEuler 24.03

tracker02

192.168.16.143

跟踪服务器2

OpenEuler 24.03

storage1

192.168.16.144

存储服务器1

OpenEuler 24.03

storage2

192.168.16.145

存储服务器2

OpenEuler 24.03

nginx

192.168.16.146

代理服务器

2.修改主机名

hostnamectl set-hostname tracker01
hostnamectl set-hostname tracker02
hostnamectl set-hostname storage1
hostnamectl set-hostname storage2
hostnamectl set-hostname nginx

3.安装libfastcommon(tracker01、tracker02、storage1、storage2)

dnf install -y zlib-devel gcc* libtool pcre-devel libevent tar
tar zxf libfastcommon-1.0.36.tar.gz 
cd libfastcommon-1.0.36
./make.sh     #编译
./make.sh install    #安装
cd /usr/lib64/
ll libfast*    #查看所有以libfast开头的内容
cp libfastcommon.so /usr/lib    #覆盖原有模块文件

4.安装编译FastDFS(tracker01、tracker02、storage1、storage2)

tar zxf fastdfs-5.11.tar.gz 
cd fastdfs-5.11
./make.sh 
./make.sh install 

5.配置tracker服务器(tracker01、tracker02)

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
vi /etc/fdfs/tracker.confdisabled=false                 # (4行)启用配置文件
port=22122                     # (11行)tracker服务器端口(默认22122)
base_path=/fastdfs/tracker   # (22行)存储日志和数据的根目录
store_group=group1                #(53行)设置存储组名称mkdir -p /fastdfs/tracker
/etc/init.d/fdfs_trackerd start

6.配置Storage服务(storage1、storage2)

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
vi /etc/fdfs/storage.confdisabled=false    #4行
port=23000    #24行
base_path=/fastdfs/storage    #41行
store_path0=/fastdfs/storage    #109行
tracker_server=192.168.16.142:22122    #118行,Tracker1节点的IP
tracker_server=192.168.16.143:22122    #119行,Tracker2节点的IP
roup_name=group1    #11行
http.server_port=8888    #285行mkdir -p /fastdfs/storage
/etc/init.d/fdfs_storaged start
ps -ef | grep fdfs_storaged

7.配置client(tracker01)

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
mkdir -p /fastdfs/tracker
vi /etc/fdfs/client.confbase_path=/fastdfs/tracker    #10行
tracker_server=192.168.16.142:22122    #14行
tracker_server=192.168.16.143:22122    #15行

8.测试上传文件(tracker01)

fdfs_upload_file /etc/fdfs/client.conf libfastcommon-1.0.36.tar.gz
group1/M00/00/00/wKgQkGgmoPyAFz-aAAaiufaB4zI.tar.gz

9.在所有storage节点安装fastdfs-nginx-module和nginx(storage1、storage2)

a.安装fastdfs-nginx-module


tar zxvf fastdfs-nginx-module_v1.16.tar.gz 
cd fastdfs-nginx-module/srcvi config ngx_addon_name=ngx_http_fastdfs_module
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"

b.安装Nginx

dnf -y install pcre-devel zlib-devel gcc*
tar zxvf nginx-1.19.5.tar.gz 
useradd nginx
cd nginx-1.19.5
cp /usr/include/fastcommon/* /usr/include/fastdfs/
./configure \
--prefix=/usr/local/nginx \
--add-module=/root/fastdfs-nginx-module/src/ --with-cc-opt="-Wno-error=format-truncation"
make && make install
ln -s /usr/local/nginx/sbin/* /usr/local/sbin

c.配置FastDFS

#复制文件到/etc/fdfs目录
cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
#修改配置文件
vi /etc/fdfs/mod_fastdfs.conf connect_timeout=10    #3行
base_path=/tmp    #10行,用户存储日志的
tracker_server=192.168.16.142:22122    #40行
tracker_server=192.168.16.143:22122
url_have_group_name = true    #54行
group_name=group1    #48行
storage_server_port=23000    #45行
store_path_count=1    #58行
store_path0=/fastdfs/storage    #63行#复制FastDFS的部分配置文件到/etc/fdfs目录
cp /root/fastdfs-5.11/conf/http.conf /etc/fdfs
cp /root/fastdfs-5.11/conf/mime.types /etc/fdfs
#创建软链接
ln -s /fastdfs/storage/data /fastdfs/storage/M00

d.配置Nginx

vi /usr/local/nginx/conf/nginx.conf#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html;index  index.html index.htm;}location /group1/M00 {ngx_fastdfs_module;
}
}
}#启动服务
nginx -t
/usr/local/nginx/sbin/nginx#访问http://192.168.16.144/group1/M00/00/00/wKgQkGgmoPyAFz-aAAaiufaB4zI.tar.gz

10.部署代理(nginx)

#编译安装
dnf -y install pcre-devel zlib-devel gcc* tar
tar zxvf nginx-1.19.5.tar.gz 
cd nginx-1.19.5
useradd nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin#修改配置文件
vi /usr/local/nginx/conf/nginx.conf#user  nobody;
worker_processes  1;#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;#pid        logs/nginx.pid;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream storage_server_group1{server 192.168.16.144:80 weight=10;        #storage1节点的Ipserver 192.168.16.145:80 weight=10;        #storage2节点的Ip}server {listen       80;server_name  localhost;location / {proxy_pass   http://storage_server_group1;}
}
}#启动服务
nginx -t
/usr/local/nginx/sbin/nginx#访问http://192.168.16.146/group1/M00/00/00/wKgQkGgmoPyAFz-aAAaiufaB4zI.tar.gz

相关文章:

  • vite常见面试问题
  • 多模态大语言模型arxiv论文略读(九十三)
  • Zephyr OS: periodic_adv_rsp代码架构和实现
  • Linux基本指令篇 —— clear指令
  • 2.1 一文掌握 TypeScript 操作符
  • 寒武纪显卡MLU编译安装mmcv1.7.0、mmdetection2.26.0并测试
  • 如何在 ONLYOFFICE 演示文稿中调整段落首行缩进
  • 如何通过AI辅助数据分析
  • 凯恩斯宏观经济学与马歇尔微观经济学的数学建模和形式化表征
  • Flutter Container组件、Text组件详解
  • 程序编码规范,软件设计规范
  • 从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南
  • 《软件工程》第 6 章 - 软件设计概论
  • 密度矩阵重整化群——DMRG
  • 5G技术赋能楼宇自控系统,数据传输与指令响应效率双提升
  • Milvus可视化客户端Attu安装与使用指南
  • Linux文本搜索——grep命令详解
  • 深度学习在建筑物提取中的应用综述
  • 2025年5月26日工作总结
  • 从“黑箱”到透明化:MES如何重构生产执行全流程?
  • 网站开发主要有两个阶段/今天重大国际新闻
  • 发布设计任务的网站/搜索引擎排名谷歌
  • python做网站效率/b2b免费网站推广平台
  • 网站建设工程师职责/徐州网络推广服务
  • 做外贸怎样上外国网站/新闻类软文营销案例
  • 安徽易企建站/西安seo优化培训机构