FastCFS高性能分布式文件系统集群搭建

FastCFS – 可以跑数据库的高性能通用分布式文件系统

FastCFS模型示例

简介

FastCFS 是一款强一致性、高性能、高可用、支持百亿级海量文件的通用分布式文件系统,可以作为MySQL、PostgreSQL、Oracle等数据库,k8s、KVM、FTP、SMB和NFS等系统的后端存储。

FastCFS 主要特点

保证数据强一致前提下实现了高性能:性能完胜Ceph;
完全兼容POSIX文件接口,支持文件锁,64G内存即可支持百亿级海量文件;
高可用:不存在单点,自动failover;
简洁高效的架构和原生实现,不依赖第三方组件,内置运维工具,易用性较好;
随机写性能强悍:FCFS基于trunk顺序分配空间,将客户端的随机写转换为顺序写。

FastCFS 典型应用场景

数据库:支持常规的独享数据和高阶的共享数据两种存储方式,支持数据库云化;
文件存储:如文档、图片、视频等等,FastCFS比对象存储更容易与通用软件集成;
超融合存储:数据库和文件存储共用一个存储集群,显著提升存储资源利用率;
高性能计算:高可靠和高性能的FastCFS,支持RDMA,天然适合高性能计算场景;
视频监控:FastCFS采用顺序写盘方式,使用SATA硬盘也可保证多路视频流畅写入。

集群系统环境

操作系统: ubuntu24.04
关闭防火墙: systemctl stop ufw
服务器架构: arm64

集群服务器信息

组件:				服务器ip: 									个数:
FastDir 			10.211.55.3、10.211.55.4、10.211.55.5 		3
FastStore 			10.211.55.3、10.211.55.4、10.211.55.5 		3
FastAuth 			10.211.55.3、10.211.55.4、10.211.55.5 		3
Fast-fuse客户端		10.211.55.6、10.211.55.5					1

服务器别名

10.211.55.3 <--> ubuntu
10.211.55.4 <--> ubuntu1
10.211.55.5 <--> ubuntu2
10.211.55.6 <--> ubuntu3

集群端口准备

fdir
默认集群端口 11011
默认服务端口 11012

fvote
默认集群端口 41011
默认服务端口 41012

fauth
默认集群端口 31011
默认服务端口 31012

fstore
默认集群端口 21014
默认副本端口 21015
默认服务端口 21016

安装系统依赖

apt-get update
apt-get install libaio-dev -y
apt-get install libaio1t64 -y
apt-get install openssh-server

安装异步io系统库(本集群为arm64架构需要手动安装)

curl -O http://ftp.de.debian.org/debian/pool/main/liba/libaio/libaio1_0.3.113-4_arm64.deb

dpkg -i libaio1_0.3.113-4_arm64.deb

以下操作均在root用户下操作

集群服务器生成ssh密钥:

ssh-keygen -t rsa -b 2048

配置免密登录:

集群服务器ssh配置允许root用户ssh登录 --> ubuntu(10.211.55.3)配置举例:

vim /etc/ssh/sshd_config

PermitRootLogin yes
服务器配置hosts --> ubuntu(10.211.55.3)配置举例:

vim /etc/hosts

10.211.55.4 ubuntu1
10.211.55.5 ubuntu2
10.211.55.6 ubuntu3
拷贝密钥到集群各服务器 --> ubuntu(10.211.55.3)配置举例:
ssh-copy-id ubuntu1
ssh-copy-id ubuntu2
ssh-copy-id ubuntu3

安装服务:

集群脚本安装:
git clone https://gitee.com/fastdfs100/FastCFS.git; cd FastCFS/
./fastcfs.sh install
手动(单独)安装:
  • 配置系统gpg
apt-get install curl gpg

curl http://www.fastken.com/aptrepo/packages.fastos.pub | gpg --dearmor > fastos-archive-keyring.gpg
install -D -o root -g root -m 644 fastos-archive-keyring.gpg /usr/share/keyrings/fastos-archive-keyring.gpg
sh -c 'echo "deb [signed-by=/usr/share/keyrings/fastos-archive-keyring.gpg] http://www.fastken.com/aptrepo/fastos/ fastos main" > /etc/apt/sources.list.d/fastos.list'

rm -f fastos-archive-keyring.gpg

apt update
  • 安装服务端组件
- ubuntu、ubuntu1、ubuntu2服务器安装
apt install fastdir-server -y
apt install faststore-server -y
apt install fastcfs-auth-server -y

