Curve支持S3 数据缓存方案© XXX Page 1 of 9 Curve支持S3 数据缓存方案© XXX Page 2 of 9 版本 时间 修改者 修改内容 1.0 2021/8/18 胡遥 初稿 背景 整体设计 元数据采用2层索引 对象名设计 读写缓存分离 缓存层级 对外接口 后台刷数据线程 本地磁盘缓存 关键数据结构 详细设计 Write流程 Read流程 ReleaseCache流程0 码力 | 9 页 | 179.72 KB | 6 月前3
副本如何用CLup管理PolarDB4008878716 services@csudata.com http://www.csudata.com 中启乘数科技 @http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 关于我 《PostgreSQL修炼之道:从小工到专家》的作者,中 启乘数科技联合创始人,PostgreSQL中国用户会常委。 从业近20年,拥有20年数据库、操作系统、存储领 负载均衡 读线性扩展 支持分库分表 高扩展性 写 VIP 读 VIP PG (Primary) PG (Standby1) PG (Standby2) PG (Standby3) 数据同步复制 写请求 读请求 应用层 负载均衡器 CLup高可用及读写分离功能http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 Cl Clup管理界面-性能监控http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 CLUP TOP SQL功能http://www.csudata.com │中启乘数科技(杭州)有限公司 数据赋能│价值创新 Clup管理界面-在Web界面中管理数据库-9- @ PolarDB环境准备创建PolarDB的要求 安装要求 需要有共享盘:盘的大小需要大于等于20GB0 码力 | 34 页 | 3.59 MB | 6 月前3
TGT服务器的优化服务器的优化块设备协议 • NBD • Linux专有块设备协议 • iSCSI • 广泛支持的外部设备协议(块,磁带等)Curve云原生存储支持块设备 • 通过NBD,只支持Linux • 通过SDK API,目前只支持Linux • PFS • 扩大使用范围 • 通过iSCSI支持更多系统,例如Windows, 类UNIX系统等,使用两项基础 技术 • TCP/IP • SCSI open-iscsi • Windows iSCSI 发起者 • 服务器端 • 必须是CurveBS原生支持的平台,因为需要curve原生接口,目前是LinuxiSCSI target服务器 • LINUX LILO • 一般用于输出内核本地块设备 • TCMU • 作为LILO支持用户态的接口 • 如何评价LILO • 输出内核块设备I/O效率高 • 不利于把复杂的存储协议代码搬进内核,例如(curve 比较久的历史,原来叫STGT,后来改成TGT • 纯用户态,不与内核绑定 • 支持复杂的存储系统,例如ceph rbd, sheepdog, glfs • 纯C代码,外加一些脚本 • 完整的源代码和维护工具、手册 • 编写IO驱动比较容易,容易扩展支持新的存储系统 • 代码独立,容易编译、调试、修改,适应性强让TGT支持curve • 编写curve驱动,底层异步提交I/O,pipeline •0 码力 | 15 页 | 637.11 KB | 6 月前3
Open Flags 调研open接口原型 open flags flags定义 flags的含义 libfuse open open flags 在curvefs上的测试 open flags 实现方式 整体flags支持方案 具体flag的实现方案 O_TRUNC I/O模式类 O_DIRECT O_SYNC, O_DSYNC O_NONBLOCK(O_NDELAY ), FASYNC, O_TMPFILE 结论 ,此时等同于open。 open flags flags定义 flags通过宏定义实现,定义见 ,主要包括如下flag fcntl.h # 红色是不支持且会执行结果错误;橙色是暂不确定但不影响写入结果;紫色为暂时无法测试;黑色是已经支持 #define O_RDONLY 00000000 #define O_WRONLY 00000001 #define O_RDWR 00000002 #define 2.6.33版本支持了O_DSYNC flag,且值使用原O_SYNC的值,但为了兼容老版本的O_SYNC,现在O_SYNC=O_DSYNC|04000000)。 FASYNC: 异步的,启用signal-driven I/O。 : 直接I/O,执行磁盘I/O时绕过缓冲区高速缓存,从用户空间直接将数据传递到文件或磁盘设备。 O_DIRECT : 使得32位操作系统对大文件支持(_FILE_OFFSET_BITS=64)。0 码力 | 23 页 | 524.47 KB | 6 月前3
Curve 分布式存储设计低成本大容量需求的业务 4. 中间件冷热数据自动分离 5. S3和POSIX统一访问需求 主要挑战和支持场景Curve Roadmap 1. 架构 1. 文件存储支持分布式缓存、完善冷热数据分层存储能力 2. 完善混合云、公有云上部署架构 3. 完善高性能3副本存储引擎,支持混合盘 4. 文件存储支持数据存储到HDFS、rados等引擎 2. 性能 1. 完善RDMA/SPDK方案,发布稳定版本 大文件读写性能优化,RAFT优化,降低写放大 3. 功能 1. 文件存储支持回收站/生命周期管理/配额/用户权限等 2. 支持NFS、CIFS/SMB、HDFS等协议 3. 块存储支持按存储池创建卷Curve 社区介绍 1. Curve的成长离不开社区贡献者的支持和参与。非常欢迎广大 社区用户为Curve贡献代码、文档,提交issue和改进网站。我 们愿意为您提供必要的支持 2. 社区成员组成: 网易杭研、网易云0 码力 | 20 页 | 4.13 MB | 6 月前3
PFS SPDK: Storage Performance Development Kit●读写都需要CPU拷贝数据 ●不能发挥某些NVME的功能,例如write zero10/17/22 5 为什么用PFS ●对代码比较熟悉 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系统元数据的操作非常少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 续的block组成,一次IO提交可以提高效率。10/17/22 8 PFS+SPDK 的部分读写的实现 ●某些盘只支持4k单位读写,但是CurveBS支持512字节读写 ●可能存在部分写的并发冲突 ●引入并发的range lock解决冲突10/17/22 9 PFS+SPDK 的DMA支持 ●ssize_t pfs_writev_dma(int fd, const struct iovec *iov page0+4096),[page1, page1+4096), [page2, page2+4096), [page3, page3+512)10/17/22 14 IOPortal实现读对齐支持 ●ssize_t IOPortal::pappend_from_dev_descriptor(int fd, off_t offset, size_t max_count)0 码力 | 23 页 | 4.21 MB | 6 月前3
BRPC与UCX集成指南1 用UCX实现BRPC对RDMA的支持 徐逸锋2 BRPC简介 ●BRPC是Curve的基础通讯框架 ●支持远程过程调用 –C++ –TCP传输 –bthread协程(m:n调度,减少基于内核的下文切换 ,减少cache miss) ●多协议支持 –baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 例子:Request输入处理19 Channel创建Socket20 Channel远程调用的发起21 UCX ●NVIDIA Mellanox 开源项目 ●支持RDMA,TCP,Shared memory等 ●能透明支持多个链路传输,例如多网卡bond ●编译成.so或lib的方式,可以集成到应用程序里 ●有完善的配置功能,ucx_info可以dump配置信息 ●有性能测试工具 ●特点是比较原始,开销小,但是没有很强的功能 ●是网络接口层,主要功能是网卡发现和远程内存传输支持,提供component查询和 memory domain的打开 ●一个component包含若干 memory domain resource,一个memory domain又可以包含若干个 transport ●当前支持的memory domain:ibverbs, tcp, shared memory0 码力 | 66 页 | 16.29 MB | 6 月前3
Raft在Curve存储中的工程实践raft和braft 03 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化项目背景 Curve是一个 高性能、更稳定、易运维 的 云原生 分布式存储系统,支持 块存储 和 文件存储 2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 对接Kubernetes为其提供RWO、RWX等类 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 系统开源社区 社区运营 生态共建 开源共建 源码兜底 技术领先 目标 方法 raft在Curve中的应用 05 Q&A 04 Curve对raft的优化Curve块存储RAFT应用 Curve块存储 • 高性能、更稳定、易运维 • 支持NBD(network block device)、iscsi • 支持RDMA和SPDK Curve块存储架构 • client:接受用户请求。 • mds:保存元数据,包括topo信息、块设备信息、 数据分布信息等,持久化到etcd中。0 码力 | 29 页 | 2.20 MB | 6 月前3
CurveFS方案设计卷和文件系统 元数据架构 文件系统快照 方案一:文件/目录级别快照 方案二:文件系统快照 关键点 元数据设计 数据结构 索引设计 文件空间管理 开发计划及安排 背景 为更好的支持云原生的场景,Curve需要支持高性能通用文件系统,其中高性能主要是适配云原生数据库的场景。当前Curve是实现了块存储,向上提供块设备服务,CurveFS会基于此实现。第一阶段的目标是实现 满足数据库场景的文件接口。 的管理形式?留有租户这个概念),直接基于 namespace 开发: a. 功能 软/硬链接:目前是都不支持的。软链接可以通过标识文件类型解决;由于 prefix + parentid + filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 一些 b. 扩展性/可用性/可靠性 使用 multi-raft, 扩展性、可用性和可靠性与元数据节点一致 对比结论 CurveFS 近期要能支持mysql所要接口,长期需要支持通用文件接口。 kv 虽然改造简单,短期内对基本功能的支持没有问题,但这个架构不利于 Curve 长期的规划和演进,因此选择通用的 dentry,inode 两层映射的元数据结构。对于 fs© XXX Page0 码力 | 14 页 | 619.32 KB | 6 月前3
CurveFS Client 概要设计当前先不考虑)。 open void (*open) (fuse_req_t req, fuse_ino_t ino, struct fuse_file_info *fi); posix语义中open支持的oflag主要有: O_RDONLY 只读打开 O_WRONLY 只写打开 O_RDWR 读写打开 以上3个必须指定且只能指定一个 O_APPEND 只追加写 O_CREAT 文件不存在时创建 值,如果非0,则需要延迟删除目录,如果为0,则删除目录。 删除时需要从缓存或mds查询删除inode和dentry的位置,并去metaserver删除,然后清除本地缓存 opendir 可先不支持,返回ENOSYS readdir void (*readdir) (fuse_req_t req, fuse_ino_t ino, size_t size, off_t off, struct 找到inode id 对应的inode 结构(从缓存或者metaserver) 根据to_set字段设置相应的attr字段,然后持久化到metaserver,并更新本地缓存。 access 可先不支持,返回ENOSYS rename void (*rename) (fuse_req_t req, fuse_ino_t parent, const char *name, fuse_ino_t newparent0 码力 | 11 页 | 487.92 KB | 6 月前3
共 22 条
- 1
- 2
- 3













