-
Curve核心组件之 MDS
Digital Sal
陈威
网易数帆存储团队
## 概述
## Curve 是高性能、高可用、高可靠的分布式存储系统
• 高性能、低延迟
• 可支撑储场景:块存储、对象存储、云原生数据库、EC等
- 当前实现了高性能块存储,对接OpenStack和 K8s 网易内部线上无故障稳定运行一年多
• 已开源
github主页:https://opencurve Downloads
v0.1.3
on 30 Jul - f6425ad zip tar.gz Notes Downloads
01 整体架构
02 MDS各组件详细介绍
03 Q&A
## 基本架构
## • 元数据节点 MDS
管理元数据信息
收集集群状态信息,自动调度
- 数据节点 Chunkserver
数据存储
副本一致性
• 客户端 Client
对元数据增删改查 [Image](/uploads/documents/9/a/6/0/9a607d6baa2cd17132b07c4565d2aeff/p4_3.jpg)
## MDS各个组件
MDS是中心节点,负责元数据管理、集群状态收集与调度。MDS包含以下几个部分:
• Topology: 管理集群的 topo 元数据信息。
• Nameserver: 管理文件的元数据信息。
• Copyset: 副本放置策略。
0 码力 |
23 页 |
1.74 MB
| 1 年前 3
-
将原有的获取chunkid的方法从space迁入mds中,并持久化写入etcd中;
2. 只考虑单mds工作的情况;
3. chunkid全局递增。
## 实现
1. proto/space.proto 中的 message AllocateS3ChunkRequest、message AllocateS3ChunkResponse 复制到 proto/mds.proto;
2. 修改 All AllocateS3Chunk复制到proto/space.proto/service/MdsService中;
4. curvefs/src/mds/mds_services.h MdsServiceImp类中增加 AllocateS3Chunk 实现;
5. curvefs/src/mds/mds_services.h MdsServiceImp类中增加 ChunkIDGenerator 类对象,方法 AllocateS3Chunk
0 码力 |
3 页 |
79.38 KB
| 1 年前 3
-
a/1/3/7a13352ace9d0e5a9426be5dcc3ed48e/p1_1.jpg)
CurveBS uses the central node Metadata Server (MDS) to manage virtual disk mapping and data replicas distribution. Decentralization currently leads to particularly strong in most cases.
The CurveBS core consists of three parts:
### 1. Metadata Server (MDS)
- Manages and stores metadata information and persists the data in ETCD
☑ Collect cluster status The client
● Provides read and write data interfaces for upper-layer applications
● Interacts with MDS to add, delete, modify, and query metadata
● Interacts with the chunkServer to read and write data
0 码力 |
13 页 |
2.03 MB
| 1 年前 3
-
Agenda
• CurveBS Architecture
• CurveBS Topology
• CurveBS Data Organization
• MetaData Server (MDS)
• ChunkServer
• Client
• CurveBS IO processing flow
• CurveBS Performance considerations
• Cloud Server(MDS)
## MDS Master
Heartbeat
Scheduler
TopoUpdatet
CopySet Scheduler
ConfGenerator
Leader Scheduler
HealthyChecker
Replica Scheduler
Recover Scheduler
Topology
NameServer
MDS Slave1 Slave1
Etcd Cluster (RAFT consensus)
Metadata store
MDS Master select
## ChunkServer
Clients
MDS
Peers
BRPC
RAFT Service
RAFT Service
RAFT Service .....
CopySet.....
CopySet.....
RAFT WAL
RaftMeta
0 码力 |
23 页 |
6.53 MB
| 1 年前 3
-
详细介绍ChunkServer的三个核心模块
04 新版本ChunkServer性能优化
介绍新版本ChunkServer性能优化的思路和结果
## CURVE基本架构
## • 元数据节点 MDS
• 管理和存储元数据信息
• 感知集群状态,合理调度
## • 数据节点 Chunkserver
• 数据存储
• 副本一致性,raft
## • 客户端 Client
• 对元数据增删改查 /3/2/b/4/32b42961304d48bdf42a254fa15bd989/p6_3.jpg)
## ChunkServer架构
ChunkServer通过RPC网络层与client,MDS,其他ChunkServer通信。RPC网络层是由brpc框架去完成的。包括读写socket,rpc协议解析等。

## ChunkServer架构
心跳模块有两方面的职责:
1、向MDS节点上报心跳,心跳中包括ChunkServer本身的一些统计信息
2、解析MDS的心跳response中的raft 成员变更信息,向CopysetNode发起变更
的leader
● MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息
## CLIENT上层应用
## QEMU:
实现了QEMU block与Client的对接层
向cinder/glance提供了Python API
https://github
0 码力 |
27 页 |
1.57 MB
| 1 年前 3
-
0 码力 |
231 页 |
4.00 MB
| 2 年前 3
-
+lseek
## 关键接口分析
## init
void (*init) (void *userdata, struct fuse_conn_info *conn);
根据挂载信息,从mds获取文件系统信息(或superblock),块分配器( bitmap )和root inode所在的copyset、metaserver ip等信息
■ 去metaserver获取文件系统信息(super parent, const char *name);
根据parent inode id和name从denty缓存中找到对应的denty结构:
- 如果denty缓存中不存在对应的inode,则从mds根据parent inode id获取parent inode所在copyset,metaserver ip等信息,然后从metaserver获取denty(这里有两种方式,一种是只获取当前需要的d off t off, struct fuse file info *fi);
■ 首先根据inode id 从缓存中查找到对应inode结构;
■ 如果inode缓存中不存在对应的inode,则从mds获取inode所在copyset,metaserver ip等信息,然后从metaserver获取inode结构,缓存之;
判断inode结构中,对应请求[off, size]位置的空间是否有分配
0 码力 |
11 页 |
487.92 KB
| 1 年前 3
-
近期规划
Curve的近期规划
## 基本架构
## • 元数据节点 MDS
管理元数据信息
收集集群状态信息,自动调度

## 基本架构
## • 元数据节点 MDS
管理元数据信息
收集集群状态信息,自动调度
- 数据节点 Chunkserver [Image](/uploads/documents/0/9/e/3/09e38610ff888e0fd1b2626578fba41c/p7_2.jpg)
## 基本架构
## • 元数据节点 MDS
管理元数据信息
收集集群状态信息,自动调度
- 数据节点 Chunkserver
数据存储
副本一致性
• 客户端 Client
对元数据增删改查
对数据增删改查

* @param: mdsclient透传给底层,在必要的时候与
mds通信
* @return:成功返回读取真实长度,-1为失败
int Read(char* buf, off_t offset, size_t length, MDSClient* mdsclient); 下图所示:
LCOV - code coverage report
| Current view: top level - mds/heartbeat | Hit | Total | Coverage |
| Test: coverage.info | 部署监控时,Curve根据集群信息生成配置文件,指定了Prometheus的监控目标(包括Client、MDS、ChunkServer、Etcd、物理节点等)。
2. Prometheus依据上述配置文件,发现相应服务。
3. Prometheus server以pull的方式,定期从Curve集群中MDS、ChunkServer、Client等组件的brpc Server拉取相应的监控指标,并存储在本地。 0 码力 |
33 页 |
2.64 MB
| 1 年前 3
|