- ubuntu2、ubuntu3服务器安装
apt install fastcfs-fused -y

集群配置

fdir配置cluster.conf, root登录主控机 10.211.55.3

vim /etc/fastcfs/fdir/cluster.conf

# config the auth config filename
auth_config_filename = ../auth/auth.conf

[group-cluster]
# the default cluster port
port = 11011

[group-service]
# the default service port
port = 11012

[server-1]
host = 10.211.55.3 #节点1

[server-2]
host = 10.211.55.4 节点2

[server-3]
host = 10.211.55.5 #节点3
fdir配置server.conf, root登录主控机 10.211.55.3

vim /etc/fastcfs/fdir/server.conf

server.conf基本上用默认配置即可,如果需要开启存储插件,需要把[storage-engine]下面的enable=true,同时配置storage.conf。
拷贝fdir的cluster.conf到其他节点:
scp /etc/fastcfs/fdir/cluster.conf ubuntu1:/etc/fastcfs/fdir/cluster.conf
scp /etc/fastcfs/fdir/cluster.conf ubuntu2:/etc/fastcfs/fdir/cluster.conf
scp /etc/fastcfs/fdir/cluster.conf ubuntu3:/etc/fastcfs/fdir/cluster.conf
fstore配置cluster.conf, root登录主控机 10.211.55.3

vim /etc/fastcfs/fstore/cluster.conf

# the group count of the servers / instances
server_group_count = 1 # SGC=1

# all data groups must be mapped to the server group(s) without omission.
# once the number of data groups is set, it can NOT be changed, otherwise
# the data access will be confused!
data_group_count = 128 #DGC

# config the auth config filename
auth_config_filename = ../auth/auth.conf

[group-cluster]
# the default cluster port
port = 21014

[group-replica]
# the default replica port
port = 21015

[group-service]
# the default service port
port = 21016

[server-group-1]
server_ids = [1, 3]
data_group_ids = [1, 64]
data_group_ids = [65, 128]

[server-1]
host = 10.211.55.3

[server-2]
host = 10.211.55.4

[server-3]
host = 10.211.55.5

faststore配置server.conf

vim /etc/fastcfs/fstore/server.conf

server.conf基本上用默认配置即可,如果需要修改存储目录,需要修改storage.conf,如果有多个数据盘可以配置多个目录,充分利用硬盘空间
拷贝fstore的cluster.conf到其他节点:
scp /etc/fastcfs/fstore/cluster.conf ubuntu1:/etc/fastcfs/fstore/cluster.conf
scp /etc/fastcfs/fstore/cluster.conf ubuntu2:/etc/fastcfs/fstore/cluster.conf
scp /etc/fastcfs/fstore/cluster.conf ubuntu3:/etc/fastcfs/fstore/cluster.conf
fauth配置cluster.conf, root登录主控机 10.211.55.3

vim /etc/fastcfs/auth/cluster.conf

[group-cluster]
# the default cluster port
port = 31011

[group-service]
# the default service port
port = 31012

[server-1]
host = 10.211.55.3

[server-2]
host = 10.211.55.4

[server-3]
host = 10.211.55.5
fauth配置server.conf:

vim /etc/fastcfs/auth/server.conf

server.conf用默认配置即可
fauth配置auth.conf
默认不开启认证、本例不开启认证
拷贝cluster.conf到其他节点:
scp /etc/fastcfs/auth/cluster.conf ubuntu1:/etc/fastcfs/auth/cluster.conf
scp /etc/fastcfs/auth/cluster.conf ubuntu2:/etc/fastcfs/auth/cluster.conf
scp /etc/fastcfs/auth/cluster.conf ubuntu3:/etc/fastcfs/auth/cluster.conf

集群启动

启动顺序如下

1. fvote(可选)
2. fdir
3. fauth(可选)
4. fstore
5. fuseclient

root分别登录到ubuntu、ubuntu1、ubuntu2三个节点启动服务

systemctl restart fastdir
systemctl restart fastauth
systemctl restart faststore

服务端异常问题排查

如果启动有问题,请检查配置文件,具体启动日志可以查看/opt/fastcfs/下对应的auth、fdir、fstore三个目录里面的logs目录。

客户端启动

root登录到ubuntu2、ubuntu3客户端节点启动服务

systemctl restart fastcfs

客户端异常问题排查

1. 查看日志文件/opt/fastcfs/fcfs/logs/fcfs_fused.log看下启动是否有误
2. 如果无误可以通过df -h查看挂载的目录 /opt/fastcfs/fuse

