底层存储

Alluxio 连接到各种各样的存储系统,称为底层文件系统 (UFS),并通过统一的虚拟命名空间对外暴露。本节介绍 Alluxio 挂载的工作原理,并提供各支持存储系统的配置指南。

挂载工作原理

挂载将一个 Alluxio 虚拟路径绑定到一个 UFS URI。例如,将 s3://my-bucket/data/ 挂载到 /data,即可通过 Alluxio 命名空间中的 /data 访问该存储桶内容。数据不会被复制,读写操作均由 Alluxio 代理转发到底层存储。

关键行为:

  • 可同时在不同路径下挂载多个存储系统。

  • 单挂载选项(通过 mountOptions--option 设置)优先于 AlluxioCluster spec.propertiesalluxio-site.properties 中设置的全局属性。

  • 挂载点必须位于 Alluxio 命名空间的顶层,不允许嵌套。完整规则请参阅 挂载规则

挂载规则

在定义命名空间时,您必须遵循两个规则,以确保挂载表有效且无歧义。

规则 1:挂载必须是根目录(/)的直接子级

您只能在 Alluxio 命名空间的顶层创建挂载点。您不能挂载到根路径(/)本身,也不能在不存在的目录中创建挂载点。

操作
Alluxio 路径
UFS 路径
有效?
原因

挂载存储桶

/s3-data

s3://my-bucket/

✔️ 是

挂载点是根目录的直接子级。

挂载到根目录

/

s3://my-bucket/

❌ 否

根路径不能是挂载点。

挂载到子路径

/data/images

s3://my-bucket/images/

❌ 否

挂载点不能在子目录中创建。

规则 2:挂载不能嵌套

一个挂载点不能创建在另一个挂载点内部,无论是在 Alluxio 命名空间还是在 UFS 命名空间中。例如,如果 /data 挂载到 s3://my-bucket/data,您不能在 /data/tables 创建新挂载(嵌套的 Alluxio 路径),也不能将另一个 UFS 挂载到 s3://my-bucket/data/tables(嵌套的 UFS 路径)。

假设您有一个现有的挂载点:

  • Alluxio 路径: /data

  • UFS 路径: s3://my-bucket/data

以下新挂载将是无效的

新 Alluxio 路径
新 UFS 路径
有效?
拒绝原因

/data/tables

hdfs://namenode/tables

❌ 否

Alluxio 路径 /data/tables 嵌套在现有的 /data 挂载中。

/tables

s3://my-bucket/data/tables

❌ 否

UFS 路径 s3://.../data/tables 嵌套在现有的 s3://.../data 挂载中。

基本挂载配置

每个挂载定义为一个 UnderFileSystem 自定义资源。无论 UFS 类型如何,字段结构相同:

应用并验证:

pathmountOptions 中 UFS 特定的值请参阅对应存储系统的指南。

挂载多个存储桶

每个存储位置需要创建一个独立的挂载,且每个挂载必须指定唯一的 mountPath。挂载数量没有硬性上限。

每个位置创建一个 UnderFileSystem CR(mountOptions 属性见各 UFS 指南),然后一起应用:

mountOptions 中的单挂载凭据优先于全局凭据,适用于跨账号或跨项目的挂载场景。

Kubernetes:凭据管理

避免将凭据直接写入 UnderFileSystem CR 的 mountOptions——它们会出现在受版本控制的 YAML 中,且每个挂载都需重复填写。以下两种方式可在集群级别统一设置凭据:

方式 A:在 AlluxioCluster CR 的 spec.properties 中设置

全局设置 UFS 凭据属性。各挂载在未指定自身凭据时继承这些属性,单挂载的 mountOptions 仍可覆盖全局设置:

方式 B:Kubernetes Secret + Pod 环境变量

将凭据存储在 Secret 中以避免提交到版本控制,然后以环境变量形式注入到 UFS 驱动读取:

包含 S3 特定属性和环境变量名称的完整示例,请参阅 在 Kubernetes 中设置凭据

管理现有挂载

挂载生效后,可用以下命令查看或移除。

  • 列出挂载:

  • 移除挂载:

挂载表存储在 etcd 中。Alluxio 组件会定期轮询 etcd 以获取最新的挂载表,因此添加和移除会自动在整个集群中传播。

通用对象存储配置

以下配置适用于所有对象存储类型(S3、OSS、BOS、COS、TOS 及 S3 兼容存储)。

请求重试策略

当对象存储返回瞬时错误时,Alluxio 会自动重试请求。以下错误码会触发重试:500502503 Slow Down504。客户端错误(4xx)不会重试。

conf/alluxio-site.properties 中或通过挂载选项配置重试行为:

支持的底层存储系统

云对象存储

存储系统
描述
指南

Amazon S3

连接到 Amazon S3 的标准指南。

Google Cloud Storage (GCS)

连接到 Google Cloud Storage 的指南。

Azure Blob Storage

连接到 Azure Blob Storage 的指南。

阿里云 OSS

连接到阿里云对象存储服务的指南。

腾讯云对象存储 (COS)

连接到腾讯云对象存储的指南。

百度对象存储 (BOS)

连接到百度云对象存储的指南。

火山引擎 TOS

连接到火山引擎对象存储的指南。

本地存储

存储系统
描述
指南

S3 兼容

用于连接到使用 S3 API 的对象存储,例如 MinIO 或 Ceph。

Hadoop 分布式文件系统 (HDFS)

连接到 HDFS 集群的标准指南。

网络附加存储 (NAS)

用于连接到集群上挂载的任何符合 POSIX 标准的文件系统,例如 NFS。

Last updated