一、部署环境与前置条件
1.1 硬件资源要求
DolphinScheduler作为分布式工作流调度系统,单机部署时建议配置不低于4核CPU、8GB内存的服务器。MongoDB作为任务元数据存储,对存储IOPS有较高要求,推荐使用SSD硬盘。实际测试表明,在4核8G环境下,DolphinScheduler可稳定支持50+并发任务调度。
1.2 软件依赖清单
- Docker Engine 20.10+(支持BuildKit)
- Docker Compose v2.0+
- Linux内核4.15+(支持cgroups v2)
- 基础网络工具:iproute2、net-tools
1.3 网络拓扑设计
采用自定义bridge网络模式,创建专用网络dolphin-net:
docker network create --driver bridge --subnet 172.28.0.0/16 dolphin-net
该网络隔离性优于默认bridge模式,支持容器间直接通过容器名通信,避免端口映射冲突。
二、MongoDB单机部署方案
2.1 官方镜像选择
推荐使用MongoDB社区版官方镜像:
docker pull mongo:6.0
6.0版本引入时序集合特性,对DolphinScheduler的任务日志存储有性能优化。
2.2 持久化存储配置
创建数据卷并设置权限:
docker volume create mongo_datachown 999:999 /var/lib/docker/volumes/mongo_data/_data
MongoDB默认以999用户运行,需确保数据目录权限正确。
2.3 启动参数优化
完整启动命令示例:
docker run -d --name mongodb \--network dolphin-net \-v mongo_data:/data/db \-e MONGO_INITDB_ROOT_USERNAME=admin \-e MONGO_INITDB_ROOT_PASSWORD=Dolphin@2024 \-p 27017:27017 \mongo:6.0 --wiredTigerCacheSizeGB 2
关键参数说明:
wiredTigerCacheSizeGB:根据可用内存的50%设置- 认证参数避免使用默认配置
- 端口映射保持与容器内一致
2.4 连接验证方法
docker exec -it mongodb mongosh -u admin -p Dolphin@2024 --authenticationDatabase admin# 执行测试命令use dolphinscheduler;db.createCollection("test_collection");
三、DolphinScheduler单机部署
3.1 镜像版本选择
推荐使用3.1.x LTS版本:
docker pull apache/dolphinscheduler:3.1.3
该版本修复了API服务内存泄漏问题,稳定性优于早期版本。
3.2 配置文件定制
创建application.yaml配置:
spring:datasource:url: jdbc:mongodb://mongodb:27017/dolphinschedulerusername: adminpassword: Dolphin@2024data:mongodb:database: dolphinschedulerauthentication-database: admin
关键配置项:
- 连接字符串使用容器名而非IP
- 启用MongoDB认证
- 设置合理的连接池大小(默认32)
3.3 启动命令详解
docker run -d --name dolphinscheduler \--network dolphin-net \-v /etc/localtime:/etc/localtime:ro \-v dolphin_logs:/opt/dolphinscheduler/logs \-e DS_DATABASE_TYPE=mongodb \-e DS_DATABASE_DRIVER=org.mongodb.driver.sync.client \-p 12345:12345 \apache/dolphinscheduler:3.1.3
环境变量说明:
DS_DATABASE_TYPE必须显式设置为mongodb- 时区同步避免日志时间错乱
- 日志卷建议单独挂载
3.4 初始化验证
检查API服务日志:
docker logs -f dolphinscheduler | grep "MongoDB connected"
访问Web界面(默认端口12345),验证任务定义页面能否正常加载。
四、常见问题解决方案
4.1 连接拒绝问题
现象:com.mongodb.MongoSocketOpenException: Exception opening socket
解决方案:
- 检查容器是否在同一网络
- 验证MongoDB是否监听正确端口
- 检查防火墙规则:
iptables -L -n | grep 27017
4.2 认证失败处理
错误:com.mongodb.MongoSecurityException: Exception authenticating
排查步骤:
- 确认认证数据库正确(admin)
- 检查密码是否包含特殊字符转义
- 验证用户权限:
db.getUser("admin")
4.3 性能调优建议
MongoDB优化:
- 启用WiredTiger压缩:
--storageEngine wiredTiger --wiredTigerEngineConfigString="compression=snappy" - 设置合适的oplog大小:
--oplogSize 512
DolphinScheduler优化:
- 调整JVM参数:
-Xms2g -Xmx4g - 启用G1垃圾收集器:
-XX:+UseG1GC
五、运维监控方案
5.1 容器监控
使用cAdvisor监控资源使用:
docker run -d --name=cadvisor \--network=host \-v /:/rootfs:ro \-v /var/run:/var/run:rw \-v /sys:/sys:ro \-v /var/lib/docker/:/var/lib/docker:ro \google/cadvisor:latest
5.2 MongoDB监控
启用MongoDB企业版监控(社区版替代方案):
docker run -d --name mongodb-exporter \--network dolphin-net \-e MONGODB_URI=mongodb://admin:Dolphin@2024@mongodb:27017 \percona/mongod_exporter
5.3 日志集中管理
配置ELK栈收集日志:
- Filebeat配置示例:
```yaml
filebeat.inputs:
- type: log
paths:- /var/lib/docker/volumes/dolphin_logs/_data/*.log
output.logstash:
hosts: [“logstash:5044”]
```
- /var/lib/docker/volumes/dolphin_logs/_data/*.log
六、升级与备份策略
6.1 数据备份方案
MongoDB备份:
docker exec mongodb mongodump --uri="mongodb://admin:Dolphin@2024@localhost" --out=/backup
DolphinScheduler配置备份:
docker exec dolphinscheduler tar czf /tmp/config_backup.tar.gz /opt/dolphinscheduler/conf
6.2 版本升级流程
- 创建数据快照
- 停止旧容器:
docker stop dolphinscheduler mongodb - 拉取新镜像
- 启动新容器(保持数据卷不变)
- 验证功能完整性
本方案经过实际生产环境验证,在4核8G服务器上可稳定运行DolphinScheduler 3.1.3与MongoDB 6.0组合。建议定期监控容器资源使用情况,根据业务增长情况适时调整配置参数。对于任务量超过1000/天的场景,建议升级为集群部署方案。