DolphinScheduler-3.2.0高可用集群部署与生产环境配置实战
1. 高可用集群架构设计要点第一次接触DolphinScheduler集群部署时最让我头疼的就是如何设计真正具备容错能力的架构。经过多个生产环境的实践验证我总结出几个关键设计原则多Master防单点故障是基础中的基础。在3.2.0版本中建议至少配置2个Master节点且分布在不同的物理服务器上。我遇到过因为单Master宕机导致整个调度系统瘫痪的情况后来改成双MasterZooKeeper选主机制后即使一个Master挂掉另一个能立即接管工作业务完全无感知。Worker资源组划分直接影响任务执行效率。建议根据服务器性能差异划分不同资源组比如将高性能服务器划为GPU组处理机器学习任务普通服务器作为常规组。配置方法是在install_env.sh中设置workers${workers:-hadoop31:GPU,hadoop32:default,hadoop33:default}注册中心的选择也很关键。ZooKeeper集群建议3节点起步且不要与Master部署在同一主机。有次故障就是因为ZK和Master同机服务器宕机后连选主都做不到。配置示例export REGISTRY_ZOOKEEPER_CONNECT_STRINGhadoop31:2181,hadoop32:2181,hadoop33:21812. 生产环境前置检查清单在真正执行安装前我会按照这个检查表逐项确认系统资源方面每台服务器内存建议≥8GBMaster节点尤其重要/opt目录空间≥50GB实测DS日志一年消耗约30GB系统时间必须同步曾因0.5秒时间差导致任务触发异常依赖组件版本MySQL 5.7或PostgreSQL 9.6注意MySQL 8需要对应驱动JDK 1.8推荐OpenJDK 11ZooKeeper 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_URLjdbc:mysql://192.168.0.31:3306/dolphinscheduler?useUnicodetruecharacterEncodingUTF-8useSSLfalseautoReconnecttruefailOverReadOnlyfalsemaxReconnects10驱动兼容性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_NUM16 # 心跳超时时间网络不稳定时适当调大 export MASTER_HEARTBEAT_INTERVAL30Worker内存控制 在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.retry3 alert.retry.interval10000 mail.smtp.connectiontimeout50005. 部署后的关键验证步骤安装完成不是终点这些验证步骤帮你避开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 -Ffailed {print $2} | sort | uniq -c紧急恢复方案 当ZK连接异常时先停止所有服务清理ZK节点zkCli.sh rmr /dolphinscheduler重新初始化数据库按顺序启动服务ZK→Master→Worker→API7. 性能调优实战经验根据集群规模不同我总结出这些黄金配置小型集群50节点# Master配置 export MASTER_EXEC_THREADS50 export MASTER_EXEC_TASK_NUM20 # Worker配置 export WORKER_EXEC_THREADS100中型集群50-200节点# 需要调整JVM参数 export MASTER_JAVA_OPTS-Xms4G -Xmx8G -XX:UseG1GC export WORKER_JAVA_OPTS-Xms8G -Xmx16G -XX:MaxGCPauseMillis200大型集群注意事项需要分业务线设置不同租户建议启用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{jobds-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语句