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> 替换为用于页缓存的本地磁盘容量(例如 50GB、200GB、1TB)。设置为 /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 数据目录:在 ETCDdocker 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 中
从 worker 主机验证 ETCD 是否可达:
预期结果:
{"health":"true"}检查 worker 容器日志:
验证 coordinator IP 是否正确——worker 使用
alluxio.coordinator.hostname进行注册。若该 IP 从 worker 不可达,注册会静默失败。
FUSE 容器启动后挂载不可见
验证挂载目录是否在启动容器之前已创建:
若目录不存在,容器会成功启动但挂载会被静默跳过。
检查容器日志:
类似
Mount point '/mnt/alluxio/fuse' does not exist的日志行确认目录缺失。修复后删除并重新创建容器:
容器删除后出现 Transport endpoint is not connected
FUSE 文件系统在容器退出后仍注册在内核中。手动卸载:
alluxio mount add 报 unknown command
alluxio mount add CLI 使用具名参数。旧的位置参数语法(alluxio mount add /path s3://...)已不再支持。请使用:
B. 重启后 Worker 节点身份丢失
若 worker 主机重启,worker 容器会丢失其身份文件,并以新 worker 身份注册。旧条目在 ETCD 中以 OFFLINE 状态残留。清理方法:
Worker ID 在 alluxio info nodes 输出中显示。
C. 收集日志用于技术支持
相关文档
Amazon S3 UFS — S3 凭据和配置选项
POSIX API (FUSE) — FUSE 挂载选项和调优
S3 API — 使用 Alluxio S3 兼容端点
监控 — Grafana 仪表盘导入和指标参考
Last updated