DolphinScheduler单机模式与YARN HA集成部署指南

一、DolphinScheduler单机部署模式解析

DolphinScheduler单机部署模式是指将所有核心组件(MasterServer、WorkerServer、ApiServer、AlertServer等)集中部署在单台物理机或虚拟机上,适用于开发测试环境或小型业务场景。这种模式具有部署简单、资源占用低、管理便捷等显著优势。

1.1 单机模式架构特点

单机部署时,所有服务进程共享同一JVM实例,通过内置的Zookeeper(嵌入式)实现服务发现和元数据管理。MasterServer负责工作流调度和状态管理,WorkerServer执行具体任务,ApiServer提供RESTful接口,AlertServer处理告警通知。这种紧耦合架构虽然降低了分布式系统的复杂性,但也对单点故障风险提出了更高要求。

1.2 适用场景与限制

  • 开发测试环境:快速搭建验证工作流逻辑
  • 小型业务系统:日均任务量<5000,资源需求<16核32G
  • 临时性项目:项目周期短,无需长期维护

需注意的三大限制:

  1. 存在单点故障风险,Master宕机将导致整个系统不可用
  2. 资源竞争可能导致任务执行延迟
  3. 扩展性受限,无法横向扩展处理能力

二、YARN HA集成架构设计

为实现高可用性,需将DolphinScheduler的任务执行层与YARN集群解耦,通过YARN HA提供资源管理的可靠性保障。这种混合架构既保留了单机部署的管理便利性,又获得了分布式资源调度的容错能力。

2.1 YARN HA核心组件

YARN HA通过以下机制实现高可用:

  • Active/Standby ResourceManager:主备RM通过ZK实现自动故障转移
  • JournalNode集群:存储RM状态变更日志,保证数据一致性
  • Zookeeper集群:提供分布式锁和领导者选举服务

典型部署架构:

  1. [DolphinScheduler单机]
  2. (REST API) [YARN HA集群]
  3. [ZK集群] ←→ [JournalNode集群]

2.2 资源调度流程优化

  1. 任务提交阶段:Worker通过YARN Client向Active RM申请资源
  2. 故障转移处理:当Active RM失效时,ZK触发Standby RM接管
  3. 任务恢复机制:已分配但未执行的Container由新RM重新调度

建议配置参数:

  1. # yarn-site.xml
  2. yarn.resourcemanager.ha.enabled=true
  3. yarn.resourcemanager.ha.rm-ids=rm1,rm2
  4. yarn.resourcemanager.hostname.rm1=rm1.example.com
  5. yarn.resourcemanager.hostname.rm2=rm2.example.com
  6. yarn.resourcemanager.zk-address=zk1:2181,zk2:2181,zk3:2181

三、详细部署实施步骤

3.1 环境准备清单

组件 版本要求 配置建议
JDK 1.8+ OpenJDK或Oracle JDK
MySQL 5.7+/8.0+ 独立实例,建议50GB+存储
Zookeeper 3.5.5+ 3节点集群,配置奇数节点
YARN 2.7.2+ HA模式,配置2个RM节点
DolphinScheduler 2.0.0+ 最新稳定版

3.2 单机部署配置要点

  1. 修改dolphinscheduler-env.sh

    1. export SPRING_PROFILES_ACTIVE=mysql
    2. export DATASOURCE_URL="jdbc:mysql://db-host:3306/dolphinscheduler?useSSL=false"
    3. export DATASOURCE_USERNAME="ds_user"
    4. export DATASOURCE_PASSWORD="secure_password"
  2. 配置worker分组(worker.properties):

    1. worker.groups=default
    2. worker.exec.threads=100
    3. worker.memory.limit=8G
    4. worker.cpu.limit=16
  3. YARN集成配置(common.properties):

    1. resource.manager.ha.enable=true
    2. resource.manager.http.address.key=yarn.resourcemanager.webapp.address
    3. resource.manager.ha.rm-ids=rm1,rm2
    4. resource.manager.hostname.rm1=rm1.example.com:8032
    5. resource.manager.hostname.rm2=rm2.example.com:8032
    6. yarn.application.status.address=http://%s:8088/ws/v1/cluster/apps/%s

3.3 HA验证测试方案

  1. 主动故障转移测试

    • 停止Active RM服务
    • 验证Standby RM在30秒内接管
    • 检查DolphinScheduler任务执行是否中断
  2. 网络分区测试

    • 模拟ZK集群网络分裂
    • 验证DolphinScheduler能否正常处理任务
    • 检查元数据一致性
  3. 资源恢复测试

    • 提交100个并发任务
    • 杀死Worker进程
    • 验证任务自动重试机制

