https://hub.docker.com/r/jerry6290/fastcfs
https://github.com/jerry6290/dockerImage-fastCFS-Server
https://gitee.com/fastdfs100/FastCFS
https://github.com/happyfish100/FastCFS
# FastCFS 部署 - 基于块存储的高性能通用分布式文件系统
https://abc.htmltoo.com/thread-46237.htm
# 单机版
docker run -d --net=host --name fastcfs --privileged --restart=always -v /data/file/fastcfs:/opt/fastcfs/fuse/ -v /data/docker/tools/fastcfs/one:/etc/fastcfs -v /data/file:/data/file jerry6290/fastcfs:v3.1.0
docker exec -it fastcfs sh
yum -y update
# 写文件
echo 'Hello FastCFS' > /opt/fastcfs/fuse/FastCFS.txt
# 查看文件内容
cat /opt/fastcfs/fuse/FastCFS.txt
Hello FastCFS
# fastcfs.sh-- 用于管理 FastCFS 集群的快捷运维工具
find / -name fastcfs.sh
/fastcfs.sh
-它能快速构建 FastCFS 集群,包括安装软件、分发配置文件,以及管理集群服务和查看集群日志。
-它也能对 FastCFS 单节点或整个集群的相关软件进行升级或降级。
-它能重新安装软件或者重新分发配置文件。
它不是一个通用的部署工具, 仅适用于 FastCFS 集群。除了将配置文件分发到集群的各个服务器节点以外,它不对集群配置做任何处理。你必须为它提供可用的集群配置文件
cd / && cp fastcfs.sh /usr/bin/fastcfs.sh && chmod +x /usr/bin/fastcfs.sh
-测试工具是否生效
which fastcfs.sh
# fcfs_conf.sh 是一个快速创建 FastCFS集群配置文件的运维工具。
它通过 bash shell 访问本地配置文件 fcfs_conf.settings。它只需在你的工作站机器上运行,不需要服务器、数据库或者其他额外资源。
如果你需要在指定的服务器IP列表上快速生成集群配置文件,那么它很适合你。
cd /
wget http://fastcfs.net/fastcfs/ops/fcfs_conf.sh
cp fcfs_conf.sh /usr/bin/fcfs_conf.sh && chmod +x /usr/bin/fcfs_conf.sh
which fcfs_conf.sh
---所有配置文件
/etc/fastcfs
/opt/fastcfs/fuse/
-端口
fs_serverd: 21014 21015 21016
fcfs_authd: 31011 31012
fdir_serverd: 11011 11012
cd /etc/fastcfs
auth fcfs fdir fstore
#FastCFS集群的所有配置文件必须提前放置在工作目录中的 conf 目录,conf 包含以下四个子目录:
fdir -- fdir 服务器的配置文件
-FastCFS目录服务用于文件元数据管理,目前只支持一组服务器,使用常规服务器(如64GB内存 + SSD)可以支持百亿级文件。
fstore -- fstore 服务器的配置文件
-fstore 采用分组方式保存文件内容。
auth -- fauth 服务器的配置文件
-认证服务的用户和权限等数据保存在fdir中,服务采用热备模式,建议部署2 ~ 3个服务器(节点),主节点失效后会自动切换到备用节点。 因认证服务器自身不保存数据,因此可以根据实际需要随时增加或减少认证服务器。
fcfs -- fuseclient 客户端的配置文件
---集群扩容
1.按4MB分块的文件内容(文件块),根据其hash code(文件ID + 文件块偏移量),路由到对应的数据分组。计算公式如下:
DGI = HashCode % DGC
DGI:数据分组索引号
HashCode:文件分块哈希值
DGC:数据分组总数
数据分组是逻辑或虚拟概念,映射到的物理或实体概念是服务器分组(SG),二者是多对一关系,即:一个服务器分组(SG)可以容纳多个数据分组(DG)。
fstore集群的服务器分组总数,英文缩写为SGC。
2.fstore集群扩容,可以一次增加一个SG。当集群规模较小(比如SGC小于等于4)时,建议一次扩容一倍(SGC翻番)。
DGC一旦确定就不可更改,除非建立新集群。因此在初始化集群时,需要确定好数据分组总数(DGC),可以根据业务发展规划,充分预估出DGC。
比如根据存储量预估5年后需要的服务器分组数(SGC)为20,为了充分发挥多核性能,每台服务器上跑32个数据分组(DG),DGC为20 * 32 = 640,按2次幂向上对齐,最终配置为1024。
友情提示:建议生产环境DGC至少配置为256。
3.fstore在线扩容分为两个步骤修改cluster.conf:
-增加扩容的SG 和迁移过去的DG映射;
-新增的SG自动同步完成后,将原有SG迁移出去的DG映射删除。
->停止fuseclient->重启fstore集群->启动fuseclient
4.fstore的cluster.conf中,配置示例片段(简洁起见,只配置了一个3副本的SG):
# SGC
server_group_count = 1
# DGC
data_group_count = 256
# 配置SG1
[server-group-1]
server_ids = [1-3]
data_group_ids = [1, 256]
5.上述配置示例的1个SG扩容为2个SG(均采用3副本),我们如何调整cluster.conf:
# SGC,由1扩容为2
server_group_count = 2
# DGC
data_group_count = 256
# 修改DG映射,将 [129, 256]迁移至SG2
[server-group-1]
server_ids = [1-3]
data_group_ids = [1, 128]
# 配置SG2
# 必须加上server [1-3]用于同步已有数据
[server-group-2]
server_ids = [1-6]
data_group_ids = [129, 256]
将cluster.conf分发到fstore集群所有服务器以及所有fuseclient后,重启fstore集群和fuseclient。
等待新增的SG同步完成,然后进入步骤2。
数据同步过程中fstore集群正常提供服务;
6.调整cluster.conf:
# SGC
server_group_count = 2
# DGC
data_group_count = 256
[server-group-1]
server_ids = [1-3]
data_group_ids = [1, 128]
# 去掉server [1-3]
[server-group-2]
server_ids = [4-6]
data_group_ids = [129, 256]
将cluster.conf分发到fstore集群所有服务器以及所有fuseclient后,重启fstore集群和fuseclient
7.清除已迁走的数据
数据迁移完成后,为了清除迁移出去的数据占用空间,V3.2支持清除迁移出去的replica和slice binlog,启动 fs_serverd时带上参数 --migrate-clean 即可,示例如下:
/usr/bin/fs_serverd /etc/fastcfs/fstore/server.conf restart --migrate-clean
-为了防止误操作,正常情况下启动fs_serverd不要使用--migrate-clean
# 集群状态
-查看ACTIVE列表,确保所有服务器状态为ACTIVE,确认一下最后一行输出的总数
fs_cluster_stat -A
-查看非ACTIVE列表,确保输出为空
fs_cluster_stat -N
-抽查某个数据分组(如ID为256)的ACTIVE状态,确保全部为ACTIVE
fs_cluster_stat -g 256
-查看帮助
fs_cluster_stat -h
#FastCFS 是一款强一致性、高性能、高可用、支持百亿级海量文件的通用分布式文件系统,可以作为MySQL、PostgresSQL、Oracle等数据库,k8s,KVM和NAS等系统的后端存储。
#FastCFS 主要特点:
保证数据强一致前提下实现了高性能:性能完胜Ceph;
完全兼容POSIX文件接口,支持百亿级海量文件;
高可用:不存在单点,自动failover;
简洁高效的架构和实现,支持k8s,内置运维工具,易用性较好。