常见问题

FastCFS支持单盘数据恢复吗?

支持。
- 实现机制:从本组的其他服务器上获取数据,恢复指定硬盘(即存储路径)上的所有数据。
- 使用场景:硬盘坏掉后更换为新盘,或者因某种原因重新格式化硬盘。
- 单盘故障恢复后,重启fs_serverd时,加上命令行参数 --data-rebuild <store_path>,其中 store_path为要恢复数据硬盘对应的存储路径。

FastCFS是如何防脑裂的?

- leader/master选举时采用过半数机制,一个分组的节点数最好为奇数(比如3个)。
- 配置项为 quorum,默认值为auto,表示节点数为奇数时开启,为偶数时关闭。
- 详情参见源码目录下的conf/full/cluster.conf

fdir和fstore多副本(如3副本)情况下,停机后重启不能写入数据

- 为了保证数据一致性,当停机时间超过配置参数max_shutdown_duration(默认配置300秒),
需要等待本组的其他服务器在线才可以选出master/leader。
- 以3副本为例,如果3台服务器停机均超过max_shutdown_duration,而有的服务器没有启动,
那么master/leader选举不出来,导致不能写入数据。
- 此时启动fdir_serverd需要加上命令行参数--force-master-election,启动fs_serverd需要加上命令行参数--force-leader-election

如何验证多个副本的数据一致性?

- faststore需要源码编译,修改make.sh,将
CFLAGS='-Wall'
修改为:
CFLAGS='-Wall -DFS_DUMP_SLICE_FOR_DEBUG=32'
- 启动fs_serverd,数据将导出到 $base_path/data/dump/slice.index
- 例如:/opt/fastcfs/fstore/data/dump/slice.index

- 文件格式:
类型 文件ID block偏移量 slice偏移量 slice长度 数据长度 数据CRC32

可以通过 diff 命令比较同一组服务器下的两个节点导出的slice.index是否相同。

- 注意:-DFS_DUMP_SLICE_FOR_DEBUG=32 这个编译选项仅供测试环境进行数据一致性验证,请不要在生产环境使用。

fuse客户端通过df看到的空间明显大于存储池配额

这是因为客户端没有启用auth,需要将配置文件/etc/fastcfs/auth/auth.conf中的auth_enabled设置为true,修改后重启fcfs_fused生效。

友情提示:如何配置auth服务请参阅 认证配置文档
- https://gitee.com/fastdfs100/FastCFS/blob/master/docs/AUTH-zh_CN.md

FastCFS作为NFS后端存储时NFS client mount失败

出错信息:reason given by server: No such file or directory

解决方案:
NFS v3直接使用服务端配置的目录如:/opt/fastcfs/fuse,而v4将服务端配置的路径作为基路径,mount要使用/

友情提示:
CentOS 6需要使用NFS v3挂载
/etc/exports中需要设置fsid=0,例如:/opt/fastcfs/fuse 172.16.168.130(fsid=0,rw,sync,no_root_squash,no_all_squash)

NFS挂载默认会使用最新的NFS协议,挂载命令示例(支持v4前提下使用):
mount -t nfs -onolock 172.16.168.131:/ /mnt/nfs
NFS v3挂载命令示例:
mount -t nfs -onolock 172.16.168.131:/opt/fastcfs/fuse /mnt/nfs
指定NFS v4挂载命令示例:
mount -t nfs -onolock,nfsvers=4 172.16.168.131:/ /mnt/nfs

为何删除了足够多的数据,df看到磁盘占用空间不见降低呢?

FastCFS基于trunk file进行空间分配,目前trunk file只会增加而不会释放。文件数据删除后空间会回收利用,通过fuse client上df命令可以看到FastCFS的可用空间将增加。

如何将fastore的数据清除干净?

一些特殊情况下,需要清除掉faststore的数据,此时要删除faststore的系统目录(server.conf中配置的base_path,默认为/opt/fastcfs/fstore)和用户数据存放目录(默认为/opt/faststore/data,配置多盘的情况要逐一删除数据目录),删除命令示例(文件删除后不可恢复,请再三确认后执行):
rm -rf /opt/fastcfs/fstore /opt/faststore/data

日志中报没有访问权限,如何进行排查?

/opt/fastcfs/fcfs/logs/fcfs_fused.log 中的错误示例:

[2023-02-25 06:39:08] ERROR - file: client_proto.c, line: 607, fdir server 192.168.3.210:11012 response message: response status 1, error info: Operation not permitted

