跳过正文
  1. Posts/

Docker 大数据集群高可用部署

·642 字·4 分钟
作者
John Lee
Building things with code. Writing about tech, projects, and ideas.

Docker 大数据集群高可用部署
#

Docker Compose 编排的 32 容器全组件 HA 大数据集群,用于本地测试与学习。

架构概述
#

                    ┌─────────────────────────────────────────────────┐
                    │            Docker Bridge: bigdata-net            │
                    │              172.25.0.0/16                      │
                    ├─────────────────────────────────────────────────┤
                    │  Layer 0 (base): MySQL + ZooKeeper x3           │
                    │  Layer 1 (storage): JournalNode x3              │
                    │  Layer 2 (storage): NameNode x2 + ZKFC x2       │
                    │  Layer 3 (storage): DataNode x3                 │
                    │  Layer 4 (compute): ResourceManager x2 + NM x3  │
                    │  Layer 5 (analytics): Hive Metastore/Server2    │
                    │  Layer 6 (analytics): HBase x5 + Kafka x3       │
                    │  Layer 7 (analytics): Spark + Flink History     │
                    └─────────────────────────────────────────────────┘
组件版本HA 方案容器数
HDFS3.3.6双 NameNode + 3 JournalNode + ZKFC10
YARN3.3.6双 ResourceManager + ZK 状态存储6
ZooKeeper3.7.13 节点仲裁3
HBase2.6.4双 Master + ZK 发现5
Hive3.1.3Metastore + Server2(独立容器)2
Kafka2.8.03 Broker + ZK 协调3
Spark3.5.8History Server(YARN 模式按需提交)1
Flink1.19.1History Server(YARN 模式按需提交)1
MySQL5.71

总计:32 容器,~10-11GB 内存

前置要求
#

  • Docker Desktop 24+(Windows/Mac/Linux)
  • 16GB+ RAM(建议关闭其他大型应用)
  • 50GB+ 磁盘空间
  • 组件二进制包已缓存到 ansible/files/cache/

快速开始
#

cd docker

# 1. 构建统一镜像(首次 ~10-20分钟)
make build

# 2. 分层启动(或一键全量 make all)
make base        # Layer 0: MySQL + ZKx3
make storage     # Layer 1-3: HDFS HA
make compute     # Layer 4: YARN HA
make analytics   # Layer 5-7: Hive + HBase + Kafka + Spark/Flink

# 或一键启动
make all

# 3. 首次部署:初始化 HDFS
make init-hdfs

# 4. 验证测试
make verify          # Level 1 冒烟测试
make verify-spark    # Level 2a Spark
make verify-flink    # Level 2b Flink
make verify-ha       # Level 3 HA 故障转移

分层启动指南
#

从零开始按需启动,低内存环境可不启动全部:

层级命令服务内存
Layer 0make baseMySQL, ZKx3~1.5GB
Layer 1-3make storageJNx3, NNx2, ZKFCx2, DNx3~3.5GB
Layer 4make computeRMx2, NMx3, JobHistory~2.5GB
Layer 5-7make analyticsHivex2, HBasex5, Kafkax3, Spark/Flink Historyx2~3.5GB

全部命令参考
#

命令说明
make build构建统一镜像
make all一键全量启动
make base启动基础设施层
make storage启动 HDFS HA 存储层
make compute启动 YARN HA 计算层
make analytics启动分析层(Hive/HBase/Kafka/Spark/Flink)
make status容器资源占用
make ps容器列表
make verifyLevel 1 冒烟测试(7项)
make verify-sparkLevel 2a Spark 功能验证
make verify-flinkLevel 2b Flink 功能验证
make verify-haLevel 3 HA 故障转移测试(10项)
make init-hdfsHDFS 首次格式化+初始化
make stop反向停止所有服务
make restart重启全部
make clean清理容器和网络
make logs查看全部日志
make logs-<name>查看指定容器日志
make shell-<name>进入指定容器

验证测试
#

Level 1: 冒烟测试(7项)
#

#测试项验证内容
S1HDFS 读写写入→读取→删除
S2YARN 节点>=3 个 NM RUNNING
S3ZK 集群1 leader + 2 follower
S4Hive Metastore端口 9083 可达
S5HiveServer2端口 10000 可达
S6HBase Shellstatus 命令正常
S7Kafka E2E创建→生产→消费→删除

Level 2: Spark/Flink 功能测试(6项)#

#测试项
SP1Spark Pi(YARN cluster 模式)
SP2Spark SQL 查询
SP3Spark History Server HTTP
FL1Flink YARN Session 创建
FL2Flink WordCount 批作业
FL3Flink History Server HTTP

Level 3: HA 故障转移测试(10项)
#

#测试项故障注入
HA1NN 故障转移停 namenode-active
HA2NN 恢复启 namenode-active
HA3HDFS 容错NN 切换后读写
HA4RM 故障转移停 resourcemanager-1
HA5Spark on HARM 切换后提交
HA6Flink on HARM 切换后 Session
HA7HMaster 转移停 hbase-master-1
HA8JN 容错停 1/3 JN
HA9ZK 容错停 1/3 ZK
HA10Kafka 容错停 1/3 Broker

Web UI 访问
#

服务URL
NameNode Activehttp://localhost:9870
NameNode Standbyhttp://localhost:9871
YARN RM1http://localhost:8088
YARN RM2http://localhost:8089
JobHistoryhttp://localhost:19888
HBase Master1http://localhost:16010
HBase Master2http://localhost:16011
Spark Historyhttp://localhost:18080
Flink Historyhttp://localhost:8082

故障排查
#

容器启动失败
#

docker compose --profile <name> logs     # 查看该层日志
make logs-<container_name>               # 查看特定容器日志
make shell-<container_name>              # 进入容器排查

内存不足
#

  • 调整 .env 中 JVM 堆参数(如 NAMENODE_HEAP=128m
  • 按分层启动而非一键全量
  • 关闭 Windows 上其他大型应用

HDFS 不正常
#

make init-hdfs                           # 重新格式化(会丢失数据)
docker compose --profile storage restart # 重启存储层

端口冲突
#

修改 docker-compose.ymlports 映射(冒号左边为宿主机端口)。

与裸机/Ansible 方案的关系
#

特性Docker 方案Ansible 方案
用途本地测试/学习生产裸机部署
内存10-11GB12GB+
HA全生产级全生产级
配置独立 config/ 目录Jinja2 模板
管理Makefile + docker composeansible-playbook
网络Bridge(172.25.0.0/16)物理网卡