 Curve核心组件之snapshotclone支持从快照克隆和从镜像(卷)克隆 • 支持从快照回滚 • 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。 SnapshotService object data object data object S3 Snap Task etcd mds client 3.获取快照元数据 datastore metastore http service clone Task user 快照元数据 2.创建内部快照 5.删除内部快照 快照数据 1.发起快照 SnapshotCloneServer 6.删除内部快照数据快照的元数据和数据组织 写时复制通常使用版本号实现  复制时仅复制元数据,并增加版本号  写入时,先复制要写入的数据块,然后再写入CHUNKSERVER端快照实现-写时复制  使用copy-on-write  当前写请求的sn > chunk的cur_sn时触发复制  拷贝的单位是一个Page,即4KB  使用snapfile中的bitmap标记复制过的PageCHUNKSERVER端快照实现-转储内部快照0 码力 | 23 页 | 1.32 MB | 6 月前3 Curve核心组件之snapshotclone支持从快照克隆和从镜像(卷)克隆 • 支持从快照回滚 • 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。 SnapshotService object data object data object S3 Snap Task etcd mds client 3.获取快照元数据 datastore metastore http service clone Task user 快照元数据 2.创建内部快照 5.删除内部快照 快照数据 1.发起快照 SnapshotCloneServer 6.删除内部快照数据快照的元数据和数据组织 写时复制通常使用版本号实现  复制时仅复制元数据,并增加版本号  写入时,先复制要写入的数据块,然后再写入CHUNKSERVER端快照实现-写时复制  使用copy-on-write  当前写请求的sn > chunk的cur_sn时触发复制  拷贝的单位是一个Page,即4KB  使用snapfile中的bitmap标记复制过的PageCHUNKSERVER端快照实现-转储内部快照0 码力 | 23 页 | 1.32 MB | 6 月前3
 NJSD eBPF 技术文档 - 0924版本关闭⽂件时会发送FLUSH请求和RELEASE请求 • 场景2 解压压缩包场景 • LOOKUP inode 没有该inode • CREATE创建⽂件句柄并返回fstat + timeout设置 • WRITE 写⼊内容从0~16KB不等 • SETATTR inode 根据UID,ATIME,CTIME,length来设置属性 • 关闭⽂件时会发送FLUSH请求和RELEASE请求FUSE com/opencurve/curve • 版本发布周期:每半年⼀个⼤版本,1~2个⽉⼀个⼩版本 • 了解Curve进展:每隔2周的Curve周会说明Curve进展以及讨论相关问题 • 提交bug与建议:http://github.com/opencurve/curve/issues • 参与Curve交流与讨论:微信群,右⼿边⼆维码You can take away • Curve⽂件系统采⽤cache来提升性能,对象存储来降低成本0 码力 | 20 页 | 7.40 MB | 6 月前3 NJSD eBPF 技术文档 - 0924版本关闭⽂件时会发送FLUSH请求和RELEASE请求 • 场景2 解压压缩包场景 • LOOKUP inode 没有该inode • CREATE创建⽂件句柄并返回fstat + timeout设置 • WRITE 写⼊内容从0~16KB不等 • SETATTR inode 根据UID,ATIME,CTIME,length来设置属性 • 关闭⽂件时会发送FLUSH请求和RELEASE请求FUSE com/opencurve/curve • 版本发布周期:每半年⼀个⼤版本,1~2个⽉⼀个⼩版本 • 了解Curve进展:每隔2周的Curve周会说明Curve进展以及讨论相关问题 • 提交bug与建议:http://github.com/opencurve/curve/issues • 参与Curve交流与讨论:微信群,右⼿边⼆维码You can take away • Curve⽂件系统采⽤cache来提升性能,对象存储来降低成本0 码力 | 20 页 | 7.40 MB | 6 月前3
 副本如何用CLup管理PolarDB如何用CLup管理Polardb 4008878716 services@csudata.com http://www.csudata.com 中启乘数科技 @http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 关于我 《PostgreSQL修炼之道:从小工到专家》的作者,中 启乘数科技联合创始人,PostgreSQL中国用户会常委。 从 (Standby3) 数据同步复制 写请求 读请求 应用层 负载均衡器 CLup高可用及读写分离功能http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 Clup管理界面-性能监控http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 CLUP TOP SQL功能http://www.csudata.com p创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb: 切换测试使用CLup创建Polardb 详细参加:http://www.csudata.com/clup/manual/4.2/10010THANKS0 码力 | 34 页 | 3.59 MB | 6 月前3 副本如何用CLup管理PolarDB如何用CLup管理Polardb 4008878716 services@csudata.com http://www.csudata.com 中启乘数科技 @http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 关于我 《PostgreSQL修炼之道:从小工到专家》的作者,中 启乘数科技联合创始人,PostgreSQL中国用户会常委。 从 (Standby3) 数据同步复制 写请求 读请求 应用层 负载均衡器 CLup高可用及读写分离功能http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 Clup管理界面-性能监控http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 CLUP TOP SQL功能http://www.csudata.com p创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb: 切换测试使用CLup创建Polardb 详细参加:http://www.csudata.com/clup/manual/4.2/10010THANKS0 码力 | 34 页 | 3.59 MB | 6 月前3
 BRPC与UCX集成指南–baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse5 BRPC简介 ●Channel类 –代表一个连接,Client通过Channel发 送请求和接收应答 ●Server类 –收集机器资源(内存,网卡等),在应用的各个部分共享 ●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 –消息异步发送 ●Tag –MPI使用0 码力 | 66 页 | 16.29 MB | 6 月前3 BRPC与UCX集成指南–baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse5 BRPC简介 ●Channel类 –代表一个连接,Client通过Channel发 送请求和接收应答 ●Server类 –收集机器资源(内存,网卡等),在应用的各个部分共享 ●Worker –完成ucx的功能,可以在应用程序中调用的函数(不是单独执行的线程) ●Listener –接收连接请求 ●Ep –连接对象,在ep上请求发送和接收29 UCP 消息接口类型 ●Active message –速度最快,被brpc使用作为消息传递 –消息通过回调函数接收 –消息异步发送 ●Tag –MPI使用0 码力 | 66 页 | 16.29 MB | 6 月前3
 Curve文件系统元数据管理1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100© XXX Page 13 of 24 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 4、client给server1发送请求:inode 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询不到 4、client给server1发送请求:分配inodeid 300,创建文件C的inode。 + C → 300 删除文件:删除/A/C 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 删除记录0 码力 | 24 页 | 204.67 KB | 6 月前3 Curve文件系统元数据管理1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100© XXX Page 13 of 24 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 4、client给server1发送请求:inode 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询不到 4、client给server1发送请求:分配inodeid 300,创建文件C的inode。 + C → 300 删除文件:删除/A/C 1、client给server0发送请求:parentid 0 + name "A",查询"A"的inodeid为100 2、client给server0发送请求:inode 100,查询的"A"的inode信息。 3、client给server1发送请求:parentid 100 + name "C",查询"C"的inode为300 删除记录0 码力 | 24 页 | 204.67 KB | 6 月前3
 Curve核心组件之Client - 网易数帆信息  元数据信息在打快照时会进行变化  MetaCache:元数据缓存  IOTracker:跟踪一个上层IO请求  IOSplitor:IO转换拆分  ChunkClient、CliClient:与Chunkserver进行通信  前者负责IO请求  后者负责获取复制组(copyset)的leader  MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 8M len: 16M 请求落在两个逻辑chunk上,所以 请求会被拆分成两个子请求:  ChunkIdx 1, off: 8M len 8M  ChunkIdx 2, off: 0 len 8MCLIENT IO流程 子请求由哪个chunkserver处理,依赖以 下信息:  逻辑chunk与物理chunk映射关系 上报心跳CLIENT IO流程 子请求处理步骤: 1. 从MDS获取逻辑chunk与物理chunk的 对应关系(包含逻辑池以及复制组信息) 2. 从MDS获取复制组所在的机器列表 3. 从Chunkserver获取复制组leader信息 4. 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io task并放入任务队列0 码力 | 27 页 | 1.57 MB | 6 月前3 Curve核心组件之Client - 网易数帆信息  元数据信息在打快照时会进行变化  MetaCache:元数据缓存  IOTracker:跟踪一个上层IO请求  IOSplitor:IO转换拆分  ChunkClient、CliClient:与Chunkserver进行通信  前者负责IO请求  后者负责获取复制组(copyset)的leader  MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 ChunkServer:通过raft维护复制组内的主-从关系CLIENT IO流程 用户下发一个写请求 off: 8M len: 16M 请求落在两个逻辑chunk上,所以 请求会被拆分成两个子请求:  ChunkIdx 1, off: 8M len 8M  ChunkIdx 2, off: 0 len 8MCLIENT IO流程 子请求由哪个chunkserver处理,依赖以 下信息:  逻辑chunk与物理chunk映射关系 上报心跳CLIENT IO流程 子请求处理步骤: 1. 从MDS获取逻辑chunk与物理chunk的 对应关系(包含逻辑池以及复制组信息) 2. 从MDS获取复制组所在的机器列表 3. 从Chunkserver获取复制组leader信息 4. 将请求发往leader节点CLIENT IO线程模型 用户线程 1. 用户调用接口,发起IO请求 2. AioWrite将请求封装成io task并放入任务队列0 码力 | 27 页 | 1.57 MB | 6 月前3
 Raft在Curve存储中的工程实践响应来自其他服务器的请求,如果接受不 到消息,就变成候选人并发起一次选举。 • 时间被划分成一个个的任期,每个任期开始都是一次 选举。 • 选举成功,领导⼈会管理整个集群直到任期结束。 • 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. leader把请求指令记录下来,写入日志,然后并⾏发 Curve块存储 • 高性能、更稳定、易运维 • 支持NBD(network block device)、iscsi • 支持RDMA和SPDK Curve块存储架构 • client:接受用户请求。 • mds:保存元数据,包括topo信息、块设备信息、 数据分布信息等,持久化到etcd中。 • chunkserver:采用raft协议3副本的方式保存块 设备上的数据。 • snaps • chunk -> copyset -> chunk in 3 chunkserverCurve块存储RAFT应用 请求处理流程 以写请求为例: 1. Client 发送写请求给 Leader ChunkServer。 2. ChunkServer 收到请求,将请求封装成一个 log entry,提交给 raft。 3. raft模块在本地持久化 entry 的同时发送 entry0 码力 | 29 页 | 2.20 MB | 6 月前3 Raft在Curve存储中的工程实践响应来自其他服务器的请求,如果接受不 到消息,就变成候选人并发起一次选举。 • 时间被划分成一个个的任期,每个任期开始都是一次 选举。 • 选举成功,领导⼈会管理整个集群直到任期结束。 • 选举失败,这个任期就会没有领导⼈⽽结束。 raft选举leader raft任期RAFT协议简介 raft复制状态机 1. leader收到客户端的请求。 2. leader把请求指令记录下来,写入日志,然后并⾏发 Curve块存储 • 高性能、更稳定、易运维 • 支持NBD(network block device)、iscsi • 支持RDMA和SPDK Curve块存储架构 • client:接受用户请求。 • mds:保存元数据,包括topo信息、块设备信息、 数据分布信息等,持久化到etcd中。 • chunkserver:采用raft协议3副本的方式保存块 设备上的数据。 • snaps • chunk -> copyset -> chunk in 3 chunkserverCurve块存储RAFT应用 请求处理流程 以写请求为例: 1. Client 发送写请求给 Leader ChunkServer。 2. ChunkServer 收到请求,将请求封装成一个 log entry,提交给 raft。 3. raft模块在本地持久化 entry 的同时发送 entry0 码力 | 29 页 | 2.20 MB | 6 月前3
 Curve核心组件之chunkserver2、解析MDS的心跳response中的raft 成员变更信息,向CopysetNode发起变 更 ChunkServer架构ChunkOpRequest模块封装了对 ChunkService到达的I/O请求的实际处 理过程。请求到来时,封装一个 OpRequest,将上下文保存在里面,然 后发起Propose提交给raft,等raft apply后再执行后面的操作。 ChunkServer架构CloneManager主要负责克隆相关的功 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。 ChunkServer架构并发控制层,负责对chunkserver的IO 请求进行并发控制,对上层的读写请 求安照chunk粒度进行Hash,使得不同 chunk的请求可以并发执行。 ChunkServer架构DataStore是对chunk落盘逻辑的封装。 包含chunkfile的创建、删除,以及实际 对chu ChunkServer架构LocalFileSystermAdaptor是对底层文件 系统的一层抽象,目前适配封装了ext4 文件系统的接口。 之所以要做这层抽 象,目的是隔离了底层文件系统的实 际读写请求,如果将来curve要适配裸 盘或者采用其他文件系统,可以在这 层进行适配。 ChunkServer架构CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块0 码力 | 29 页 | 1.61 MB | 6 月前3 Curve核心组件之chunkserver2、解析MDS的心跳response中的raft 成员变更信息,向CopysetNode发起变 更 ChunkServer架构ChunkOpRequest模块封装了对 ChunkService到达的I/O请求的实际处 理过程。请求到来时,封装一个 OpRequest,将上下文保存在里面,然 后发起Propose提交给raft,等raft apply后再执行后面的操作。 ChunkServer架构CloneManager主要负责克隆相关的功 器,统计一些IO层面和copyset层面的 一些指标,方便监控和跟踪。 ChunkServer架构并发控制层,负责对chunkserver的IO 请求进行并发控制,对上层的读写请 求安照chunk粒度进行Hash,使得不同 chunk的请求可以并发执行。 ChunkServer架构DataStore是对chunk落盘逻辑的封装。 包含chunkfile的创建、删除,以及实际 对chu ChunkServer架构LocalFileSystermAdaptor是对底层文件 系统的一层抽象,目前适配封装了ext4 文件系统的接口。 之所以要做这层抽 象,目的是隔离了底层文件系统的实 际读写请求,如果将来curve要适配裸 盘或者采用其他文件系统,可以在这 层进行适配。 ChunkServer架构CURVE基本架构 01 02 03 04 ChunkServer架构 ChunkServer核心模块0 码力 | 29 页 | 1.61 MB | 6 月前3
 Curve设计要点client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 chunk 的请求 3. Client 向 chunkserver 查询 chunk 所在的 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求, Chunkserver 完成后通知client; 5. Client通知用户请求完成。背景 01 02 03 04 总体设计 系统特性 近期规划单卷4K随机读写IOPS 102k 39.7k 41.7k 127k 4K随机写 4K随机读 Ceph(L/N) scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 • NEBD Server: 接受请求 调用Curve Client处理 • 升级只需重启Server 秒级影响易运维 • 丰富的metric体系 • prometheus + grafana 可视化 • 每日报表 • 丰富的数据定位问题易运维0 码力 | 35 页 | 2.03 MB | 6 月前3 Curve设计要点client MDS leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 chunk 的请求 3. Client 向 chunkserver 查询 chunk 所在的 所在的 copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求, Chunkserver 完成后通知client; 5. Client通知用户请求完成。背景 01 02 03 04 总体设计 系统特性 近期规划单卷4K随机读写IOPS 102k 39.7k 41.7k 127k 4K随机写 4K随机读 Ceph(L/N) scatter-width • 无需人工干预 • 对io影响几乎无影响易运维 • 升级秒级影响 • 客户端采用CS架构 • NEBD Client: 对接上层业务 • NEBD Server: 接受请求 调用Curve Client处理 • 升级只需重启Server 秒级影响易运维 • 丰富的metric体系 • prometheus + grafana 可视化 • 每日报表 • 丰富的数据定位问题易运维0 码力 | 35 页 | 2.03 MB | 6 月前3
 Curve核心组件之mds – 网易数帆leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求(fd, offset, length) ; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 chunk 的请求 (CopysetId ,chunkId, offset copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求client (IP, port, CopysetId, chunkId, offset in chunk, length in chunk), Chunkserver 完成后通知; 5. Client通知用户请求完成。HEARTBEAT 心跳用于中心节点和数据节点的数据交互,详细功能如下: •0 码力 | 23 页 | 1.74 MB | 6 月前3 Curve核心组件之mds – 网易数帆leader Chunk server 1、发起请求 2、查询元数据 5、返回结果 5、返回结果 user 3、查询leader节点 4、向leader cs发起请求 1. 用户发起请求(fd, offset, length) ; 2. Client 向 mds 查询请求的元数据, 并缓存到本地,请求转换为对 chunk 的请求 (CopysetId ,chunkId, offset copyset的leader Chunkserver节点; 4. Client 向 leader 发送读写请求client (IP, port, CopysetId, chunkId, offset in chunk, length in chunk), Chunkserver 完成后通知; 5. Client通知用户请求完成。HEARTBEAT 心跳用于中心节点和数据节点的数据交互,详细功能如下: •0 码力 | 23 页 | 1.74 MB | 6 月前3
共 22 条
- 1
- 2
- 3













