合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性。
CubeFS 作为一个云原生的分布式存储平台,提供了多种访问协议,因此其应用场景也非常广泛,下面简单介绍几种比较典型的应用场景
CubeFS 具有众多特性,包括:
兼容 S3、POSIX、HDFS 等多种访问协议,协议间访问可互通
支持多副本及纠删码两种引擎,用户可以根据业务场景灵活选择
支持多租户管理,提供细粒度的租户隔离策略
可以轻松构建 PB 或者 EB 级规模的分布式存储服务,各模块可水平扩展
支持多级缓存,针对小文件特定优化,支持多种高性能的复制协议
基于 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 个,支持水平扩容。
分为副本子系统和纠删码子系统,两种子系统可同时存在,也都可单独存在:
数据节点支持水平扩容。
由对象节点(ObjectNode)组成,提供了兼容标准 S3 语义的访问协议,可以通过 Amazon S3 SDK 或者是 s3cmd 等工具访问存储资源。
逻辑上的概念,由多个元数据和数据分片组成,从客户端的角度看,卷可以被看作是可被容器访问的文件系统实例。从对象存储的角度来看,一个卷对应着一个 bucket。一个卷可以在多个容器中挂载,使得文件可以被不同客户端同时访问。
CubeFS 的安装方式有很多,包括 Docker、YUM 等等,由于我们这里直接直接在 Kubernetes 上使用,因此我们可以通过 Helm 来安装 CubeFS,各组件会直接使用宿主机网络,使用 hostPath 将磁盘映射到容器中。
在 Kubernetes 集群中部署 CubeFS 可以按照下图所示的架构进行部署:
CubeFS 目前由这四部分组成:
在部署之前,我们需要拥有一个至少有 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
TOP