Curve元数据节点高可用
11 of 30 $ ETCDCTL_API=3 ./bin/etcdctl put foo bar $ ETCDCTL_API=3 ./bin/etcdctl get foo --write-out=json revision: 2 $ ETCDCTL_API=3 ./bin/etcdctl put foo bar $ ETCDCTL_API=3 ./bin/etcdctl get ETCDCTL_API=3 ./bin/etcdctl put hello world $ ETCDCTL_API=3 ./bin/etcdctl get foo --write-out=json revision: 4 $ ETCDCTL_API=3 ./bin/etcdctl get hello --write-out=json revision: 4 $ ETCDCTL_API=3 ./bin/etcdctl /bin/etcdctl put hello world $ ETCDCTL_API=3 ./bin/etcdctl get hello --write-out=json revision: 5 3.2.2 举例说明Campagin流程 场景描述:三个mds(mds1, mds2, mds3),希望实现一个mds作为主提供服务,另外两个mds作为备在主挂掉的时候提供服务的功能。如果利用上述的Campagin进行选举,过程如下:0 码力 | 30 页 | 2.42 MB | 5 月前3NJSD eBPF 技术文档 - 0924版本
Curve分布式⽂件存储 • ⾼性能、易运维、云原⽣Curve⽂件系统框架和主要应⽤场景 • AI机器学习场景 • ⼤数据计算场景 • 中间件数据存储场景 • ⽀持POSIX兼容的⽂件API • ⽀持低延迟的⽂件数据访问Curve⽂件系统⾯临的问题 • ⽤户态实现 • 稳定性/可靠性⾼ • 容易更新及维护 • 基于FUSE提供POSIX兼容⽂件接⼝ • 问题 • 瓶颈在/dev/fuse通讯开销基于FUSE可能的优化点 • 降低内核与libfuse通讯延迟 • 基于⽂件属性的操作内核直接返回? • 基于⽂件数据的操作先内核读写 cache?实现POSIX兼容API途径及问题 • 基于FUSE的实现 • curve / ceph / gluster • LD_PRELOAD重载⽂件系统系统调⽤ • vpp / f-stack / DirectFUSE google android12 passthrough什么是eBPF • ebpf是不同环境下内核配置, 调试,监控⼯具 • map映射 • 验证器 • Hook • Helper api配置TCP Initial RTO • 场景 内核4.12之前 initial RTO是⼀个常数1s • 应⽤类型BPF_PROG_TYPE_SOCK_OPS • HOOK BPF_SOCK_OPS_TIMEOUT_INIT0 码力 | 20 页 | 7.40 MB | 5 月前3OID CND Asia Slide: CurveFS
Upper-layer applications can access file data in storage pools through interfaces such as NFS/HDFS/Posix api Manage multiple types of storage (object storage, HDFS storage, Elastic block storage) Support0 码力 | 24 页 | 3.47 MB | 5 月前3TGT服务器的优化
服务器的优化块设备协议 • NBD • Linux专有块设备协议 • iSCSI • 广泛支持的外部设备协议(块,磁带等)Curve云原生存储支持块设备 • 通过NBD,只支持Linux • 通过SDK API,目前只支持Linux • PFS • 扩大使用范围 • 通过iSCSI支持更多系统,例如Windows, 类UNIX系统等,使用两项基础 技术 • TCP/IP • SCSI • 替代SAN0 码力 | 15 页 | 637.11 KB | 5 月前3PFS SPDK: Storage Performance Development Kit
少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 6 对PFS的修改 ●基于阿里开源的PFS ●不再基于daemon模式,而是直接使用pfs core api ●依然向外提供管理工具, 例如 pfs ls、cp、rm等 ●增加spdk驱动10/17/22 7 新增PFS接口 ●增加pfs_pwritev和pfs_preadv接口 ●ssize_t0 码力 | 23 页 | 4.21 MB | 5 月前3Curve核心组件之Client - 网易数帆
MDSClient:负责与MDS交互,挂卸载卷、获取元数据信息 CLIENT整体架构QEMU: 实现了QEMU block与Client的对接层 向cinder/glance提供了Python API https://github.com/opencurve/curve-qemu-block-driver NBD: 实现了Curve-NBD,与内核NBD模块进行交互 可以作为容器的数据存储0 码力 | 27 页 | 1.57 MB | 5 月前3Curve核心组件之snapshotclone
支持Lazy和非Lazy两种模式克隆 • 支持从快照克隆和从镜像(卷)克隆 • 支持从快照回滚 • 高可用,克隆任务中断自动拉起继续克隆快照克隆服务器架构 • 基于brpc提供restful API的对外http接口 HttpService: • Serivce层面区分上层请求为同步接口调用,还是异步接口调用, 同步接口调用直接调用Core层接口实现功能,异步接口创建Task, 并交由TaskManager调度。0 码力 | 23 页 | 1.32 MB | 5 月前3Curve文件系统元数据持久化方案设计
抽象成一个 KVStore,对外提供 SET/GET/DEL 等接口,inode/dentry 均编码后以 key-value 的形式存入 KVStore 当前实现可先只实现 KVStore(提供方便 API),Raft 等可以后续接入(目前实现中持久化可以在 KVStore 退出时触发持久化,或定时持久化)© XXX Page 8 of 12 class KVStore : public braft::StateMachine0 码力 | 12 页 | 384.47 KB | 5 月前3curvefs client删除文件和目录功能设计
这种情况下,就会存在nlink未被减1的情况,当所有硬链接都被删除后,就会出现孤儿inode。 moosefs由于只有一个mds节点看,所以不存在这个问题。 chubaofs的解决方案是: 在Delete_ll(api.go) 函数中,在delete dentry后有一段注释如下: // dentry is deleted successfully but inode is not, still returns0 码力 | 15 页 | 325.42 KB | 5 月前3Open Flags 调研
unsupported, this field is set to zero. */ uint32_t poll_events; }; // fastcfs typedef struct fcfs_api_file_info { FCFSAPIContext *ctx; int64_t tid; struct { FDIRClientSession flock;0 码力 | 23 页 | 524.47 KB | 5 月前3
共 10 条
- 1