您当前位置:资讯中心 >云计算 >浏览文章

CubeFS - 新一代云原生存储系统

来源:CTO 日期:2024/5/6 7:39:30 阅读量:(0)

CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性。

CubeFS 作为一个云原生的分布式存储平台,提供了多种访问协议,因此其应用场景也非常广泛,下面简单介绍几种比较典型的应用场景

  • 大数据分析:兼容 HDFS 协议,为 Hadoop 生态(如 Spark、Hive)提供统一存储底座,为计算引擎提供无限的存储空间以及大带宽的数据存储能力。
  • 深度训练/机器学习:作为分布式并行文件系统,支撑 AI 训练、模型存储及分发、IO 加速等需求。
  • 容器共享存储:容器集群可以将容器镜像的配置文件或初始化加载数据存储在 CubeFS 上,在容器批量加载时实时读取。多 Pod 间通过 CubeFS 共享持久化数据,在 Pod 故障时可以进行快速故障切换。
  • 数据库&中间件:为数据库应用如 MySQL、ElasticSearch、ClickHouse 提供高并发、低时延云盘服务,实现彻底的存算分离。
  • 在线服务:为在线业务(如广告、点击流、搜索)或终端用户的图、文、音视频等内容提供高可靠、低成本的对象存储服务。
  • 传统 NAS 上云:替换线下传统本地存储及 NAS,助力 IT 业务上云。

特性

CubeFS 具有众多特性,包括:

多协议

兼容 S3、POSIX、HDFS 等多种访问协议,协议间访问可互通

  • POSIX 兼容:兼容 POSIX 接口,让上层应用的开发变得极其简单,就跟使用本地文件系统一样便捷。此外,CubeFS 在实现时放松了对 POSIX 语义的一致性要求来兼顾文件和元文件操作的性能。
  • 对象存储兼容:兼容 AWS 的 S3 对象存储协议,用户可以使用原生的 Amazon S3 SDK 管理 CubeFS 中的资源。
  • Hadoop 协议兼容:兼容 Hadoop FileSystem 接口协议,用户可以使用 CubeFS 来替换 HDFS,做到上层业务无感。

双引擎

支持多副本及纠删码两种引擎,用户可以根据业务场景灵活选择

  • 多副本存储引擎:副本之间的数据为镜像关系,通过强一致的复制协议来保证副本之间的数据一致性,用户可以根据应用场景灵活的配置不同副本数。
  • 纠删码存储引擎:纠删码引擎具备高可靠、高可用、低成本、支持超大规模(EB)的特性,根据不同 AZ 模型可以灵活选择纠删码模式。

多租户

支持多租户管理,提供细粒度的租户隔离策略

可扩展

可以轻松构建 PB 或者 EB 级规模的分布式存储服务,各模块可水平扩展

高性能

支持多级缓存,针对小文件特定优化,支持多种高性能的复制协议

  • 元数据管理:元数据集群为内存元数据存储,在设计上使用两个 B-Tree(inodeBTree 与 dentryBTree)来管理索引,进而提升元数据访问性能;
  • 强一致副本协议 :CubeFS 根据文件写入方式的不同采用不同的复制协议来保证副本间的数据一致性。(如果文件按照顺序写入,则会使用主备复制协议来优化 IO 吞吐量;如果是随机写入覆盖现有文件内容时,则是采用一种基于 Multi-Raft 的复制协议,来确保数据的强一致性);
  • 多级缓存:纠删码卷支持多级缓存加速能力,针对热点数据,提供更高数据访问性能:
  • 本地缓存:可以在 Client 机器上同机部署 BlockCache 组件,将本地磁盘作为本地缓存. 可以不经过网络直接读取本地 Cache, 但容量受本地磁盘限制;
  • 全局缓存:使用副本组件 DataNode 搭建的分布式全局 Cache, 比如可以通过部署客户端同机房的 SSD 磁盘的 DataNode 作为全局 cache, 相对于本地 cache, 需要经过网络, 但是容量更大, 可动态扩缩容,副本数可调。

云原生

基于 CSI 插件可以快速地在 Kubernetes 上使用 CubeFS。

整体架构

整体上 CubeFS 由元数据子系统(Metadata Subsystem)、数据子系统(Data Subsystem)和资源管理节点(Master)以及对象网关(Object Subsystem)组成,可以通过 POSIX/HDFS/S3 接口访问存储数据。

资源管理节点

由多个 Master 节点组成,负责异步处理不同类型的任务,如管理数据分片与元数据分片(包括创建、删除、更新以及一致性检查等),检查数据节点或者元数据节点的健康状态,维护管理卷信息等

Master 节点可以有多个,节点之间通过 Raft 算法保证元数据的一致性,并且持久化到 RocksDB 中。

元数据子系统

由多个 Meta Node 节点组成,多个元数据分片(Meta Partition)和 Raft 实例(基于 Multi-Raft 复制协议)组成,每个元数据分片表示一个 Inode 范围元数据,其中包含两棵内存 B-Tree 树:inode BTree 与 dentry BTree。

元数据实例最少需要 3 个,支持水平扩容。

数据子系统

分为副本子系统和纠删码子系统,两种子系统可同时存在,也都可单独存在:

  • 副本子系统由 DataNode 组成,每个节点管理一组数据分片,多个节点的数据分片构成一个副本组;
  • 纠删码子系统(Blobstore)主要由 BlobNode 模块组成,每个节点管理一组数据块,多个节点的数据块构成一个纠删码条带。

数据节点支持水平扩容。

对象子系统

由对象节点(ObjectNode)组成,提供了兼容标准 S3 语义的访问协议,可以通过 Amazon S3 SDK 或者是 s3cmd 等工具访问存储资源。

逻辑上的概念,由多个元数据和数据分片组成,从客户端的角度看,卷可以被看作是可被容器访问的文件系统实例。从对象存储的角度来看,一个卷对应着一个 bucket。一个卷可以在多个容器中挂载,使得文件可以被不同客户端同时访问。

安装

CubeFS 的安装方式有很多,包括 Docker、YUM 等等,由于我们这里直接直接在 Kubernetes 上使用,因此我们可以通过 Helm 来安装 CubeFS,各组件会直接使用宿主机网络,使用 hostPath 将磁盘映射到容器中。

在 Kubernetes 集群中部署 CubeFS 可以按照下图所示的架构进行部署:

CubeFS 目前由这四部分组成:

  • Master:资源管理节点,负责维护整个集群的元信息,部署为 StatefulSet 资源。
  • DataNode:数据存储节点,需要挂载大量磁盘负责文件数据的实际存储,部署为 DaemonSet 资源。
  • MetaNode:元数据节点,负责存储所有的文件元信息,部署为 DaemonSet 资源。
  • ObjectNode:负责提供转换 S3 协议提供对象存储的能力,无状态服务,部署为 Deployment 资源。

在部署之前,我们需要拥有一个至少有 3 个节点(最好 4 个以上,可以容灾)的 Kubernetes 集群,且集群版本需要大于等于 1.15。

$ kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   46d   v1.28.7
node1    Ready    <none>          46d   v1.28.7
node2    Ready    <none>          46d   v1.28.7
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。