简介:本文详细介绍如何在单机Docker环境中部署DolphinScheduler工作流引擎与MongoDB数据库,涵盖环境准备、镜像选择、配置优化及故障排查等全流程,提供可复制的部署方案与性能调优建议。
单机部署DolphinScheduler与MongoDB时,建议配置不低于4核CPU、8GB内存的物理机或虚拟机。存储空间需预留20GB以上用于数据库文件与日志存储,SSD硬盘可显著提升MongoDB写入性能。Docker运行时需分配至少3GB内存,避免因资源竞争导致容器OOM。
确保主机已安装Docker Engine(版本≥20.10)与Docker Compose(版本≥1.29)。通过docker --version与docker-compose --version验证安装。若使用Linux系统,需配置内核参数vm.max_map_count=262144以支持Elasticsearch(若DolphinScheduler集成ES)。
Docker默认使用bridge网络模式,需确保主机防火墙开放以下端口:
建议通过docker network create dolphin-net创建自定义网络,实现容器间DNS解析与隔离通信。
推荐使用MongoDB官方镜像mongo:6.0,该版本提供稳定的事务支持与WiredTiger存储引擎。通过以下命令快速启动:
docker run -d --name mongodb \-p 27017:27017 \-v /data/mongo:/data/db \--restart unless-stopped \mongo:6.0 --auth
参数说明:
-v挂载数据卷实现持久化--auth启用身份验证(生产环境必需)--restart策略确保容器异常退出后自动重启进入容器创建管理员账户:
docker exec -it mongodb mongoshuse admindb.createUser({user: "admin",pwd: "SecurePassword123!",roles: ["root"]})
修改DolphinScheduler连接配置时,需在application.yaml中指定认证信息:
spring:datasource:url: jdbc:mongodb://mongodb:27017/ds_meta?authSource=adminusername: adminpassword: SecurePassword123!
针对工作流引擎场景,优化MongoDB配置:
/etc/mongod.conf设置wiredTiger.engineConfig.cacheSizeGB=2(占总内存25%)
use ds_metadb.process_definition.createIndex({code: 1}, {unique: true})db.task_instance.createIndex({state: 1, start_time: -1})
推荐使用apache/dolphinscheduler:3.1.7稳定版本,该版本修复了任务依赖解析的并发问题。通过Docker Compose部署可简化网络配置:
version: '3.8'services:dolphinscheduler:image: apache/dolphinscheduler:3.1.7environment:DATABASE_HOST: mongodbDATABASE_PORT: 27017DS_AUTH_USERNAME: adminDS_AUTH_PASSWORD: SecurePassword123!ports:- "12345:12345"- "25333:25333"- "25334:25334"depends_on:- mongodb
修改dolphinscheduler-env.sh设置JVM参数:
export JAVA_OPT="-Xms1024m -Xmx2048m -XX:+UseG1GC"
针对MongoDB适配器,需在common.properties中配置:
spring.data.mongodb.uri=mongodb://admin:SecurePassword123!@mongodb:27017/ds_meta
首次启动需执行初始化脚本:
docker exec -it dolphinscheduler /opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start init-database
验证初始化结果:
docker exec -it mongodb mongosh ds_meta --eval "db.getCollectionNames()"
应返回["process_definition", "task_instance", "schedule"]等集合。
通过--cpus与--memory参数限制资源使用:
docker run -d --name dolphinscheduler \--cpus=2.5 \--memory=3g \--memory-swap=4g \apache/dolphinscheduler:3.1.7
配置logback-spring.xml实现日志滚动:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/opt/dolphinscheduler/logs/dolphinscheduler.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy></appender>
通过Prometheus采集Docker指标:
# docker-compose.yml片段prometheus:image: prom/prometheusports:- "9090:9090"volumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml
配置Grafana监控面板,重点关注:
mongostat -n 1)docker stats)现象:DolphinScheduler日志报错Connection refused to mongodb:27017
解决方案:
docker network inspect dolphin-netdocker ps -a | grep mongodbdocker exec -it dolphinscheduler ping mongodb使用docker stats监控资源使用,当Worker容器CPU持续>80%时:
worker.properties中的worker.exec.threads=100mongotop分析慢查询实施MongoDB定期备份:
docker exec mongodb mongodump --out /backup/$(date +%Y%m%d) \--uri "mongodb://admin:SecurePassword123!@localhost:27017"
配置Cron任务每日凌晨执行,备份文件通过-v /backup:/backup挂载到宿主机。
通过不同网络命名空间实现:
docker network create dolphin-v3docker network create dolphin-v2# 启动v3版本docker run -d --name ds-v3 --network dolphin-v3 ...# 启动v2版本docker run -d --name ds-v2 --network dolphin-v2 ...
upstream dolphinscheduler {server ds-v2:12345 weight=50;server ds-v3:12345 weight=50;}
对于高并发场景,建议:
通过以上方案,可在单机环境实现DolphinScheduler与MongoDB的高效稳定运行,为后续集群扩展奠定基础。实际部署时需根据具体业务场景调整参数配置,并建立完善的监控告警体系。