副本如何用CLup管理PolarDB共享盘使用阿里云自带的高性能Nvme盘,注意使用Nvme磁盘对可用 区有要求: • 华东1(杭州)可用区I • 华东2(上海)可用区B • 华北2(北京)可用区K • 华南1(深圳)可用区F。 只有某些规格的虚拟机可以挂载Nvme共享盘: • g7se • c7se • r7se 虚拟机要求是按量付费才可以挂载Nvme共享盘 阿里云的VIP功能目前还在内侧阶段,需要申请其他云环境中使用CLup创建Polardb的情况 在创建完虚拟机 后,在单独添加 共享盘 注意创建PolarDB需要的阿里云环境创建PolarDB需要的阿里云环境 部署集把虚拟机打散到不通的物理机上创建PolarDB需要的阿里云环境 VIP的使用创建PolarDB需要的阿里云环境 把VIP绑定到多台数据库主机创建PolarDB需要的阿里云环境 创建虚拟机的时候选中的盘都不是共享盘,必须在创建完 虚拟机后,在单独添加共享盘创建PolarDB需要的阿里云环境 x86_64-20- @ 使用CLup创建polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb使用CLup创建Polardb:0 码力 | 34 页 | 3.59 MB | 6 月前3
BRPC与UCX集成指南–bthread协程(m:n调度,减少基于内核的下文切换 ,减少cache miss) ●多协议支持 –baidu_std,http,grpc… ●protobuf3 BRPC简介 ●Client/Server架构 ●使用Protobuf定义协议文件 –例如: echo.proto:4 BRPC简介 client server EchoRequest EchoResponse5 BRPC简介 ●Channel类 ●往SocketMap里调用Insert,要么返回已经存在的Socket对象(引用计数加一),要么创建一 个新的12 BRPC EventDispatcher ●是socket事件分发的中心 ●使用epoll和边沿触发 ●提供监视一个fd是否可读写,并调用对应socket对象的成员函数1314 Socket 输入事件处理15 Socket options ●是创建socket的参数 ●主要成员: compare and set ●Tag match ●client/server模式的Listener, Ep(endpoint)26 UCP ●构建于uct之上,实现更加高级的功能,容易使用,但有一定开销。 ●UCT和UCP两者都有context概念,但是UCT只对一块网卡,而UCP把若干个UCT组合起 来,自动选择最快路径传输。 ●高级特性 –大消息报文的自动分片传输 –Active0 码力 | 66 页 | 16.29 MB | 6 月前3
curvefs client删除文件和目录功能设计return ret; } return ret; } 存在两个问题: 一是删除时nlink字段未考虑: 文件的nlink用于实现hard link。 hard link使用nlink字段表示文件的link的引用计数,第一次创建文件是nlink字段为1。每创建一个新的指向该文件的hard link时,nlink字段+1, 每删除一个hard link或指向的原文件时,nlink字段-1。© 不会被内核调用(例如client崩溃) 相关调研 moosefs moosefs 未对接forget moosefs 实现了在mds上open,因此删除时可以判断文件是否被打开 moosefs使用了两种机制,来实现上述功能,分别是trash机制和reserve机制(最新版本叫sustained),两种机制如下: trash机制: 对于所有TYPE_FILE类型的文件在删除时, ,则不会立 件的客户端因为持有该节点inodeid,所以不影响它对该文件的读写操作,当所有客户端都关闭该文件后,该文 件节点才会从 被清除。 reserve 使用了session机制,记录client端的open状态 通过META文件系统访问reserve 使用CUTOMA_FUSE_RESERVED_INODES消息保持和释放inode 实现了Timer,定期判断是否还有session,如果没有client打开,则进行清理。0 码力 | 15 页 | 325.42 KB | 6 月前3
PFS SPDK: Storage Performance Development Kit1 基于SPDK的CurveBS PFS存储引擎10/17/22 2 Why ●为了减少使用cpu做内存copy,减少系统调用 ●发挥某些被操作系统屏蔽的功能,例如nvme write zero ●根据阿里《When Cloud Storage Meets RDMA》的说法 ●在100Gbps网络带宽时,内存带宽成为瓶颈 ●Intel Memory Latency Checker (MLC)测试得到的CPU内存带宽是 ●找一个能管理裸盘,具有产品级可靠性的代码挺难的 ●PFS支持类POSIX文件的接口,与使用EXT4的存储引擎代码很像, 所以容易移植现有代码到PFS存储引擎 ●CurveBS对文件系统元数据的操作非常少,对文件系统的要求不高, 所以不需要元数据高性能,这方面PFS也合适10/17/22 6 对PFS的修改 ●基于阿里开源的PFS ●不再基于daemon模式,而是直接使用pfs core api ●依然向外提供管理工具, 例如 ●修改BRPC,允许使用dpdk内存作为IOBuf的内存分配器 ●BRPC接收到的数据在IOBuf中,IOBuf直接使用于NVME DMA传输 ●使用IOBuf内存读nvme,避免自己写PRP页面对齐内存分配代码10/17/22 11 pfs_pwrite_zero ●在初始化curvebs时,需要创建chunk pool, 每一个chunk都要填零 ●chunk不再被卷使用时,需要回归chunk0 码力 | 23 页 | 4.21 MB | 6 月前3
CurveFS Copyset与FS对应关系8、inode和dentry的内存估算 8.1 一台机器上能存放多少个inode和dentry 8.2 一台机器上建议的copyset数量 8.3 每个copyset建议管理存储容量的大小 1、背景 curvefs使用raft作为元数据一致性的保证。为了提高元数据的可扩展性和并发处理能力,采用元数据分片的方式管理inode和dentry的元数据。inode的分片依据是fsid + inodeid,dentry的分片依据是fsid 对应的copyset在预分配的时候已经确定。后续的读写的操作直接去对应的copyset上去进行读写。这个 分配copyset方式,并不适合curvefs的元数据。这种分配方式是提前分配了一批空间,即使用户只需要写4KB数据,也一次性分配1GB的空间。而curvefs的元数据,并不能一次申请一批在client端,而是每次都需 要去metaserver上去进行分配。 这里需要重新考虑curvefs的 创建一个文件系统时,如何初始化meta partition? master\cluster.go, chubaofs的文件系统使用volume的来表示,在创建一个文件系统的时候,会创建3个meta partition和10个data partition。chubaofs的data partition的功能我们使用curve块设备替换。meta partition的创建,以及meta partition的管理的,下面会详细分析一下。0 码力 | 19 页 | 383.29 KB | 6 月前3
TGT服务器的优化API,目前只支持Linux • PFS • 扩大使用范围 • 通过iSCSI支持更多系统,例如Windows, 类UNIX系统等,使用两项基础 技术 • TCP/IP • SCSI • 替代SAN • 可靠性、稳定性方面有自己的的特色,使用raft副本一致性和copyset概念可以自动 修复损坏的副本,并且可扩容。无论在可靠性、稳定性还是性价比方面都很有优势, 使用廉价硬件搭建。iSCSI软件 • 编写curve驱动,底层异步提交I/O,pipeline • 利用NEBD PART 1接口,需要与nebdserver运行在同一台机器 • 支持共享打开,两台TGT服务器可以同时打开一个curve卷 • 让Initiator可以使用multipath • 支持卷resize • 添加新的命令 • tgtadm --mode logicalunit --op update --tid 1 --lun 1 --params disksize=auto 性能问题主要体现在不能有效使用多CPU • 对多个socket connection,在单线程里做event loop多路复用。 • 多个target时,如果挂的设备多,一旦客户端请求量大,就会忙不过来。 • 开源界有尝试修改 • 例如sheepdog的开发者提交过一个patch,但是测试效果不理想,分析 原因,event loop依然是瓶颈对TGT的性能优化 • IO是使用多个epoll 线程,充分发挥多CPU能力0 码力 | 15 页 | 637.11 KB | 6 月前3
新一代云原生分布式存储新一代云原生分布式存储—Curve 上 李小翠 网易数帆存储团队分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 场景介绍 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑存储的发展 互联网时代,数据大爆炸 大型主机 成本高 单点问题 扩容困难 各存储设备通过网络互联 大规模 client W W W client分布式存储介绍 01 存储的发展 | 分布式存储的分类 | 分布式存储的要素 02 03 04 Ceph 架构简介 | 块存储场景 | 使用中的问题 Curve 架构简介 | 数据对比 | 应用情况 FAQ 答疑架构简介 — 总体架构 开源分布式存储界的扛把子 支持块存储、文件存储、对象存储架构简介 — 概念介绍 object:存储单元 Groups 归置组 归置组中的成员为副本 OSD:Object Storage Device, 管理一个磁盘的进程架构简介 — 数据放置 使用多级哈希的方式 使用CRUSH算法根据pgid获得指定的副本个数的id osd.1, osd.2, osd.3 对ObjectID进行哈希并取模(复制组数量)得到pgid head_D35c9011 根据0 码力 | 29 页 | 2.46 MB | 6 月前3
Open Flags 调研当pathname对应的文件不存在时则创建它,文件uid为进程uid,gid为进程gid或父目录gid(取决于SGID是否置位);当flags中出现O_CREAT 或 O_TMPFILE时,mode参数必须提供,否则会使用栈中随机字节填充;通常在没有ACL的情况下,有效的mode是经过与进程mask作用后的结果(mode & ~mask)。 # symbolic constants S_IRWXU 00700 S_IRUSR S_IFCHR 0020000 (character device) S_IFIFO 0010000 (fifo)© XXX Page 5 of 23 O_EXCL: 与O_CREATE一起使用,如果pathname已经存在则返回失败(EEXIST),否则创建文件成功。 : 该参数不会使打开的文件成为该进程的控制终端。如果没有指定这个标志,那么任何一个 输入都将会影响用户的进程。 O_NOCTTY 文件属性更新(在linux 2.6.33之前只有O_SYNC flag, 但是在绝大多数文件系统中对O_SYNC的实现都是O_DSYNC的含义,在2.6.33版本支持了O_DSYNC flag,且值使用原O_SYNC的值,但为了兼容老版本的O_SYNC,现在O_SYNC=O_DSYNC|04000000)。 FASYNC: 异步的,启用signal-driven I/O。 : 直接I/O,执行磁0 码力 | 23 页 | 524.47 KB | 6 月前3
Raft在Curve存储中的工程实践2018~2021 Curve块存储 2021~2022 Curve文件存储 • 基于Openstack构建云计算平台 • 底层存储使用Ceph块存储 • 稳定性挑战 • 算力平台kubernetes的迅速发展 • AI/大数据业务的快速增长 • 存储使用Ceph文件存储/HDFS • 成本/性能挑战 Curve块存储和文件存储均采用raft协议整体架构 • 对接OpenStack平台为云主机提供高性能块 型的持久化存储卷 • 对接PolarFS作为云原生数据库的高性能存储 底座,完美支持云原生数据库的存算分离架 构 • Curve作为云存储中间件使用S3兼容的对象 存储作为数据存储引擎,为公有云用户提供 高性价比的共享文件存储 • 支持在物理机上挂载使用块设备或FUSE文件 系统开源社区 社区运营 生态共建 开源共建 源码兜底 技术领先 目标 方法 影响力 降本 获客 用户 开发者 Curve文件存储 • 分布式文件系统 • 支持多挂载,提供close-to-open一致性 • 提供缓存加速,可使用内存、本地盘、云盘加速 • 存储后端可对接对象存储,降低成本 • 支持生命周期管理 Curve文件存储架构 • client:接受用户请求,采用fuse的方式挂载挂载使用。 • 元数据集群:mds 和 metaserver。 • mds:保存元数据,包括topo信息、文件系统信0 码力 | 29 页 | 2.20 MB | 6 月前3
CurveFS方案设计filename 作为 key , filename 直接和 fileInfo 关联,硬链接无法支持 b. 性能 list:list在通用文件系统中是很常见的操作,目前 curve 的元数据缓存使用的 lru cache,因此 list 只能依赖 etcd 的 range 获取方式。如果需要对 list 加速,需要新的缓存结构 c. 扩展性/可用性/可靠性 依赖于第三方kv存储,目前是etcd 两层映射关系,所有的元数据都缓存在内存中,持久化在 binlog 文件中,binlog采用定期dump的方式删除。基于这种方式的开发: a. 性能 加载:数据量较大的情况下,元数据节点启动较慢;但是元数据使用 master-slave 可以降低 failover 情况下的加载时间 b. 扩展性/可用性/可靠性 扩展性不够,受限于单机的内存和磁盘,只能纵向扩展 可用性足够,由于是 master-slave dentry,inode 两层映射关系,所有的元数据都缓存在内存中。元数据是分片的,使用 multi-raft 持久化元数据以及保证多副本数据一致性。基于这种方式开发: a. 性能 由于元数据分片,获取元数据需要跟多个节点进行rpc的交互,因此性能相比单机要弱一些 b. 扩展性/可用性/可靠性 使用 multi-raft, 扩展性、可用性和可靠性与元数据节点一致 对比结论 CurveFS0 码力 | 14 页 | 619.32 KB | 6 月前3
共 28 条
- 1
- 2
- 3













