logo

Docker单机部署DolphinScheduler与MongoDB:完整指南与最佳实践

作者:demo2025.09.12 11:09浏览量:0

简介:本文详细介绍如何在单机Docker环境中部署DolphinScheduler工作流引擎与MongoDB数据库,涵盖环境准备、镜像选择、配置优化及故障排查等全流程,提供可复制的部署方案与性能调优建议。

一、环境准备与前置条件

1.1 硬件资源要求

单机部署DolphinScheduler与MongoDB时,建议配置不低于4核CPU、8GB内存的物理机或虚拟机。存储空间需预留20GB以上用于数据库文件与日志存储,SSD硬盘可显著提升MongoDB写入性能。Docker运行时需分配至少3GB内存,避免因资源竞争导致容器OOM。

1.2 软件依赖检查

确保主机已安装Docker Engine(版本≥20.10)与Docker Compose(版本≥1.29)。通过docker --versiondocker-compose --version验证安装。若使用Linux系统,需配置内核参数vm.max_map_count=262144以支持Elasticsearch(若DolphinScheduler集成ES)。

1.3 网络配置要点

Docker默认使用bridge网络模式,需确保主机防火墙开放以下端口:

  • MongoDB:27017(主端口)
  • DolphinScheduler API:12345
  • DolphinScheduler Master:25333
  • DolphinScheduler Worker:25334

建议通过docker network create dolphin-net创建自定义网络,实现容器间DNS解析与隔离通信。

二、MongoDB单机部署方案

2.1 官方镜像选择

推荐使用MongoDB官方镜像mongo:6.0,该版本提供稳定的事务支持与WiredTiger存储引擎。通过以下命令快速启动:

  1. docker run -d --name mongodb \
  2. -p 27017:27017 \
  3. -v /data/mongo:/data/db \
  4. --restart unless-stopped \
  5. mongo:6.0 --auth

参数说明:

  • -v挂载数据卷实现持久化
  • --auth启用身份验证(生产环境必需)
  • --restart策略确保容器异常退出后自动重启

2.2 安全配置实践

进入容器创建管理员账户:

  1. docker exec -it mongodb mongosh
  2. use admin
  3. db.createUser({
  4. user: "admin",
  5. pwd: "SecurePassword123!",
  6. roles: ["root"]
  7. })

修改DolphinScheduler连接配置时,需在application.yaml中指定认证信息:

  1. spring:
  2. datasource:
  3. url: jdbc:mongodb://mongodb:27017/ds_meta?authSource=admin
  4. username: admin
  5. password: SecurePassword123!

2.3 性能调优建议

针对工作流引擎场景,优化MongoDB配置:

  • 修改/etc/mongod.conf设置wiredTiger.engineConfig.cacheSizeGB=2(占总内存25%)
  • 创建索引加速查询:
    1. use ds_meta
    2. db.process_definition.createIndex({code: 1}, {unique: true})
    3. db.task_instance.createIndex({state: 1, start_time: -1})

三、DolphinScheduler单机部署流程

3.1 镜像版本选择

推荐使用apache/dolphinscheduler:3.1.7稳定版本,该版本修复了任务依赖解析的并发问题。通过Docker Compose部署可简化网络配置:

  1. version: '3.8'
  2. services:
  3. dolphinscheduler:
  4. image: apache/dolphinscheduler:3.1.7
  5. environment:
  6. DATABASE_HOST: mongodb
  7. DATABASE_PORT: 27017
  8. DS_AUTH_USERNAME: admin
  9. DS_AUTH_PASSWORD: SecurePassword123!
  10. ports:
  11. - "12345:12345"
  12. - "25333:25333"
  13. - "25334:25334"
  14. depends_on:
  15. - mongodb

3.2 核心组件配置

修改dolphinscheduler-env.sh设置JVM参数:

  1. export JAVA_OPT="-Xms1024m -Xmx2048m -XX:+UseG1GC"

针对MongoDB适配器,需在common.properties中配置:

  1. spring.data.mongodb.uri=mongodb://admin:SecurePassword123!@mongodb:27017/ds_meta

3.3 初始化数据库

首次启动需执行初始化脚本:

  1. docker exec -it dolphinscheduler /opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start init-database

验证初始化结果:

  1. docker exec -it mongodb mongosh ds_meta --eval "db.getCollectionNames()"

应返回["process_definition", "task_instance", "schedule"]等集合。

四、集成部署优化

4.1 容器资源限制

通过--cpus--memory参数限制资源使用:

  1. docker run -d --name dolphinscheduler \
  2. --cpus=2.5 \
  3. --memory=3g \
  4. --memory-swap=4g \
  5. apache/dolphinscheduler:3.1.7

4.2 日志管理方案

配置logback-spring.xml实现日志滚动:

  1. <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
  2. <file>/opt/dolphinscheduler/logs/dolphinscheduler.log</file>
  3. <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
  4. <maxFileSize>100MB</maxFileSize>
  5. <maxHistory>30</maxHistory>
  6. </rollingPolicy>
  7. </appender>

4.3 监控告警集成

通过Prometheus采集Docker指标:

  1. # docker-compose.yml片段
  2. prometheus:
  3. image: prom/prometheus
  4. ports:
  5. - "9090:9090"
  6. volumes:
  7. - ./prometheus.yml:/etc/prometheus/prometheus.yml

配置Grafana监控面板,重点关注:

  • MongoDB连接数(mongostat -n 1
  • DolphinScheduler任务队列积压量
  • 容器CPU使用率(docker stats

五、故障排查指南

5.1 常见连接问题

现象:DolphinScheduler日志报错Connection refused to mongodb:27017
解决方案

  1. 检查Docker网络:docker network inspect dolphin-net
  2. 验证MongoDB容器状态:docker ps -a | grep mongodb
  3. 测试容器内连通性:docker exec -it dolphinscheduler ping mongodb

5.2 性能瓶颈分析

使用docker stats监控资源使用,当Worker容器CPU持续>80%时:

  1. 调整Worker并发数:修改worker.properties中的worker.exec.threads=100
  2. 优化MongoDB查询:通过mongotop分析慢查询
  3. 升级硬件配置或拆分服务到多节点

5.3 数据备份方案

实施MongoDB定期备份:

  1. docker exec mongodb mongodump --out /backup/$(date +%Y%m%d) \
  2. --uri "mongodb://admin:SecurePassword123!@localhost:27017"

配置Cron任务每日凌晨执行,备份文件通过-v /backup:/backup挂载到宿主机。

六、进阶部署建议

6.1 多版本共存方案

通过不同网络命名空间实现:

  1. docker network create dolphin-v3
  2. docker network create dolphin-v2
  3. # 启动v3版本
  4. docker run -d --name ds-v3 --network dolphin-v3 ...
  5. # 启动v2版本
  6. docker run -d --name ds-v2 --network dolphin-v2 ...

6.2 灰度发布策略

  1. 在测试环境部署新版本容器
  2. 通过Nginx反向代理分流50%流量:
    1. upstream dolphinscheduler {
    2. server ds-v2:12345 weight=50;
    3. server ds-v3:12345 weight=50;
    4. }
  3. 监控错误率,逐步调整权重至100%

6.3 混合架构设计

对于高并发场景,建议:

  • MongoDB部署为副本集(1主2从)
  • DolphinScheduler拆分为独立Master/Worker节点
  • 引入Redis作为分布式锁服务

通过以上方案,可在单机环境实现DolphinScheduler与MongoDB的高效稳定运行,为后续集群扩展奠定基础。实际部署时需根据具体业务场景调整参数配置,并建立完善的监控告警体系。

相关文章推荐

发表评论