1. 高可用集群架构设计要点
第一次接触DolphinScheduler集群部署时,最让我头疼的就是如何设计真正具备容错能力的架构。经过多个生产环境的实践验证,我总结出几个关键设计原则:
多Master防单点故障是基础中的基础。在3.2.0版本中,建议至少配置2个Master节点,且分布在不同的物理服务器上。我遇到过因为单Master宕机导致整个调度系统瘫痪的情况,后来改成双Master+ZooKeeper选主机制后,即使一个Master挂掉,另一个能立即接管工作,业务完全无感知。
Worker资源组划分直接影响任务执行效率。建议根据服务器性能差异划分不同资源组,比如将高性能服务器划为"GPU组"处理机器学习任务,普通服务器作为"常规组"。配置方法是在install_env.sh中设置:
workers=${workers:-"hadoop31:GPU,hadoop32:default,hadoop33:default"}注册中心的选择也很关键。ZooKeeper集群建议3节点起步,且不要与Master部署在同一主机。有次故障就是因为ZK和Master同机,服务器宕机后连选主都做不到。配置示例:
export REGISTRY_ZOOKEEPER_CONNECT_STRING=hadoop31:2181,hadoop32:2181,hadoop33:21812. 生产环境前置检查清单
在真正执行安装前,我会按照这个检查表逐项确认:
系统资源方面:
- 每台服务器内存建议≥8GB(Master节点尤其重要)
- /opt目录空间≥50GB(实测DS+日志一年消耗约30GB)
- 系统时间必须同步!曾因0.5秒时间差导致任务触发异常
依赖组件版本:
- MySQL 5.7+或PostgreSQL 9.6+(注意MySQL 8需要对应驱动)
- JDK 1.8+(推荐OpenJDK 11)
- ZooKeeper 3.8+(老版本有连接泄漏问题)
关键配置检查:
# 时间同步验证 chronyc tracking | grep "Leap status" # 免密登录测试 su dolphinscheduler ssh hadoop32 date3. 数据库配置的隐藏陷阱
元数据库配置不当是新手最容易踩的坑。这里分享几个血泪教训:
字符集问题:一定要用utf8mb4而非utf8,否则中文字段会乱码。创建数据库时应:
CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;连接池配置:生产环境建议调整datasource参数:
export SPRING_DATASOURCE_URL="jdbc:mysql://192.168.0.31:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&failOverReadOnly=false&maxReconnects=10"驱动兼容性:MySQL 8.x必须使用对应版本的connector-j,我遇到过8.0.16驱动连8.0.25数据库报错的情况。正确的放置位置是:
cp mysql-connector-j-8.0.28.jar api-server/libs/ cp mysql-connector-j-8.0.28.jar alert-server/libs/ ...4. 配置文件深度定制技巧
经过多次调优,这几个配置项对稳定性影响最大:
Master容错配置:
# 每个Master一次获取的任务数(根据CPU核心数调整) export MASTER_FETCH_COMMAND_NUM=16 # 心跳超时时间(网络不稳定时适当调大) export MASTER_HEARTBEAT_INTERVAL=30Worker内存控制: 在worker-server/conf/application.yaml中添加:
server: port: 1234 max-http-header-size: 256KB spring: application: name: worker-server task: execution: pool: core-size: 50 # CPU密集型任务调小 max-size: 200 # IO密集型可增大 queue-capacity: 500 # 根据内存调整报警服务优化: alert-server/conf/alert.properties中建议:
alert.max.retry=3 alert.retry.interval=10000 mail.smtp.connectiontimeout=50005. 部署后的关键验证步骤
安装完成不是终点,这些验证步骤帮你避开99%的坑:
服务健康检查:
# 查看Master选举状态 curl http://192.168.0.31:5678/actuator/health # 检查Worker线程池 curl http://192.168.0.33:1234/actuator/metrics/executor.pool.size元数据完整性验证: 登录MySQL执行:
SELECT COUNT(*) FROM t_ds_process_definition; -- 正常应返回0(新环境)或已有流程数跨节点任务测试: 创建测试工作流时:
- 选择"Shell任务"
- 在脚本中写入:
hostname;free -h - 指定资源组为"GPU"
- 查看输出是否在正确节点执行
6. 日常运维必备命令
这些命令都是我每天在用的运维利器:
服务状态速查:
# 查看Master节点角色(Leader/Follower) ps -ef | grep MasterServer | grep -v grep # 检查Worker负载 tail -f worker-server/logs/worker.log | grep "TaskExecutionContext"日志分析技巧:
# 实时监控API异常 tail -f api-server/logs/api-server.log | grep -E "ERROR|Exception" # 统计任务失败原因 grep "ProcessInstance.*failed" master-server/logs/master.log | awk -F'failed' '{print $2}' | sort | uniq -c紧急恢复方案: 当ZK连接异常时:
- 先停止所有服务
- 清理ZK节点:
zkCli.sh rmr /dolphinscheduler- 重新初始化数据库
- 按顺序启动服务(ZK→Master→Worker→API)
7. 性能调优实战经验
根据集群规模不同,我总结出这些黄金配置:
小型集群(<50节点):
# Master配置 export MASTER_EXEC_THREADS=50 export MASTER_EXEC_TASK_NUM=20 # Worker配置 export WORKER_EXEC_THREADS=100中型集群(50-200节点):
# 需要调整JVM参数 export MASTER_JAVA_OPTS="-Xms4G -Xmx8G -XX:+UseG1GC" export WORKER_JAVA_OPTS="-Xms8G -Xmx16G -XX:MaxGCPauseMillis=200"大型集群注意事项:
- 需要分业务线设置不同租户
- 建议启用Hadoop YARN集成
- 必须配置数据库读写分离
记得每次调优后执行:
# 动态刷新部分配置 curl -X POST http://192.168.0.31:12345/dolphinscheduler/actuator/refresh8. 监控告警体系搭建
没有监控的集群就像盲人骑马,我的监控方案包含:
基础监控项:
- Master存活状态(通过5678端口检测)
- Worker任务队列积压数
- DB连接池使用率
- ZK节点数变化
Prometheus配置示例:
scrape_configs: - job_name: 'ds-master' metrics_path: '/actuator/prometheus' static_configs: - targets: ['192.168.0.31:5678','192.168.0.32:5678'] - job_name: 'ds-worker' static_configs: - targets: ['192.168.0.31:1234','192.168.0.32:1234']关键告警规则:
groups: - name: DS-Alerts rules: - alert: MasterDown expr: up{job="ds-master"} == 0 for: 1m - alert: TaskQueueFull expr: ds_task_queue_size > 1000 labels: severity: critical9. 与大数据生态集成
Hadoop集成要点:
- 在dolphinscheduler_env.sh配置:
export HADOOP_HOME=/opt/hadoop-3.3.4 export HADOOP_CONF_DIR=/etc/hadoop/conf- 将core-site.xml/hdfs-site.xml复制到:
cp *.xml api-server/conf/ cp *.xml worker-server/conf/Hive集成技巧:
export HIVE_HOME=/opt/hive-3.1.2 export PATH=$HIVE_HOME/bin:$PATH注意需要在所有Worker节点安装Hive客户端,遇到过因为Hive版本不一致导致的SQL执行失败。
Spark集成陷阱:
# spark-defaults.conf中必须配置 spark.driver.extraJavaOptions=-XX:+UseG1GC spark.yarn.am.extraJavaOptions=-XX:+UseG1GC曾经因为GC配置不当导致Spark任务占用Worker大量内存。
10. 灾备与升级策略
数据备份方案:
# 每日备份元数据 mysqldump -h192.168.0.31 -udolphinscheduler -p dolphinscheduler > /backup/ds_meta_$(date +%F).sql # 备份关键配置文件 tar czf /backup/ds_conf_$(date +%F).tgz install_env.sh dolphinscheduler_env.sh平滑升级步骤:
- 停止所有服务
- 备份数据库和配置
- 执行schema升级:
./tools/bin/upgrade-schema.sh- 逐节点替换二进制文件
- 按顺序启动服务
回滚应急预案:
- 保留最近3个版本的安装包
- 记录每个版本的数据库schema变更
- 准备回滚SQL脚本(特别是ALTER TABLE语句)