ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Apache DolphinScheduler 集群 Master / Worker 扩缩容实战指南

Apache DolphinScheduler 集群 Master / Worker 扩缩容实战指南 任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载导读本文以 Apache DolphinScheduler 分布式集群的**扩容Expansion与缩容Reduction**为主线完整讲解如何在已有调度集群上新增或下线 Master 服务节点与 Worker 服务节点。读完本文你将掌握扩容/缩容的前置约束、基础环境准备、安装包获取与部署用户创建、install_env.sh与dolphinscheduler_env.sh的同步修改要点、集群重启与jps/Web 监控验证方法并了解缩容时安全摘除节点的标准操作。文中所有关键步骤均可在当前仓库gh_mirrors/do/dolphinscheduler中找到对应的配置模板与源码实现作为依据。一、扩缩容总体思路与前置约束DolphinScheduler 是典型的“Master 调度 Worker 执行 API/Alert 服务”集群架构。当业务量增长、任务并发上升时需要横向扩容新增 Master 节点分担工作流调度与容错新增 Worker 节点提升任务并行执行能力当资源富余或节点需要下线维护时则执行横向缩容将 Master/Worker 服务从集群中安全摘除。在动手之前必须先明确一条硬性约束同一台物理机上不允许同时存在多个 Master 服务进程或多个 Worker 服务进程。因此扩容的目标机器必须是“干净”的——如果该物理机已安装过调度服务就必须先按照本文“修改配置”一节在所有节点上同步修改bin/env/install_env.sh将新增节点的masters/workers参数加入并重启整个调度集群否则会出现端口与注册冲突。另外需要注意DolphinScheduler 本身不依赖 Hadoop、Hive、Spark它只是在对应任务提交时调用这些组件的 Client。因此扩容 Worker 节点时需要按目标机器实际承担的任务类型决定是否安装外部客户端见下一节。二、扩容Expansion为集群新增 Master / Worker 节点2.1 基础软件安装在每一台扩容机器上完成以下准备软件说明JDK1.8必装。需在/etc/profile中配置JAVA_HOME与PATH环境变量Hadoop / Hive / Spark / Flink 等客户端可选。仅当扩容的是 Worker 节点且需要提交对应类型任务时才安装以JAVA_HOME/opt/soft/java为例环境变量配置形如export JAVA_HOME/opt/soft/java export PATH$JAVA_HOME/bin:$PATH配置完成后执行source /etc/profile使其生效并用java -version验证版本不低于 1.8。2.2 获取安装包版本必须与现有环境一致先确认现有集群使用的 DolphinScheduler 版本下载对应版本的安装包版本不一致可能引发兼容性问题。目录必须统一确认其他节点的统一安装目录。本文假设安装在/opt/下完整路径为/opt/dolphinscheduler。下载安装包到服务器安装目录解压并重命名为dolphinscheduler。补充数据库驱动本文以 MySQL 为例需将mysql-connector-java驱动包放入/opt/dolphinscheduler/lib目录若使用 PostgreSQL 等数据库则放入对应驱动。# 创建安装目录请勿创建在 /root、/home 等高权限目录下 mkdir -p /opt cd /opt # 解压 tar -zxvf apache-dolphinscheduler-version-bin.tar.gz -C /opt cd /opt # 重命名 mv apache-dolphinscheduler-version-bin dolphinscheduler提示也可以直接从现有环境的物理机上复制安装包到扩容机器免去重复下载。2.3 创建部署用户在所有扩容机器上创建部署用户并配置免密 sudo。以 4 台扩容机器ds1、ds2、ds3、ds4为例每台机器都要执行# 需用 root 登录执行以下以部署用户名 dolphinscheduler 为例 useradd dolphinscheduler; # 设置用户密码请自行修改以下以 dolphinscheduler123 为例 echo dolphinscheduler123 | passwd --stdin dolphinscheduler # 配置 sudo 免密 echo dolphinscheduler ALL(ALL) NOPASSWD: NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requirett/#Defaults requirett/g /etc/sudoers关于这一步骤有三点需要特别注意DolphinScheduler 通过sudo -u {linux-user}在多个 Linux 用户间切换以运行多租户作业因此部署用户必须具备 sudo 权限且免密若/etc/sudoers中存在Default requiretty行请一并注释掉requiretty会阻止非交互式会话执行 sudo若需要使用资源上传功能还需在 HDFS 或 MinIO 上为部署用户分配读写权限。2.4 修改配置扩容关键步骤2.4.1 复制并核对配置目录从现有节点如某台 Master/Worker上直接复制配置目录替换新节点的配置目录。复制完成后必须逐项核对以下配置文件配置文件作用datasource.properties数据库连接信息zookeeper.propertiesZooKeeper 连接信息注册中心common.properties资源存储相关配置若启用 Hadoop需检查core-site.xml与hdfs-site.xml是否存在dolphinscheduler_env.sh环境变量关于注册中心需要说明的是DolphinScheduler 的注册中心采用插件化设计ZooKeeper 只是其中一种实现仓库中还有 JDBC、etcd 等注册中心插件见 dolphinscheduler-registry-plugins。复制配置时需确保新节点的注册中心配置与集群保持一致。2.4.2 修改环境变量dolphinscheduler_env.sh根据新机器实际情况修改bin/env/dolphinscheduler_env.sh。以下示例假设所有软件统一安装在/opt/soft下export HADOOP_HOME/opt/soft/hadoop export HADOOP_CONF_DIR/opt/soft/hadoop/etc/hadoop export SPARK_HOME/opt/soft/spark export PYTHON_LAUNCHER/opt/soft/python/bin/python3 export JAVA_HOME/opt/soft/java export HIVE_HOME/opt/soft/hive export FLINK_HOME/opt/soft/flink export DATAX_LAUNCHER/opt/soft/datax/bin/datax.py export PATH$HADOOP_HOME/bin:$SPARK_HOME/bin:$PYTHON_LAUNCHER:$JAVA_HOME/bin:$HIVE_HOME/bin:$PATH:$FLINK_HOME/bin:$DATAX_LAUNCHER:$PATH这一步非常重要其中JAVA_HOME和PATH是必配项未用到的组件对应的行可以直接忽略或注释掉。当前仓库中提供了环境变量脚本的权威参考script/env/dolphinscheduler_env.sh以及 CI 集群测试使用的完整示例 .github/workflows/cluster-test/mysql_with_zookeeper_registry/dolphinscheduler_env.sh后者还展示了通过DATABASE、SPRING_DATASOURCE_URL、REGISTRY_ZOOKEEPER_CONNECT_STRING等环境变量注入数据库与注册中心配置的写法。2.4.3 软链接 JDK仍以JAVA_HOME/opt/soft/java为例将 JDK 软链接到/usr/bin/java保证各脚本能以统一路径找到 javasudo ln -s /opt/soft/java/bin/java /usr/bin/java2.4.4 修改install_env.sh核心步骤在所有节点上同步修改bin/env/install_env.sh新增 Master 节点修改ips与masters参数新增 Worker 节点修改ips与workers参数。# 部署 DolphinScheduler 服务的机器列表多台物理机之间用逗号分隔 ipsds1,ds2,ds3,ds4 # ssh 端口默认 22 sshPort22 # 部署 master 服务的机器 mastersexisting master01,existing master02,ds1,ds2 # 部署 worker 服务的机器并指定该 worker 属于哪个 worker 组下面示例中的 default 为组名 workersexisting worker01:default,existing worker02:default,ds3:default,ds4:default2.4.5 Worker 分组若扩容的是 Worker 节点还需要设置worker 组Worker Group。Worker 分组的意义在于将不同 Worker 划分到逻辑组中工作流/任务可指定由特定组的 Worker 执行。关于分组的具体操作请参阅安全中心-Worker 分组章节。从源码结构看Worker 分组是 DolphinScheduler 任务分发路由的重要依据任务实例在调度时会按目标 worker 组选择可用的 Worker 节点执行因此新增的 Worker 只有加入了正确的工作组才会被对应任务选用。2.4.6 目录权限调整在所有新节点上将 DolphinScheduler 目录属主改为部署用户确保部署用户具备访问权限sudo chown -R dolphinscheduler:dolphinscheduler dolphinscheduler2.5 重启集群并验证2.5.1 重启命令# 停止命令 bin/stop-all.sh # 停止所有服务 bash bin/dolphinscheduler-daemon.sh stop master-server # 停止 master 服务 bash bin/dolphinscheduler-daemon.sh stop worker-server # 停止 worker 服务 bash bin/dolphinscheduler-daemon.sh stop api-server # 停止 api 服务 bash bin/dolphinscheduler-daemon.sh stop alert-server # 停止 alert 服务 # 启动命令 bin/start-all.sh # 启动所有服务 bash bin/dolphinscheduler-daemon.sh start master-server # 启动 master 服务 bash bin/dolphinscheduler-daemon.sh start worker-server # 启动 worker 服务 bash bin/dolphinscheduler-daemon.sh start api-server # 启动 api 服务 bash bin/dolphinscheduler-daemon.sh start alert-server # 启动 alert 服务注意使用stop-all.sh/start-all.sh时若当前执行命令的机器未对所有机器配置 ssh 免密脚本会提示输入密码。为避免中断建议提前在所有节点间配置好 ssh 免密登录。2.5.2 用jps验证进程脚本执行完成后用jps命令随 Java JDK 自带检查各节点服务是否启动MasterServer ----- master 服务 WorkerServer ----- worker 服务 ApiApplicationServer ----- api 服务 AlertServer ----- alert 服务对应地Master 服务的入口类可在仓库源码中直接看到MasterServer.java该文件第 63 行即public class MasterServer implements IStoppableWorker 侧同样有WorkerServer入口。2.5.3 查看日志与 Web 监控启动成功后日志存放在logs目录logs/ ├── dolphinscheduler-alert-server.log ├── dolphinscheduler-master-server.log ├── dolphinscheduler-worker-server.log ├── dolphinscheduler-api-server.log当以上服务均正常启动、调度系统页面正常后进入 Web 系统的监控中心Monitor查看若其中已出现扩容的 Master 或 Worker 服务则扩容完成。三、缩容Reduction安全下线 Master / Worker 节点缩容即减少现有集群中的 Master 或 Worker 服务。完成以下两个步骤即可完成缩容。3.1 停止缩容节点上的服务缩容 Master 节点定位 Master 服务所在的物理机停止该机器上的 Master 服务缩容 Worker 节点定位待缩容的 Worker 物理机停止该机器上的 Worker 服务。# 停止命令 bin/stop-all.sh # 停止所有服务 bash bin/dolphinscheduler-daemon.sh stop master-server # 停止 master 服务 bash bin/dolphinscheduler-daemon.sh stop worker-server # 停止 worker 服务 bash bin/dolphinscheduler-daemon.sh stop api-server # 停止 api 服务 bash bin/dolphinscheduler-daemon.sh stop alert-server # 停止 alert 服务 # 启动命令其余保留节点按需执行 bin/start-all.sh # 启动所有服务 bash bin/dolphinscheduler-daemon.sh start master-server # 启动 master 服务 bash bin/dolphinscheduler-daemon.sh start worker-server # 启动 worker 服务 bash bin/dolphinscheduler-daemon.sh start api-server # 启动 api 服务 bash bin/dolphinscheduler-daemon.sh start alert-server # 启动 alert 服务注意stop-all.sh执行时若该机器未对所有机器配置 ssh 免密同样会提示输入密码。脚本执行完毕后用jps命令确认各节点服务是否已成功关闭MasterServer ----- master 服务 WorkerServer ----- worker 服务 ApiApplicationServer ----- api 服务 AlertServer ----- alert 服务若对应的 Master 或 Worker 进程已不存在则说明该服务已成功关闭。3.2 修改配置文件同步所有节点在所有节点上同步修改bin/env/install_env.sh缩容 Master 节点修改ips与masters参数将待下线节点移除缩容 Worker 节点修改ips与workers参数将待下线节点移除。# 部署 DolphinScheduler 服务的机器列表localhost 表示本机 ipsds1,ds2,ds3,ds4 # ssh 端口默认 22 sshPort22 # 部署 master 服务的机器 mastersexisting master01,existing master02,ds1,ds2 # 部署 worker 服务的机器并指定该 worker 属于哪个 worker 组下面示例中的 default 为组名 workersexisting worker01:default,existing worker02:default,ds3:default,ds4:default配置修改完成后按需重启其余节点上的相关服务。缩容完成后同样可在 Web 系统的监控中心确认对应节点已从集群中摘除。四、install_env.sh完整参数速查部署目录中install_env.sh的实际可配置参数比扩缩容文档展示的更完整。当前仓库的 CI 集群测试模板 .github/workflows/cluster-test/mysql_with_mysql_registry/install_env.sh 给出了完整的参数说明整理如下参数默认值说明ipslocalhost安装 DolphinScheduler 服务的机器列表逗号分隔可填主机名或 IP如ds1,ds2,ds3,ds4,ds5sshPort22SSH 端口目前要求所有ips机器使用相同端口masterslocalhost部署 Master 服务的机器列表必须是ips的子集workerslocalhost:default部署 Worker 服务的机器列表格式为hostname:workerGroupworkerGroup默认为default必须是ips的子集alertServerlocalhost部署 Alert 服务的机器必须是ips的子集apiServerslocalhost部署 API 服务的机器必须是ips的子集installPath/root/apache-dolphinscheduler-*-SNAPSHOT-binDolphinScheduler 安装目录由install.sh自动创建不可与当前目录pwd相同deployUserdolphinscheduler部署用户需提前创建必须拥有 sudo 权限若启用 HDFS还需具备 HDFS 操作权限扩缩容时只需关注ips、masters、workers三个参数但理解其余参数有助于整体理解集群部署模型——masters/workers/alertServer/apiServers都必须是ips的子集这正是“先声明机器清单再分配各服务角色”的部署设计。五、扩缩容的源码依据与原理印证为了让“扩缩容为什么这样操作”有据可依可以从当前仓库源码中找到如下印证服务注册与发现Master 与 Worker 服务启动后会向注册中心ZooKeeper / JDBC / etcd 等插件实现参见 dolphinscheduler-registry-plugins注册自身元数据。扩容新增节点启动后会自动注册缩容节点停止服务后其注册信息会被摘除——这正是 Web 监控中心能够实时反映节点增删的底层机制。Master 服务入口MasterServer.java 中public class MasterServer implements IStoppable表明 Master 以可停止Stoppable进程形态运行与dolphinscheduler-daemon.sh stop master-server的停止机制对应。Worker 分组路由workers参数中的:workerGroup后缀决定了节点归属的 Worker 组任务调度时会依据该组进行 Worker 选择因此扩容 Worker 后必须正确配置/调整分组缩容前也应确认待下线 Worker 所属组内仍有可用节点承接任务。部署脚本模板仓库 .github/workflows/cluster-test 目录下的多套 CI 集群测试配置MySQL/PostgreSQL × ZooKeeper/MySQL Registry 组合本身就是“多机集群 注册中心”部署的活样例可作为扩缩容后集群配置比对的参考基线。结语DolphinScheduler 的集群扩缩容本质上是“改配置、重启、验证”三步循环扩容时在目标机器上准备好 JDK 与环境、拉齐安装包与部署用户、同步dolphinscheduler_env.sh与install_env.sh、重启集群后用jps与监控中心确认节点上线缩容时先停止目标节点服务再从所有节点的install_env.sh中摘除该节点。只要严格遵循“同一物理机只运行一个 Master/Worker 进程”的约束并保持所有节点配置同步即可安全、平滑地完成集群规模的调整。赞分享任务调度大数据后端前端【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址https://gitcode.com/gh_mirrors/do/dolphinscheduler点击查看免费下载相关推荐Apache DolphinScheduler 集群扩容/缩容实战指南Master 与 Worker 节点的弹性管理Apache DolphinScheduler 集群扩容/缩容实战指南Master 与 Worker 节点的弹性管理 本指南以 Apache DolphinS任务调度数据编排工作流自动化后端大数据Apache DolphinScheduler 集群扩容与缩容Master/Worker 节点的动态增减实操指南Apache DolphinScheduler 集群扩容与缩容Master/Worker 节点的动态增减实操指南 本文面向已有 Apache DolphinS任务调度数据编排工作流自动化后端大数据企业级功能与运维管理Dolphinscheduler分布式调度系统的终极指南企业级功能与运维管理Dolphinscheduler分布式调度系统的终极指南 Dolphinscheduler是一个功能强大的分布式调度系统专为企业级任务调任务调度数据编排工作流自动化后端大数据上一篇如何快速掌握Flume大数据传输的终极指南下一篇MinIO 接入 OPA通过 Access Management Plugin 将 S3 鉴权委托给外部策略引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进