Curve 分布式存储设计## Curve 分布式存储设计 程义 — Curve Maintainer   ## 第一 Curve的由来 ## Agenda  ## 第二 Curve的设计目标  第四 Curve社区 ## Curve的由来 1. 代码复杂/代码量大 2. 运维难度高 3. 无法满足高的性能需求 ## Curve的设计目标 1. Curve云原生软件定义存储0 码力 | 20 页 | 4.13 MB | 1 年前3
Curve文件系统空间分配方案Curve文件系统空间分配方案(基于块的方案,已实现) - 背景 - 本地文件系统空间分配相关特性 - 局部性 - 延迟分配/Allocate-on-flush - Inline file/data - 空间分配 - 整体设计 - 空间分配流程 - 特殊情况 - 空间回收 - 小文件处理 - 并发问题 - 文件系统扩容 - 接口设计 根据CurveFS方案设计(总体设计,只实现了部分),文件系统基于当前的块进行实现,所以需要设计基于块的空间分配器,用于分配并存储文件数据。 ## 本地文件系统空间分配相关特性 局部性 尽量分配连续的磁盘空间,存储文件的数据。这一特性主要是针对HDD进行的优化,降低磁盘寻道时间。 延迟分配/Allocate-on-flush 在sync/flush之前,尽可能多的积累更多的文件数据块才进行空间分配,一方面可以提高局部性,另一方面可以降低磁盘碎片。 几百字节的小文件不单独分配磁盘空间,直接把数据存放到文件的元数据中。 针对上述的本地文件系统特性,Curve文件系统分配需要着重考虑局部性。 虽然Curve是一个分布式文件系统,但是单个文件系统的容量可能会比较大,如果在空间分配时,不考虑局部性,inode中记录的extent数量很多,导致文件系统元数据量很大。 假如文件系统大小为1PiB,空间分配粒度为1MiB,inode中存储的extent0 码力 | 11 页 | 159.17 KB | 1 年前3
Curve文件系统元数据管理Curve文件系统元数据管理(已实现) Inode 1、设计一个分布式文件系统需要考虑的点: • 2、其他文件系统的调研总结 • 3、各内存结构体 • 4、curve文件系统的元数据内存组织 • 4.1 inode定义: • 4.2 dentry的定义: • 4.3 内存组织 5元数据分片 • 5.1 分片方式一:inode和dentry都按照parentid分片 5.1 1.1 场景分析 查找:查找/A/C。 - 创建:/A/C不在,创建/A/C - 删除文件:删除/A/C • 删除目录:删除/A - rename: rename /A/C到/B/E - symbolic link: - hardlink: 生成一个hardlink /B/E,指向文件/A/C - list: 遍历/A目录 5.1.2 好处 5.1.2 问题 • 生成一个hardlink /B/E,指向文件/A/C • 6、curve文件系统的多文件系统的设计 ## 1、 设计一个分布式文件系统需要考虑的点: 1. 文件系统的元数据是否全缓存? 2. 元数据持久化在单独的元数据服务器上?在磁盘上?在volume上? 3. inode+dentry方式?当前curve块存储的kv方式? 4. 是否有单独的元数据管理服务器? ## 2、 其他文件系统的调研总结0 码力 | 24 页 | 204.67 KB | 1 年前3
Raft在Curve存储中的工程实践raft在Curve存储中的工程实践 D I G I T A L S A I L 陈威 Curve Maintaner 网易资深服务端开发工程师 01 Curve介绍 项目背景 | Curve架构 | 使用场景 | Curve社区 raft和braft raft协议介绍 | braft介绍 raft在Curve中的应用 raft in Curve块存储 | raft in curve文件存储 | 配置变更 Curve对raft的优化 优化点1 | 优化点2 05 Q&A 答疑 ## 项目背景 ## Curve是一个高性能、更稳定、易运维的云原生分布式存储系统,支持块存储和文件存储 Curve块存储和文件存储均采用raft协议 ## 2021 ~2022 Curve文件存储 ## 2018 ~2021 Curve块存储 • • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 ## 整体架构 0 码力 | 29 页 | 2.20 MB | 1 年前3
Curve文件系统元数据Proto(接口定义)curve文件系统元数据proto(代码接口定义,已实现) ## 1、 代码结构和代码目录 curve文件系统是相对于curve块设备比较独立的一块,在当前curve项目的目录下,增加一个一级目录curvefs,curvefs下有自己独立的proto\src\test。  ## 2、 文件系统proto定义 #### 2.1 mds.proto mds.proto /* * Copyright (c) 2020 NetEase Inc. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use0 码力 | 15 页 | 80.33 KB | 1 年前3
Curve文件系统元数据持久化方案设计元数据持久化 • 前言 • Raft Log • Raft Snapshot - 持久化文件 - key value pairs - 其他说明 实现 • 1、inode、entry 的编码 • 2、KVStore • Q&A • 单靠 redis 的 AOF 机制能否保证数据不丢失? • redis 的高可用、高可扩方案? • redis + muliraft 根据之前讨论的结果,元数据节点的架构如下图所示,这里涉及到两部分需要持久化/编码的内容: • Raft Log: 记录 operator log • Raft Snapshot:将内存中的数据结构以特定格式 dump 到文件进行持久化 copyset-2 copyset-1 ,用于标识该文件为 curvefs 元数据持久化文件| |version|4|文件版本号(当文件格式变化时,可以 100% 向兼容加载旧版持久化文件)| |size|8|键值对数量| |key\_0 码力 | 12 页 | 384.47 KB | 1 年前3
Curve Cloud Native## Curve integrate to Cloud Native ## Curve intro - Curve is an distributed storage system • High performance • Easiser operation • Cloud native • Curve is composed of two parts • Curve Block Storage storage • Curve File System (CurveFS) • CurveFS: a high performance cloud native file system (Based on CurveBS / S3 compatible Storage) ## Operator capability Level |OPERATOR CAPABILITY LEVEL|CURVE|COMMENT| uninstall/ upgrade and configure CurveBS/CurveFS through helm chart • upgrade automation • Supporting Curve Cluster provisioning in helm chart • metadata backup and recovery • MDS / ChunkServer should respect0 码力 | 9 页 | 2.85 MB | 1 年前3
Curve for CNCF Main## Curve ## Curve High performance Cloud native Distributed storage system https://www.opencurve.io/ ## Agenda • What is Curve • Use Cases • CurveBS • Key Features • Comparing to Ceph • CurveFS Roadmap ## What is Curve - Curve is an distributed storage system • Components - Curve Block Storage (CurveBS) - CurveBS: a high performance cloud native distributed block storage • Curve File System (CurveFS) file system - kubernetes Host / VM ↓ CSI / Storage Class NBD Curve Block API SSD three copies CurveBS HDD / HDD EC Curve Block API APPs  [简单聊聊 Unix 的相关概念] ## System call / 系统调用 - 系统调用 I/O • open() • read() • write() Processes / 进程 • fork() • kill() • wait() Filesystem / 文件系统 • chmod() • mkdir() • getcwd() Communication / 通信 • pipe() • splice() • mmap() ## Kernel / 203d8521/p10_1.jpg) ## File descriptors / 文件描述符 - it's a reference to "something" (usually a file) - it can be mixed with system calls - 是对文件/套接字等资源的引用 ● 可以和系统调用连用 ## Print >>>0 码力 | 78 页 | 654.51 KB | 2 年前3
共 1000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 100













