【QFS】Golang自研的QFS分布式文件系统,QFS文件系统使用

QFS分布式存储系统

  • Website: https://github.com/mumu-architect/QFS
  • Chat: Gitter
  • QFS 是一个开源的高性能分布式文件系统。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:1MB < file_size <500MB)为载体的在线服务。

QFS主要功能

1.高可用,每个小集群都是1主2从,leader挂自动选新的leader
2.安全,文件分别存在3台节点上,数据不会丢失,主从文件同步,数据落盘
3.大量数据或文件存储,使用槽位分片技术把文件存到不同的小集群中,可以存储大量数据
4.上传客户端使用qfsSDK进行文件上传
5.扩容还没开发,缩容计划不会开发
6.系统安全性还待开发,系统扩展性待优化,系统性能待优化
7.集群启动方法,后期会优化
shell 复制代码
	// go run main.go --shardID 128 --id 1 --shardIDS "128,129" --ip 127.0.0.1 --port 9001 --peers "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6061 --rpcPeers "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19001  --raftPeers "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8081 --logPeers "1=127.0.0.1:8081,2=127.0.0.1:8082,3=127.0.0.1:8083" --filePort 7071 --filePeers "1=127.0.0.1:7071,2=127.0.0.1:7072,3=127.0.0.1:7073" --incrementFilePort 5051 --incrementFilePeers "1=127.0.0.1:5051,2=127.0.0.1:5052,3=127.0.0.1:5053"
	// go run main.go --shardID 128 --id 2 --shardIDS "128,129" --ip 127.0.0.1 --port 9002 --peers "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6062 --rpcPeers "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19002  --raftPeers "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8082 --logPeers "1=127.0.0.1:8081,2=127.0.0.1:8082,3=127.0.0.1:8083" --filePort 7072 --filePeers "1=127.0.0.1:7071,2=127.0.0.1:7072,3=127.0.0.1:7073" --incrementFilePort 5052 --incrementFilePeers "1=127.0.0.1:5051,2=127.0.0.1:5052,3=127.0.0.1:5053"
	// go run main.go --shardID 128 --id 3 --shardIDS "128,129" --ip 127.0.0.1 --port 9003 --peers "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6063 --rpcPeers "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19003  --raftPeers "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8083 --logPeers "1=127.0.0.1:8081,2=127.0.0.1:8082,3=127.0.0.1:8083" --filePort 7073 --filePeers "1=127.0.0.1:7071,2=127.0.0.1:7072,3=127.0.0.1:7073" --incrementFilePort 5053 --incrementFilePeers "1=127.0.0.1:5051,2=127.0.0.1:5052,3=127.0.0.1:5053"
	// go run main.go --shardID 129 --id 4 --shardIDS "128,129" --ip 127.0.0.1 --port 9004 --peers "4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6064 --rpcPeers "4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19004  --raftPeers "4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8084 --logPeers "4=127.0.0.1:8084,5=127.0.0.1:8085,6=127.0.0.1:8086" --filePort 7074 --filePeers "4=127.0.0.1:7074,5=127.0.0.1:7075,6=127.0.0.1:7076" --incrementFilePort 5054 --incrementFilePeers "4=127.0.0.1:5054,5=127.0.0.1:5055,6=127.0.0.1:5056"
	// go run main.go --shardID 129 --id 5 --shardIDS "128,129" --ip 127.0.0.1 --port 9005 --peers "4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6065 --rpcPeers "4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19005  --raftPeers "4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8085 --logPeers "4=127.0.0.1:8084,5=127.0.0.1:8085,6=127.0.0.1:8086" --filePort 7075 --filePeers "4=127.0.0.1:7074,5=127.0.0.1:7075,6=127.0.0.1:7076" --incrementFilePort 5055 --incrementFilePeers "4=127.0.0.1:5054,5=127.0.0.1:5055,6=127.0.0.1:5056"
	// go run main.go --shardID 129 --id 6 --shardIDS "128,129" --ip 127.0.0.1 --port 9006 --peers "4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --nodeInfo "1=127.0.0.1:9001,2=127.0.0.1:9002,3=127.0.0.1:9003,4=127.0.0.1:9004,5=127.0.0.1:9005,6=127.0.0.1:9006" --rpcPort 6066 --rpcPeers "4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --rpcNodeInfo "1=127.0.0.1:6061,2=127.0.0.1:6062,3=127.0.0.1:6063,4=127.0.0.1:6064,5=127.0.0.1:6065,6=127.0.0.1:6066" --raftPort 19006  --raftPeers "4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --raftNodeInfo "1=127.0.0.1:19001,2=127.0.0.1:19002,3=127.0.0.1:19003,4=127.0.0.1:19004,5=127.0.0.1:19005,6=127.0.0.1:19006" --logPort 8086 --logPeers "4=127.0.0.1:8084,5=127.0.0.1:8085,6=127.0.0.1:8086" --filePort 7076 --filePeers "4=127.0.0.1:7074,5=127.0.0.1:7075,6=127.0.0.1:7076" --incrementFilePort 5056 --incrementFilePeers "4=127.0.0.1:5054,5=127.0.0.1:5055,6=127.0.0.1:5056"
8.上传案例代码
go 复制代码
package main

import (
	"fmt"
	"os"
	"time"

	"mumu.com/redis-go/qfsSdk"
)

func main() {
	// 1. 初始化SDK
	qfsSdk.InitSDK(&qfsSdk.QFSConfig{
		ClusterEntry: []string{
			"127.0.0.1:9001",
			"127.0.0.1:9002",
			"127.0.0.1:9003",
		},
		Timeout: 15 * time.Second,
	})

	// 2. 读取测试文件
	fileName := "22.pdf"
	filePath := fmt.Sprintf("./%s", fileName)
	file, err := os.Open(filePath)
	if err != nil {
		panic(err)
	}
	defer file.Close()

	// 3. 直接调用SDK上传
	resp, err := qfsSdk.Upload(file, fileName)
	if err != nil {
		panic(err)
	}

	println("上传结果:", string(resp))
}
相关推荐
KaMeidebaby35 分钟前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17681 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
Mininglamp_27182 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native
思麟呀2 小时前
C++17(三)if constexpr+折叠表达式
开发语言·c++
醉城夜风~2 小时前
Java详解经典算法题:接雨水(三种实现方案+原理剖析)
java·开发语言·算法
qydz112 小时前
杰理开发基础知识(3)
开发语言·嵌入式开发·杰理科技
贾斯汀frank2 小时前
C# 15 类型系统改进:Union Types
开发语言·windows·c#
阿里嘎多学长2 小时前
2026-07-10 GitHub 热点项目精选
开发语言·程序员·github·代码托管
CHHH_HHH3 小时前
【C++11】深入解析C++可变参数模板
开发语言·c++·算法·stl·c++11
IT_陈寒3 小时前
SpringBoot自动配置不是你以为的那样的智能
前端·人工智能·后端