问题排查:
依次查看各台fdir server上的日志文件 /opt/fastcfs/fdir/logs/fdir_serverd.log,找到对应的出错信息,然后使用最新版本的fdir_stat 查看对应的完整路径(文件名),根据文件或目录owner、权限、访问用户及其用户组进行排查。

友情提示:
如果采用的是装包方式,程序fdir_stat 所在的rpm包名为fastDIR-client,deb包名为fastdir-client
按文件或目录inode查询示例:
fdir_stat -Fn fs 9007199660325177
按父目录inode + 子目录名或者文件名查询示例:
fdir_stat -Fn fs 9007199667318991 test

FastCFS分布式存储系统官方地址

https://gitee.com/fastdfs100/FastCFS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/897048.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

L0G1000 Linux 基础知识

1.创建虚拟机 构建完成后 按需启动&#xff0c;本次启动30分钟&#xff0c;启动完成后出现下图界面。 点击进入开发机&#xff0c;出现初始界面。 2. 配置SSH密钥进行SSH远程连接 2.1打开Windows PowerShell,利用 ssh-keygen -t rsa 输入命令后一路回车就可以了&#xff0c;…

WXML-模板语法-条件渲染及列表渲染

条件渲染&#xff1a; wx&#xff1a;if: 结合block使用wx:if&#xff1a; hidden&#xff1a; wx:if和hidden对比&#xff1a; 列表渲染&#xff1a; wx&#xff1a;for&#xff1a; 1、在.js文件中创建一个数组&#xff1a; 2、创建一个view使用wx&#xff1a;for组件&…

【机器学习】并行计算(parallel computation)Part2

Asynchronous Parallel Gradient Descent Using Parameter Server 用Parameter Server实现异步并行梯度下降 Parameter Server这种编程模型可以实现异步并行梯度下降&#xff0c;架构采用的是Client-Server&#xff0c;通信方式是Message-passing&#xff0c;同步方式是异步的…

windows scp 免密码文件传输

windows scp 免密码文件传输 scp 是基于ssh加密服务的一种文件传输方式&#xff0c;是常见的linux主机间文件传输方式&#xff0c;在windows中也是支持的。 配置目标&#xff1a; 两台windows主机间通过scp命令行传输文件梳理概念 客户端&#xff1a; 通过命令行实现文件传输…

Mycat2安装配置

安装配置 安装 目前Mycat2下载地址已经不可访问&#xff0c;安装包可从参考资料[1]获取 下载后解压zip文件&#xff0c;将jar放在lib目录下 编辑配置文件 编辑conf文件夹下的prototypeDs.datasource.json 更改数据库相关信息 启动 windows环境下启动Mycat 以管理员身份运行…

[论文阅读]Deep Depth Completion of a Single RGB-D Image

摘要 我们的工作目标是完成RGB-D图像的深度通道。商用级深度摄像头通常无法捕捉光滑、明亮、透明和远处表面的深度信息。为了解决这个问题&#xff0c;我们训练了一个深度网络&#xff0c;该网络以RGB图像作为输入&#xff0c;并预测稠密的表面法线和遮挡边界。然后&#xff0…

只需15秒!这也太短了吧,单反自动拍VR就看这篇

在如今这个追求高效的时代&#xff0c;拍摄VR全景不再是复杂的技术挑战&#xff0c;而是轻松可实现的日常操作。720云相机电动云台的问世彻底颠覆了传统VR拍摄的方式&#xff0c;只需15秒&#xff0c;一键拍摄&#xff0c;极简流程即可呈现出令人惊叹的VR全景效果。 集成多功能…

机器视觉系统硬件组成之工业相机篇

工业相机是一种非常重要的机器视觉器件&#xff0c;它能够将被采集的图像信息通过电路转换成电信号&#xff0c;再通过模数转换器&#xff08;ADC&#xff09;将其转化为数字信号&#xff0c;最后以标准的视频信号输出。工业相机在机器视觉领域得到了广泛应用&#xff0c;包括质…

新时代AI桌宠:XGO Rider让你的办公室瞬间高大上

​ XGO Rider Luwu 智能打造了桌面双轮足式机器人 XGO Rider&#xff0c;这款全球首创的轮腿式桌面AI机器人&#xff0c;正在悄然改变我们的办公环境。它不仅是一个高科技玩具&#xff0c;更是一个能大幅提升工作效率和办公室科技感的智能助手。 XGO Rider 新时代“桌宠” micr…