四、性能调优与监控体系

4.1 关键参数优化

参数 默认值 推荐值 说明
master.exec.threads 100 200 调度线程数
worker.heartbeat.interval 10s 5s 心跳间隔
yarn.application.queue default high 任务队列
master.reserved.memory 1GB 4GB Master保留内存

4.2 监控指标体系

  1. 核心监控项

    • 任务调度延迟(P99<5s)
    • YARN Container分配率(>95%)
    • Worker负载均衡度(标准差<15%)
  2. 告警规则示例
    ```yaml

  • alert: “Master服务不可用”
    expr: up{service=”dolphinscheduler-master”} == 0
    for: 2m
    labels:
    severity: critical
    annotations:
    summary: “Master服务中断超过2分钟”
    ```

4.3 日志分析方案

  1. 关键日志路径

    • /opt/dolphinscheduler/logs/master.log
    • /opt/dolphinscheduler/logs/worker.log
    • /var/log/hadoop-yarn/yarn-yarn-resourcemanager-*.log
  2. 日志解析示例(ELK Stack配置):

    1. input {
    2. file {
    3. path => "/opt/dolphinscheduler/logs/*.log"
    4. start_position => "beginning"
    5. sincedb_path => "/dev/null"
    6. }
    7. }
    8. filter {
    9. grok {
    10. match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:level} %{JAVACLASS:class} - %{GREEDYDATA:message}" }
    11. }
    12. }
    13. output {
    14. elasticsearch {
    15. hosts => ["es-host:9200"]
    16. index => "dolphinscheduler-logs-%{+YYYY.MM.dd}"
    17. }
    18. }

五、常见问题解决方案

5.1 YARN集成故障排查

  1. 任务提交失败

    • 检查yarn.application.status.address配置
    • 验证RM HA状态:yarn rmadmin -getServiceState rm1
    • 查看YARN日志中的Container分配错误
  2. 资源不足问题

    • 调整yarn.scheduler.maximum-allocation-mb
    • 优化任务资源请求:ds.shell.command.memory参数
    • 增加Worker节点资源限制

5.2 单机模式性能瓶颈

  1. Master CPU过载

    • 增加master.exec.threads(不超过CPU核心数2倍)
    • 优化工作流设计,减少复杂依赖
    • 考虑拆分大型工作流为子流程
  2. Worker内存泄漏

    • 监控worker.memory.usage指标
    • 定期重启Worker服务(建议每周)
    • 升级到最新稳定版本修复已知内存问题

六、升级与扩展路径

6.1 平滑升级方案

  1. 版本兼容性矩阵
    | DolphinScheduler版本 | 推荐YARN版本 | MySQL版本 |
    |———————————|———————|—————-|
    | 2.0.x | 2.7.2-3.3.x | 5.7+ |
    | 3.0.x(预览) | 3.0.0-3.4.x | 8.0+ |

  2. 升级步骤

    • 备份MySQL数据库(mysqldump -u root -p dolphinscheduler > backup.sql
    • 停止所有DolphinScheduler服务
    • 替换二进制包并验证配置文件兼容性
    • 启动服务并监控启动日志

6.2 横向扩展建议

当单机模式无法满足需求时,可按以下顺序扩展:

  1. 独立Worker节点:将Worker服务部署到单独服务器
  2. Master集群:部署多个Master节点并配置ZK协调
  3. API服务分离:将ApiServer独立部署实现负载均衡
  4. 数据库分片:对大规模任务数据实施分库分表

七、最佳实践总结

  1. 资源隔离策略

    • 为DolphinScheduler分配专用用户(如dsuser
    • 使用cgroups限制资源使用
    • 配置ULIMIT参数:* - nofile 65536
  2. 备份恢复方案

    • 每日自动备份MySQL数据库
    • 定期验证备份文件可恢复性
    • 保留最近3个版本的二进制包
  3. 安全加固建议

    • 启用API认证(修改security.authentication
    • 配置SSL加密通信
    • 定期轮换数据库密码

通过这种单机与YARN HA的混合部署模式,开发者可以在保持管理简便性的同时,获得接近分布式系统的可靠性保障。实际部署中应根据具体业务场景调整参数配置,并建立完善的监控告警体系,确保系统长期稳定运行。