Docker 安装

本文档介绍如何在裸机 Linux 主机、EC2 实例或 Slurm 集群上使用 Docker 容器部署 Alluxio,无需 Kubernetes。

概述

架构

每个 Alluxio 组件运行在独立的 Docker 容器中,均使用 --net=host 共享宿主机网络,组件之间通过 IP 直接通信,无需配置端口映射。

本指南部署以下拓扑:

主机
运行的容器

Coordinator 节点

ETCD、Alluxio Coordinator、Prometheus、Grafana

Worker 节点(可多台)

Alluxio Worker(每台主机一个)

FUSE 客户端节点

Alluxio FUSE(每台主机一个)

制品

您将收到 Alluxio Docker 镜像的下载链接:

制品
文件名
用途

Alluxio 镜像

alluxio-enterprise-AI-3.8-15.1.2-linux-amd64-docker.tar

Coordinator、Worker 和 FUSE 的容器镜像

License

激活集群所需

平台:x86 主机使用 -linux-amd64-docker.tar,ARM 主机使用 -linux-arm64-docker.tar

Docker 镜像是单一多角色镜像——每个节点加载相同的 .tar 文件。角色(coordinator、worker、fuse)由传递给 docker run 的入口参数决定。

开始之前

在开始之前运行以下检查。跳过此步骤是部署失败的最常见原因。

在 EC2 上使用 IAM role? 在启动 EC2 实例之前将 IAM instance profile 附加到实例——无需在 Docker 运行命令中填写 access key。

安装步骤

0. 在每台主机上加载 Alluxio 镜像

每台主机(coordinator、每个 worker、FUSE 客户端)上执行:

✅ 验证:

记录确切的镜像名称和标签——每个 docker run 命令都会用到。

1. 启动 ETCD

SSH 进入 ETCD 节点并启动单节点 ETCD 集群:

<COORDINATOR_PRIVATE_IP> 替换为 coordinator 主机的私有 IP(例如 172.31.31.133)。使用私有 IP(而非主机名)以确保其他主机上的 worker 能可靠地访问 ETCD。

生产环境建议运行 3 节点 ETCD 集群以实现高可用。单节点 ETCD 适用于评估和非关键工作负载。

✅ 验证:

2. 启动 Coordinator(Coordinator 主机)

关键配置项:

配置项
说明

alluxio.license

Alluxio License 字符串

alluxio.etcd.endpoints

ETCD 端点(私有 IP + 端口 2379)

alluxio.coordinator.hostname

本主机私有 IP——worker 使用此地址注册

alluxio.mount.table.source=ETCD

挂载表存储在 ETCD 中(重启后持久保留)

✅ 验证:

前 30 秒内没有 ERROR 行表示启动正常。

3. 启动 Worker(每台 Worker 主机)

SSH 进入每台 worker 主机 并运行:

<CACHE_SIZE> 替换为用于页缓存的本地磁盘容量(例如 50GB200GB1TB)。设置为 /data/alluxio-cache 可用空间的约 80%。避免使用 /tmp——重启后会被清空,导致 worker 丢失所有缓存数据。

S3 API(可选):如需通过 S3 API 访问 Alluxio,在每个 worker 的启动命令中添加 -Dalluxio.worker.s3.api.enabled=true,这将在 worker 上启用 S3 兼容端点(端口 29998)。

JVM 大小建议 — 对于页缓存位于本地磁盘(而非 RAM)的主机,JVM 堆内存不需要很大。Alluxio 将缓存数据存储在磁盘上,而非堆内存中。起始参考值:

主机内存

-Xmx

-XX:MaxDirectMemorySize

16 GB

4g

4g

32 GB

8g

8g

64 GB

16g

16g

128 GB+

32g

32g

✅ 验证(从 coordinator 主机执行):

所有 worker 显示 ONLINE。容器启动后 worker 可能需要 10–15 秒完成注册。

4. 挂载存储

在任意能访问 coordinator 的主机上执行 alluxio mount add。完整的 UFS 配置选项请参阅底层存储

使用 IAM role 挂载 S3(EC2 上推荐):

使用 access key/secret 挂载 S3:

✅ 验证:

5. 验证数据访问

✅ 验证: 返回 S3 存储桶内容,无报错。

6. 启动 FUSE(FUSE 客户端主机)

SSH 进入 FUSE 客户端主机

创建挂载目录:

启动 FUSE 容器:

--privileged 为必需项,用于在容器内挂载文件系统,并通过 -v /mnt/alluxio:/mnt/alluxio:shared 暴露给宿主机。

✅ 验证(等待约 10 秒):

FUSE 挂载将每个 Alluxio 挂载点作为子目录暴露。/mnt/alluxio/fuse/s3/ 下的文件直接映射到 s3://<S3_BUCKET>/

测试读写:

卸载

按相反顺序在每台主机上停止并删除容器:

FUSE 客户端主机:

每台 Worker 主机:

Coordinator 主机:

持久化数据:ETCD 容器将挂载表条目存储在容器文件系统中。执行 docker rm 后挂载表条目将丢失,需重新添加。如需在 ETCD 重启后保留挂载表,可挂载 ETCD 数据目录:在 ETCD docker run 命令中添加 -v /data/etcd:/etcd-data--data-dir /etcd-data

监控(可选)

在 coordinator 主机上使用 Docker Compose 搭建 Prometheus 和 Grafana。

创建目录结构:

创建 ~/monitoring/prometheus/prometheus.yml

创建 ~/monitoring/grafana/datasource.yml

创建 ~/monitoring/compose.yaml

启动监控:

访问 Grafana:http://<COORDINATOR_PUBLIC_IP>:3000(登录:admin / grafana)。

监控文档导入 Alluxio 仪表盘 JSON。

附录

A. 故障排查

Worker 未出现在 alluxio info nodes

  1. 从 worker 主机验证 ETCD 是否可达:

    预期结果:{"health":"true"}

  2. 检查 worker 容器日志:

  3. 验证 coordinator IP 是否正确——worker 使用 alluxio.coordinator.hostname 进行注册。若该 IP 从 worker 不可达,注册会静默失败。

FUSE 容器启动后挂载不可见

  1. 验证挂载目录是否在启动容器之前已创建:

    若目录不存在,容器会成功启动但挂载会被静默跳过。

  2. 检查容器日志:

    类似 Mount point '/mnt/alluxio/fuse' does not exist 的日志行确认目录缺失。

  3. 修复后删除并重新创建容器:

容器删除后出现 Transport endpoint is not connected

FUSE 文件系统在容器退出后仍注册在内核中。手动卸载:

alluxio mount addunknown command

alluxio mount add CLI 使用具名参数。旧的位置参数语法(alluxio mount add /path s3://...)已不再支持。请使用:

B. 重启后 Worker 节点身份丢失

若 worker 主机重启,worker 容器会丢失其身份文件,并以新 worker 身份注册。旧条目在 ETCD 中以 OFFLINE 状态残留。清理方法:

Worker ID 在 alluxio info nodes 输出中显示。

C. 收集日志用于技术支持

相关文档

Last updated