基于 Rainbond 一键部署 Apache DolphinScheduler 高可用集群:从应用到源码的完整实践指南
适用场景:本文面向不熟悉 Kubernetes、容器化等复杂技术的用户,讲解如何通过 Rainbond 云原生应用管理平台在 K8s 上一键部署高可用的 Apache DolphinScheduler 集群,并完成节点伸缩、配置修改、Python 3 支持与 Hadoop/Spark/DataX 大数据组件接入。读完本文,你将掌握从应用市场安装、拓扑可视化管理、Worker 横向扩容到大数据生态集成的完整实战路径,并能结合源码理解其底层工作机制。
本文内容以仓库内官方文档 rainbond.md(中文版见 docs/docs/zh/guide/integration/rainbond.md)为核心,结合 DolphinScheduler 源码进行原理级补充。Rainbond 是一款云原生应用管理平台,它把 Kubernetes 的能力封装为可视化操作,用户无需直接面对 Pod、Deployment、Service 等概念,即可获得生产级的容器编排能力——这正是 DolphinScheduler 通过 Rainbond 一键部署的核心价值。
一、前置条件:一个可用的 Rainbond 平台
使用本文方案的前提是已经具备一套可访问的 Rainbond 云原生应用管理平台。Rainbond 官方提供了快速安装指引(见官方文档 "Rainbond Quick install"),常见安装方式包括:
- 在已有 Kubernetes 集群上通过 Helm 或安装脚本部署 Rainbond 控制台;
- 在单机上以 Docker 方式拉起一个最小化的 Rainbond 演示环境。
安装完成后,你会获得 Rainbond 的 Web 控制台地址与管理员账号。平台就绪后即可进入下一节的一键部署流程。
为什么选择 Rainbond 而不是直接操作 K8s? 从 DolphinScheduler 官方部署形态看,项目同时维护了 Kubernetes Helm Chart 与 Docker Compose 两套部署资产。Helm 方案功能完整但对使用者的 K8s 熟练度有要求;而 Rainbond 将"选择集群、选择应用、选择版本、点击安装"这一系列动作封装为图形化流程,把 Helm/原生 YAML 的复杂度收敛到按钮之下,显著降低了运维门槛。
二、DolphinScheduler 集群一键部署
2.1 从开源应用商店搜索并安装
登录 Rainbond 控制台后,按以下路径进入应用市场:
平台管理 → 应用市场 → 开源应用商店
在应用商店中搜索关键字 dolphinscheduler,即可找到 DolphinScheduler 应用,如下图所示:
点击应用右侧的 安装 按钮,进入应用安装页面。安装页面需要填写以下四项信息:
| 选择项 | 说明 |
|---|---|
| 团队名称 | 用户自建的工作空间,以命名空间(namespace)隔离 |
| 集群名称 | 选择 DolphinScheduler 被部署到哪一个 K8s 集群 |
| 选择应用 | 选择 DolphinScheduler 被部署到哪一个应用,一个应用内可包含若干相互关联的组件 |
| 应用版本 | 选择 DolphinScheduler 的版本 |
填写完成后点击 确定,系统即开始安装,并自动跳转至应用视图:
2.2 等待安装完成并查看拓扑
安装过程通常需要几分钟时间。安装完成后,应用视图会以拓扑图的形式展示 DolphinScheduler 各服务组件(API、Master、Worker、Alert 等)及其依赖关系:
结合 docker-compose.yml 可以看到,DolphinScheduler 集群由 dolphinscheduler-api、dolphinscheduler-master、dolphinscheduler-worker、dolphinscheduler-alert 等独立服务构成,并依赖 PostgreSQL(元数据库)与 ZooKeeper(注册与调度协调)两个基础组件。Rainbond 的拓扑图正是对这一架构的可视化映射,组件之间的连线即服务依赖关系。
2.3 访问 DolphinScheduler-API
点击应用内的 访问 按钮,即可通过 Rainbond 默认提供的域名访问 DolphinScheduler-API 组件,进入 DolphinScheduler Web UI。
默认登录账号密码为:
- 用户名:
admin - 密码:
dolphinscheduler123
提示:生产环境首次登录后请务必修改默认密码。默认凭据同时出现在仓库 README_zh_CN.md 的快速上手章节中,属于公开的初始口令,不应长期保留。
三、API / Master / Worker 节点伸缩与高可用
DolphinScheduler 的 API、Master、Worker 三类组件均支持横向伸缩(Scale)为多个实例,多实例共同承担负载即可保证整个集群的高可用性。其高可用能力有明确的架构支撑:
- Master 通过注册中心(ZooKeeper 等,见 dolphinscheduler-registry)完成主备选举与容错切换;
- Worker 以分布式的方式注册自身能力,Master 负责任务的分配与调度,多个 Worker 并发执行任务(相关逻辑可参考 dolphinscheduler-master 与 dolphinscheduler-worker 模块源码)。
在 Rainbond 中伸缩操作非常直观。以 Worker 为例:
- 进入 Worker 组件;
- 打开 伸缩 页面;
- 设置实例数量(例如从 1 调整为 3),保存后 Rainbond 会自动创建对应数量的实例并接入负载均衡。
如何验证伸缩是否生效? 进入 DolphinScheduler Web UI 的 监控中心 → Worker 页面,可以看到当前注册在线的所有 Worker 节点及其详细状态(主机、端口、心跳等):
从源码看 Worker 注册机制:Worker 在启动时会向注册中心注册自己的地址与能力信息,Master 通过注册中心发现可用 Worker 并执行任务分发。因此每新增一个 Worker 实例,它都会自动出现在监控中心的节点列表中,无需人工登记——这就是"设置实例数即完成扩容"这一体验背后的实现原理。
四、配置文件:API 与 Worker 共用 common.properties
DolphinScheduler 的 API 与 Worker 服务共用同一份配置文件 /opt/dolphinscheduler/conf/common.properties。修改配置时,只需修改 API 服务的那一份,即可同步影响 Worker 服务。
这一设计可以结合 Docker 镜像结构理解:以 worker-server.dockerfile 为例,镜像将二进制发布包解压至 /opt/dolphinscheduler 目录(ENV DOLPHINSCHEDULER_HOME=/opt/dolphinscheduler),配置目录正是 $DOLPHINSCHEDULER_HOME/conf。在 Rainbond 部署中,API 与 Worker 通过共享配置卷或配置同步机制保持 common.properties 一致,因此只需维护 API 侧的一份配置。
常见的可配置项包括:
- 资源相关:本地资源存储路径、HDFS/S3 等远端存储地址;
- 注册中心相关:ZooKeeper 连接串等(也可通过环境变量覆盖);
- 任务相关:任务日志保留策略、任务执行相关默认参数等。
实操建议:修改配置后需要重启对应组件(或触发 Rainbond 的滚动更新)使配置生效;修改前建议先在测试环境验证,避免影响线上任务。
五、让 Worker 支持 Python 3
DolphinScheduler 的 Python 任务类型(dolphinscheduler-task-python)默认通过 PYTHON_LAUNCHER 环境变量指定 Python 解释器路径。官方 Rainbond 镜像中的 Worker 服务默认已安装 Python 3,使用时只需为 Worker 组件添加环境变量:
PYTHON_LAUNCHER=/usr/bin/python3
从源码看该变量的生效路径:PythonTask.java 中明确说明:如果用户设置了 PYTHON_LAUNCHER 环境变量则使用该变量指定的解释器,否则默认使用 python。最终执行命令形如:
python3 test.py
(对应的测试用例见 PythonTaskTest.java,其中断言 buildPythonExecuteCommand("test.py") 的结果为 ${PYTHON_LAUNCHER} test.py。)
同样的机制也服务于其他依赖 Python 的任务插件,例如:
- OpenMLDB 任务(OpenmldbTask.java):同样读取
PYTHON_LAUNCHER环境变量作为默认解释器; - DataX 任务:执行命令模板为
${PYTHON_LAUNCHER} ${DATAX_LAUNCHER} ...(见下文第六节)。
因此,为 Worker 组件配置 PYTHON_LAUNCHER=/usr/bin/python3 后,Python、DataX、OpenMLDB 等依赖 Python 运行环境的任务类型均可正常执行。
六、让 Worker 支持 Hadoop / Spark / DataX 等大数据组件
Hadoop、Spark、DataX 等组件体积较大,且在不同版本、不同发行版之间差异明显,因此 DolphinScheduler 的官方镜像默认不内置这些运行时,而是将其作为可选的"外部软件包"放置在工作节点共享目录 /opt/soft 下,由任务插件通过环境变量(如 ${DATAX_LAUNCHER})定位并调用。
以 DataX 为例,完整的接入步骤如下。
6.1 安装"通用数据初始化插件"
在 Rainbond 团队视图 → 插件 → 从应用商店安装插件 中搜索 通用数据初始化插件 并安装。该插件的作用是在组件启动前自动下载并解压指定的软件包。
6.2 开通插件并配置下载参数
进入 Worker 组件 → 插件 → 开通"通用数据初始化插件",修改以下配置项:
| 配置项 | 说明 | 示例值 |
|---|---|---|
FILE_URL |
需要下载的软件包地址 | http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz |
FILE_PATH |
下载并解压的目标目录 | /opt/soft |
LOCK_PATH |
初始化锁路径(防止并发重复初始化) | /opt/soft |
6.3 更新组件使插件生效
保存配置后 更新组件,初始化插件会自动下载 datax.tar.gz 并解压到 /opt/soft 目录:
6.4 从源码理解 DataX 调用链
DataxTask.java 中,DataX 任务最终生成的执行命令模板为:
${PYTHON_LAUNCHER} ${DATAX_LAUNCHER} --jvm="..." [-p "自定义参数"] <job配置json路径>
其中:
${PYTHON_LAUNCHER}:Python 解释器,即第五节配置的环境变量;${DATAX_LAUNCHER}:DataX 启动脚本路径,需要在 Worker 环境中通过环境变量指定(对应/opt/soft下解压出的datax/bin/datax.py等);--jvm:DataX 运行 JVM 参数(源码中通过loadJvmEnv基于-Xms/-Xmx生成,最小为 1G);-p:透传自定义参数,实现动态列名等运行时替换能力。
整个调用链依赖三要素齐备:Python 解释器(PYTHON_LAUNCHER)、DataX 运行时(${DATAX_LAUNCHER},由初始化插件放到 /opt/soft)、共享目录(/opt/soft 在各组件间挂载共享)。
为什么是
/opt/soft? 查看 docker-compose.yml 可以看到,dolphinscheduler-api、dolphinscheduler-worker等服务都挂载了名为dolphinscheduler-shared-local的共享卷并映射到容器内/opt/soft。Rainbond 部署沿用了这一目录约定:把 Hadoop/Spark/DataX 等软件包解压到共享目录,即可被所有 Worker 实例访问。
Hadoop、Spark 的接入方式与 DataX 同理:通过初始化插件(或自制镜像)将对应发行版解压到 /opt/soft,并在 Worker 环境变量中配置其 bin 目录路径。Spark 任务插件(dolphinscheduler-task-spark)、MapReduce 任务插件(dolphinscheduler-task-mr)等均通过类似的环境变量机制定位外部运行时。
七、运维要点与排障提示
- 修改
common.properties后:仅改 API 服务一份配置即可,但需注意同步重启受影响的组件(API/Worker),使新配置加载生效。 - 伸缩 Worker 后节点未出现在监控中心:请检查 Worker 组件是否成功注册到注册中心(ZooKeeper),并确认新实例健康检查通过;Rainbond 拓扑图中组件状态为运行中时,通常注册也已完成。
- DataX 任务报"找不到 ${DATAX_LAUNCHER}":优先检查三件事——
/opt/soft下是否确实解压出了 DataX;Worker 环境变量是否指向了解压后的启动脚本;PYTHON_LAUNCHER是否指向可用的 Python 3。 - Python 任务执行失败:确认
PYTHON_LAUNCHER=/usr/bin/python3已在 Worker 组件环境变量中配置,且容器内该路径真实存在(可在 Rainbond 终端中执行which python3验证)。 - 高可用验证:可主动将某个 Master/Worker 实例下线,观察任务是否由剩余实例自动接管(容错机制相关设计可参考文档 架构设计)。
结语
通过 Rainbond 开源应用商店,DolphinScheduler 的部署从"编写 YAML、管理 Helm Chart、手动配置 ZooKeeper"简化为"搜索、安装、访问"三步;而节点伸缩、配置文件共享、Python/DataX 支持等能力背后,均有清晰的源码与镜像设计作为支撑。本文所涉部署与配置能力均可在当前仓库对应文档与源码中进一步核实:
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust4.24 K638- DDeepSeek-V4.1-FlashDeepSeek-V4.1-Flash 是一个多模态混合专家(MoE)模型,拥有 5520 亿骨干参数,并支持最多一百万 token 的上下文长度。该模型原生支持图像和文本输入,并以自回归方式生成文本Python670
SlideSCIPPT插件,支持素材库、AI助手、一键添加图片标题,复制粘贴位置、一键图片对齐、一键插入Markdown(加粗、超链接等行内样式、代码块、LaTeX等块级样式)、便捷导出图片!C#230
hello-agents📚 《从零开始构建智能体》——从零开始的智能体原理与实践教程Python52874
new-apiAI模型聚合管理中转分发系统,一个应用管理您的所有AI模型,支持将多种大模型转为统一格式调用,支持OpenAI、Claude、Gemini等格式,可供个人或者企业内部管理与分发渠道使用。🍥 A Unified AI Model Management & Distribution System. Aggregate all your LLMs into one app and access them via an OpenAI-compatible API, with native support for Claude (Messages) and Gemini formats.Go22545
JeecgBoot🔥企业级低代码平台集成了AI应用平台,帮助企业快速实现低代码开发和构建AI应用!前后端分离架构 SpringBoot,SpringCloud、Mybatis,Ant Design4、 Vue3.0、TS+vite!强大的代码生成器让前后端代码一键生成,无需写任何代码! 引领AI低代码开发模式: AI生成->OnlineCoding-> 代码生成-> 手工MERGE,显著的提高效率,又不失灵活~Java36351





