【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))
}
相关推荐
uhakadotcom16 小时前
get_event_loop(),和 get_running_loop() + ThreadPoolExecutor 有啥区别
后端·面试·github
小马爱打代码16 小时前
Spring Boot 自动装配流程
java·spring boot·后端
Cosolar16 小时前
72小时生死时速:一文读懂引爆Fable模型禁令的越狱技术风暴
人工智能·后端·程序员
lihao lihao16 小时前
linux线程
java·开发语言·jvm
码云骑士16 小时前
03-Python可变对象与不可变对象(下)-深浅拷贝的底层真相
开发语言·python
砍材农夫16 小时前
python环境|pip|uv|venv|Conda区别
后端·python·conda·pip·uv
sycmancia16 小时前
Qt——自定义模型类
开发语言·qt
MATLAB代码顾问16 小时前
Python数据分析项目实战:销售数据仪表盘
开发语言·python·数据分析
Csvn16 小时前
Linux 网络配置与排查命令实战
后端