基于zbar的二维码识别和机器人视觉巡线,附源码,使用ROS 2与OpenCV 结合的方式,让机器人识别二维码并执行设定动作

目录 前言 二维码扫描库——Zbar Zbar库的功能主要包含以下四个部分&#xff1a; 代码实现 运行结果 拉到文末有惊喜 前言 微信登录要扫二维码&#xff0c;手机支付要扫二维码&#xff0c;共享单车也要扫二维码。除了这些在日常生活中已经非常普及的扫码场景之外&#xf…

开源OpenStack

1.查询HCS基于OpenStack哪个版本开发 2.九大核心组件 OpenStack可以对接FC也可以对接KVM主机&#xff1b;&#xff08;OpenStack 对接华为FusionCompute&#xff0c;一个集群对应 openstack 一台计算主机&#xff09;-引申出nova compute 2.1nova nova两个核心组件nova contro…

图的最小生成树算法--普里姆(Prim)算法和克鲁斯克尔(Kruskal)算法

一、图的最小生成树 最小生成树&#xff08;Minimum spanning tree&#xff0c;MST&#xff09;是最小权重生成树&#xff08;Minimum weight spanning tree&#xff09;的简称&#xff0c;是一个连通加权无向图中一棵权值最小的生成树。 在一给定的无向图 G ( V , E ) G …

win11环境下成功安装mamba

文章目录 1. Mamba环境搭建2. triton安装3. causal_conv1d安装3.1 下载causal_conv1d工程文件源码3.2 修改setup.py文件3.3 安装 causal_conv1d 4. Mamba安装4.1 下载mamba工程文件源码4.2 修改setup.py文件4.3 安装 mamba 5. 查看所有成功安装的库6. 测试mamba安装是否成功6.1…

软件质量管理体系,软件评审资料,资质认证资料,安全建设,数据安全及项目管理全套资料(原件参考)

软件项目质量管理体系是指一套系统化的管理方法、流程、工具和文档&#xff0c;旨在确保软件项目从需求分析、设计、开发、测试到部署和维护的整个生命周期中&#xff0c;都能达到预定的质量标准和客户期望。该体系通过明确的角色和责任、标准化的工作流程、有效的质量控制和持…

MySQL(python开发)——(3)表数据的基本操作,增删改查

MySQL&#xff08;python开发)——&#xff08;1&#xff09;数据库概述及其MySQL介绍 MySQL&#xff08;python开发)——&#xff08;2&#xff09;数据库基本操作及数据类型 MySQL—— 表数据基本操作 一、表中插入(insert)数据——增 insert into 表名 values (值1&#…

springboot2.0x 和springboot 1.0 整合redis 使用自定义CacheManager 问题

问题描述&#xff1a; 在我们深入理解springboot2.0x的缓存机制的时候&#xff0c;发现在springboot1.0 和springboot2.0 中默认的序列化都是使用的jdk的 Serializer 实现这个接口&#xff0c;jdk自带的序列化方法&#xff0c;由此我们需要自己去创建自定义的RedisCacheManager…

解决springboot redisTemplate lua execute hash脚本 field有转义符的问题

问题&#xff1a;使用execute&#xff0c;是 result redisTemplate.execute(redisScript,Collections.singletonList(hashKey), // KEYSargs.toArray()); // ARGV会存在field有转义符 发现这个方法是直接调用下图的方法 使用的序列化的方式是 template.getValueSerializer(…

详解23种设计模式——第一部分:概述+创建型模式

目录 1. 概述 2. 创建型模式 2.1 简单&#xff08;静态&#xff09;工厂模式 2.1.1 介绍 2.1.2 实现 2.2 工厂模式 2.3 抽象工厂模式 2.4 单例模式 2.4.1 饿汉模式 2.4.2 懒汉模式 2.4.3 线程安全的懒汉式 2.4.4 DCL单例 - 高性能的懒汉式 2.5 建造者模式 2.6 原…

【进阶OpenCV】 (19)-- Dlib库 --人脸表情识别

文章目录 表情识别一、原理二、代码实现1. 摄像头前预处理2. 计算嘴唇变化3. 绘制嘴唇轮廓4. 显示结果5. 完整代码展示 总结 表情识别 目标&#xff1a;识别人物的喜悦状态。 一、原理 我们在对一张人脸图片进行关键点定位后&#xff0c;得到每个关键点的位置&#xff1a; 比…

go压缩的使用

基础&#xff1a;使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…