Apache DolphinScheduler 集群部署(Cluster)实战指南:多机生产环境搭建全流程

Apache DolphinScheduler 集群部署(Cluster)实战指南:多机生产环境搭建全流程 Apache DolphinScheduler 集群部署Cluster实战指南多机生产环境搭建全流程【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler导读本文以 Apache DolphinScheduler 官方集群部署文档为主体完整梳理多机集群模式下从环境准备、插件依赖下载、配置文件分发、数据库初始化到服务启停与登录验证的全流程操作。集群部署Cluster与伪集群Pseudo-Cluster共用同一套部署脚本与配置文件核心差异在于「多台机器」与「配置分发」本文会结合仓库内伪集群部署文档、数据源配置文档以及script/dolphinscheduler-daemon.sh、config/plugins_config、dolphinscheduler-common/src/main/resources/common.properties等源码与配置文件帮助读者在生产环境独立完成一套可承载大量任务的多机 DolphinScheduler 集群。集群部署概述为什么需要 Cluster 模式DolphinScheduler 官方文档对集群部署的定位非常明确集群部署目的是在多台机器部署 DolphinScheduler 服务用于运行大量任务情况。对于不同场景官方给出了四条部署路线建议部署方式适用场景Standalone新手快速体验 DolphinScheduler 功能伪集群部署Pseudo-Cluster单机体验更完整功能或承担更大的任务量集群部署Cluster生产环境多机部署运行大量任务Kubernetes生产环境容器化部署集群部署Cluster与伪集群部署共享同一套脚本和配置文件因此部署步骤大致相同。两者的本质区别在于伪集群针对的是一台机器master、worker、api-server 等全部跑在同一台机器上**集群Cluster**需要面向多台机器并且「修改相关配置」这一步的差异最大——配置文件需要先分发到每一台机器再逐机修改。从源码结构看DolphinScheduler 的部署脚本被设计为与机器数量无关script/dolphinscheduler-daemon.sh的用法是dolphinscheduler-daemon.sh (start|stop|status) api-server|master-server|worker-server|alert-server|standalone-server每个服务由各服务目录下的bin/start.sh独立拉起因此「在几台机器上分别启动哪些服务」完全由运维自行编排这正是集群模式的基础。部署前的规划与准备工作集群模式下前置准备工作需要在每一台集群服务器上执行。根据伪集群部署文档需要准备的外部软件如下JDK1.8 或 11安装并配置JAVA_HOME环境变量并将其下的bin目录追加到PATH环境变量中环境已存在可跳过。二进制包从官方下载页面获取 DolphinScheduler 二进制发布包并分发到每台集群服务器上。数据库PostgreSQL8.2.15或 MySQL5.7两者任选其一若使用 MySQL 则需要 JDBC Driver 8.0.33。注册中心当前支持 ZooKeeper3.8.0、MySQL8.0.33、ETCD 三种方案。进程树分析工具macOS 安装pstreeFedora / Red Hat / CentOS / Ubuntu / Debian 安装psmisc。注意请确保每台机器的配置文件都是一致的否则会导致集群无法正常工作。配置文件建议通过scp等方式分发到各台机器后再做统一修改。创建部署用户并配置免密 sudo集群中任务执行服务会以sudo -u {linux-user} -i切换不同 Linux 用户的方式实现多租户运行作业因此部署用户必须具备sudo 免密权限。以创建dolphinscheduler用户为例# 创建用户需使用 root 登录 useradd dolphinscheduler # 添加密码 echo dolphinscheduler | passwd --stdin dolphinscheduler # 配置 sudo 免密 sed -i $dolphinscheduler ALL(ALL) NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requiretty/#Defaults requiretty/g /etc/sudoers # 修改目录权限使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限 chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin chmod -R 755 apache-dolphinscheduler-*-bin注意如果发现/etc/sudoers文件中有Defaults requiretty这行也请注释掉以上操作需要在每一台集群机器上完成。准备注册中心如果使用 ZooKeeper 作为注册中心需要先安装 ZooKeeper3.8.0并启动。集群模式下各机器的 DolphinScheduler 服务将通过注册中心完成服务发现与元数据存储因此 ZooKeeper 集群的可用性直接决定 DolphinScheduler 集群的稳定性。下载插件依赖3.3.0 版本起从 3.3.0 版本开始二进制包不再内置插件依赖需要用户自行下载。你可以直接通过仓库根目录的 script/install-plugins.sh 安装bash ./bin/install-plugins.sh 3.3.0该脚本的机制是读取conf/plugins_config即仓库根目录的 config/plugins_config通过mvnw dependency:get -DgroupIdorg.apache.dolphinscheduler -DartifactId${line} -Dversion${version} -Dclassifiershade逐个下载插件到${DOLPHINSCHEDULER_HOME}/plugins/对应分类目录下。通常你并不需要所有连接器插件可以通过配置plugins_config来裁剪。例如只需要dolphinscheduler-task-shell插件可将文件修改为--task-plugins-- dolphinscheduler-task-shell --end--plugins_config中以--xxx-plugins--和--end--作为分隔标记插件分为四大类与仓库模块一一对应--alert-plugins--告警插件如dolphinscheduler-alert-email、dolphinscheduler-alert-dingtalk、dolphinscheduler-alert-wechat等--datasource-plugins--数据源插件如dolphinscheduler-datasource-mysql、dolphinscheduler-datasource-postgresql、dolphinscheduler-datasource-hive等--storage-plugins--存储插件如dolphinscheduler-storage-hdfs、dolphinscheduler-storage-s3、dolphinscheduler-storage-oss等--task-plugins--任务插件如dolphinscheduler-task-shell、dolphinscheduler-task-spark、dolphinscheduler-task-flink等。注意插件依赖包通常不包含在二进制包中如果启动服务时遇到ClassNotFoundException错误请检查对应插件类型的依赖包是否已安装例如dolphinscheduler-datasource-mysql不包含mysql-connector-java.jar。准备 DolphinScheduler 启动环境注意DolphinScheduler 本身不依赖 Hadoop、Hive、Spark但如果运行的任务需要依赖它们就需要有对应的环境支持。集群部署需要在每台机器中配置执行伪集群部署中的所有执行项包括创建部署用户、配置 sudo 免密、安装注册中心客户端依赖等。此外从源码角度看DolphinScheduler 的启动脚本通过读取各服务目录下的conf/dolphinscheduler_env.sh注入环境变量因此每台机器上该文件的内容也必须保持一致。修改相关配置集群模式的核心差异点集群部署与伪集群部署差异最大的一步就是「修改相关配置」请使用 scp 等方式将配置文件分发到各台机器上然后修改配置文件。DolphinScheduler 的配置文件分布在以下位置bin/env/dolphinscheduler_env.sh全局环境变量数据库、注册中心、任务外部依赖路径api-server/conf/application.yamlAPI Server 配置master-server/conf/application.yamlMaster Server 配置worker-server/conf/application.yamlWorker Server 配置alert-server/conf/application.yamlAlert Server 配置conf/common.properties资源中心等公共配置。修改dolphinscheduler_env.sh文件bin/env/dolphinscheduler_env.sh描述了下列配置DolphinScheduler 的数据库配置详细配置方法见初始化数据库一些任务类型外部依赖路径或库文件如JAVA_HOME、SPARK_HOME都在这里定义默认注册中心类型与连接串服务器相关配置如缓存类型、时区等。典型配置如下# JAVA_HOME, will use it to start DolphinScheduler server export JAVA_HOME${JAVA_HOME:-/opt/soft/java} # Database related configuration, set database type, username and password export DATABASE${DATABASE:-postgresql} export SPRING_PROFILES_ACTIVE${DATABASE} export SPRING_DATASOURCE_URLjdbc:postgresql://127.0.0.1:5432/dolphinscheduler export SPRING_DATASOURCE_USERNAME{user} export SPRING_DATASOURCE_PASSWORD{password} # DolphinScheduler server related configuration export SPRING_CACHE_TYPE${SPRING_CACHE_TYPE:-none} export SPRING_JACKSON_TIME_ZONE${SPRING_JACKSON_TIME_ZONE:-UTC} # Registry center configuration, determines the type and link of the registry center export REGISTRY_TYPE${REGISTRY_TYPE:-zookeeper} export REGISTRY_ZOOKEEPER_CONNECT_STRING${REGISTRY_ZOOKEEPER_CONNECT_STRING:-localhost:2181} # Tasks related configurations, need to change the configuration if you use the related tasks. export HADOOP_HOME${HADOOP_HOME:-/opt/soft/hadoop} export HADOOP_CONF_DIR${HADOOP_CONF_DIR:-/opt/soft/hadoop/etc/hadoop} export SPARK_HOME${SPARK_HOME:-/opt/soft/spark} export PYTHON_LAUNCHER${PYTHON_LAUNCHER:-/opt/soft/python} export HIVE_HOME${HIVE_HOME:-/opt/soft/hive} export FLINK_HOME${FLINK_HOME:-/opt/soft/flink} export DATAX_LAUNCHER${DATAX_LAUNCHER:-/opt/soft/datax/bin/python3} export PATH$HADOOP_HOME/bin:$SPARK_HOME/bin:$PYTHON_LAUNCHER:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_LAUNCHER:$PATH集群模式下有几点必须注意如果使用 MySQL 数据库需要将DATABASE设置为mysql并修改SPRING_DATASOURCE_URL、SPRING_DATASOURCE_USERNAME、SPRING_DATASOURCE_PASSWORD为你的数据库配置dolphinscheduler_env.sh中的配置会覆盖各服务配置文件application.yaml中的同名配置。若两个文件都配置了某参数以dolphinscheduler_env.sh为准。映射规则示例SPRING_DATASOURCE_URL对应 application.yaml 中的spring.datasource.url数据库地址建议填写集群内各机器都能访问的数据库服务地址而非127.0.0.1除非数据库就部署在本机REGISTRY_ZOOKEEPER_CONNECT_STRING在集群模式下应填写完整的 ZooKeeper 集群地址如zk1:2181,zk2:2181,zk3:2181。配置注册中心三种方案集群的可用性高度依赖注册中心。官方支持 ZooKeeper、JDBCMySQL/PostgreSQL、ETCD 三种注册中心插件详细配置见 registry-plugins 目录。ZooKeeper 注册中心zookeeper.md在 master/worker/api 的 application.yaml 中设置registry: type: zookeeper zookeeper: namespace: dolphinscheduler connect-string: localhost:2181 retry-policy: base-sleep-time: 60ms max-sleep: 300ms max-retries: 5 session-timeout: 30s connection-timeout: 9s block-until-connected: 600ms # The following options are set according to personal needs digest: ~JDBC 注册中心jdbc.md会复用与 api-server 相同的数据库配置。使用前需先初始化数据库执行插件内的mysql_registry_init.sql或postgresql_registry_init.sql然后在 master/worker/api 的 application.yaml 中设置registry: type: jdbc # Used to schedule refresh the heartbeat. heartbeat-refresh-interval: 3s # Once the clients heartbeat is not refresh in this time, the server will consider the client is offline. session-timeout: 60s由于 Worker 服务默认不包含数据源需要在 worker 的 application.yaml 中为注册中心显式配置数据源registry: type: jdbc heartbeat-refresh-interval: 3s session-timeout: 60s hikari-config: jdbc-url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler username: root password: root maximum-pool-size: 5 connection-timeout: 9000 idle-timeout: 600000注意如果使用 MySQL 数据库需要将mysql-connector-java.jar添加到 DS 的类路径中因为该插件不会在发行版中捆绑此驱动。ETCD 注册中心etcd.md在 master/worker/api 的 application.yaml 中设置registry: type: etcd endpoints: http://etcd0:2379, http://etcd1:2379, http://etcd2:2379 # The options below have default values namespace: dolphinscheduler connection-timeout: 9s # The unit is milliseconds retry-delay: 60ms retry-max-delay: 300ms retry-max-duration: 1500ms # The following ssl options are set according to personal needs cert-file: deploy/kubernetes/dolphinscheduler/etcd-certs/ca.crt key-cert-chain-file: deploy/kubernetes/dolphinscheduler/etcd-certs/client.crt key-file: deploy/kubernetes/dolphinscheduler/etcd-certs/client.pem # The following auth options are set according to personal needs user: password: authority: load-balancer-policy: 如果使用 ETCD SSL 认证需要确保 JDK 版本比 Java 8u2522020 年 4 月更新JDK 11 也可以很好地工作8u252 之后自带对 ALPN 的原生支持。配置资源中心common.properties官方文档特别提醒DS 默认使用本地模式的目录/tmp/dolphinscheduler作为资源中心如果需要修改资源中心目录请修改配置文件conf/common.properties中 resource 的相关配置项。仓库内 common.properties 给出了相关配置项与默认值# user data local directory path, please make sure the directory exists and have read write permissions data.basedir.path/tmp/dolphinscheduler # resource storage type: LOCAL, HDFS, S3, OSS, GCS, ABS, OBS, COS. LOCAL type is default type resource.storage.typeLOCAL # resource store on HDFS/S3 path resource.storage.upload.base.path/tmp/dolphinscheduler # The query interval resource.query.interval10000 # if resource.storage.typeHDFS, the user must have the permission to create directories under the HDFS root path resource.hdfs.root.userhdfs resource.hdfs.fs.defaultFShdfs://mycluster:8020重要LOCAL模式在分布式模式集群部署下不支持跨机读写资源文件只能在一台机器上使用除非使用共享文件挂载点。因此生产环境集群部署时若涉及多机共享资源文件建议改用 HDFS / S3 / OSS / GCS / ABS / OBS / COS 等共享存储并在每一台机器上保持common.properties配置一致。初始化数据库DolphinScheduler 元数据存储在关系型数据库中目前支持 PostgreSQL 和 MySQL。详细步骤见数据源配置文档中的「伪分布式/分布式安装初始化数据库」。如果使用 MySQL 作为元数据库需要手动下载 mysql-connector-java 驱动8.0.16 及以上并移动到 DolphinScheduler 每个模块的 libs 目录下包括api-server/libs、alert-server/libs、master-server/libs、worker-server/libs和tools/libs。MySQL 5.6 / 5.7mysql -uroot -p mysql CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; # 修改 {user} 和 {password} 为你希望的用户名和密码 mysql GRANT ALL PRIVILEGES ON dolphinscheduler.* TO {user}% IDENTIFIED BY {password}; mysql GRANT ALL PRIVILEGES ON dolphinscheduler.* TO {user}localhost IDENTIFIED BY {password}; mysql flush privileges;MySQL 8mysql -uroot -p mysql CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; # 修改 {user} 和 {password} 为你希望的用户名和密码 mysql CREATE USER {user}% IDENTIFIED BY {password}; mysql GRANT ALL PRIVILEGES ON dolphinscheduler.* TO {user}%; mysql CREATE USER {user}localhost IDENTIFIED BY {password}; mysql GRANT ALL PRIVILEGES ON dolphinscheduler.* TO {user}localhost; mysql FLUSH PRIVILEGES;PostgreSQL# 采用命令行工具登陆 PostgreSQL psql # 创建数据库 postgres# CREATE DATABASE dolphinscheduler; # 修改 {user} 和 {password} 为你希望的用户名和密码 postgres# CREATE USER {user} PASSWORD {password}; postgres# ALTER DATABASE dolphinscheduler OWNER TO {user}; # 退出 PostgreSQL postgres#\q # 在终端执行如下命令向配置文件新增登陆权限并重载 PostgreSQL 配置替换 {ip} 为对应的 DS 集群服务器 IP 地址段 echo host dolphinscheduler {user} {ip} md5 $PGDATA/pg_hba.conf pg_ctl reload然后设置环境变量{user}、{password}替换为上一步设置的值# for mysql export DATABASE${DATABASE:-mysql} export SPRING_PROFILES_ACTIVE${DATABASE} export SPRING_DATASOURCE_URLjdbc:mysql://127.0.0.1:3306/dolphinscheduler?useUnicodetruecharacterEncodingUTF-8useSSLfalseserverTimezone{your_timezone} export SPRING_DATASOURCE_USERNAME{user} export SPRING_DATASOURCE_PASSWORD{password}# for postgresql export DATABASE${DATABASE:-postgresql} export SPRING_PROFILES_ACTIVE${DATABASE} export SPRING_DATASOURCE_URLjdbc:postgresql://127.0.0.1:5432/dolphinscheduler export SPRING_DATASOURCE_USERNAME{user} export SPRING_DATASOURCE_PASSWORD{password}⚠️ 时区配置提醒避免使用CST等模糊时区标识符可能造成调度时间错误。推荐使用明确的时区如serverTimezoneAsia/Shanghai。完成上述步骤后通过 Shell 脚本初始化数据库bash tools/bin/upgrade-schema.sh该脚本会依据环境变量中的DATABASE/SPRING_DATASOURCE_URL等配置自动建表并初始化元数据是集群中每台机器启动服务前的必经步骤只需执行一次。启动 DolphinScheduler集群模式下各服务按规划分布在不同机器上启动。部署后的运行日志将存放在xxx-server/logs文件夹内。# 启动 api-server bash ./bin/dolphinscheduler-daemon.sh start api-server # 启动 master-server bash ./bin/dolphinscheduler-daemon.sh start master-server # 启动 worker-server bash ./bin/dolphinscheduler-daemon.sh start worker-server # 启动 alert-server bash ./bin/dolphinscheduler-daemon.sh start alert-server关于启动脚本仓库内 script/dolphinscheduler-daemon.sh 揭示了几个集群部署的关键实现细节脚本支持start|stop|status三种操作服务名限定为api-server|master-server|worker-server|alert-server|standalone-server启动时会用bin/env/dolphinscheduler_env.sh覆盖server/conf/dolphinscheduler_env.shoverwrite_server_env函数目的是减少用户逐服务修改配置的成本。因此集群部署时只需维护好全局的bin/env/dolphinscheduler_env.sh并在各机器保持一致即可进程 PID 文件存放于server/pid日志输出到server/logs/server-hostname.out每个服务都是无状态且互相独立的因此可以在每台机器上部署多个服务但需要注意端口冲突问题第一次部署时可以通过bash ./bin/dolphinscheduler-daemon.sh status xxx-server查询服务状态。注意Python gateway service 默认与 api-server 一起启动如果不想启动可通过修改 api-server 配置文件api-server/conf/application.yaml中的python-gateway.enabled : false来禁用它。登录 DolphinScheduler集群任一 api-server 启动成功后浏览器访问http://localhost:12345/dolphinscheduler/ui即可登录系统 UI。默认的用户名和密码是admin/dolphinscheduler123。在生产集群中localhost应替换为 api-server 所在机器实际可访问的 IP 或域名并确保 12345 端口在防火墙/安全组中放行。启停服务# 查询服务状态 bash ./bin/dolphinscheduler-daemon.sh status xxx-server # 启停 Master bash ./bin/dolphinscheduler-daemon.sh stop master-server bash ./bin/dolphinscheduler-daemon.sh start master-server # 启停 Worker bash ./bin/dolphinscheduler-daemon.sh start worker-server bash ./bin/dolphinscheduler-daemon.sh stop worker-server # 启停 Api bash ./bin/dolphinscheduler-daemon.sh start api-server bash ./bin/dolphinscheduler-daemon.sh stop api-server # 启停 Alert bash ./bin/dolphinscheduler-daemon.sh start alert-server bash ./bin/dolphinscheduler-daemon.sh stop alert-server注意 1每个服务在路径service/conf/dolphinscheduler_env.sh中都有独立的dolphinscheduler_env.sh文件这是为微服务需求提供的便利。你可以基于不同的环境变量启动各个服务只需在对应服务中配置service/conf/dolphinscheduler_env.sh然后通过service/bin/start.sh启动。但如果你使用bin/dolphinscheduler-daemon.sh start service启动服务器它将会用bin/env/dolphinscheduler_env.sh覆盖service/conf/dolphinscheduler_env.sh后再启动。注意 2stop操作对优雅退出设置了 5 秒超时STOP_TIMEOUT5超过时间会以kill -9强制结束。集群部署注意事项汇总结合官方文档与仓库实现多机集群部署需要重点把握以下几点配置文件一致性每台机器的配置文件必须一致dolphinscheduler_env.sh、application.yaml、common.properties建议以一台机器为准用scp分发到各机后再启动否则集群会因元数据/注册信息不一致而无法正常工作注册中心选型ZooKeeper、JDBCMySQL/PostgreSQL、ETCD 三选一通过REGISTRY_TYPE与对应 application.yaml 的registry.*配置项确定。集群规模较大或对可用性要求高时推荐独立部署 ZooKeeper 或 ETCD 集群资源中心共享默认的LOCAL模式/tmp/dolphinscheduler不支持分布式跨机读写生产集群应改用 HDFS/S3/OSS/GCS 等共享存储并在 common.properties 中统一配置resource.storage.type与resource.storage.upload.base.path数据库初始化一次即可tools/bin/upgrade-schema.sh在集群部署中只需在任一台机器上执行一次所有服务通过相同的数据库连接串访问同一份元数据多服务共存与端口冲突每个服务无状态且独立可在单机部署多个服务以充分利用资源但必须规划好端口如 api-server 的 12345、master/worker 的通信端口等避免冲突插件依赖3.3.0 起二进制包不含插件依赖需通过install-plugins.sh结合 plugins_config 按需安装若启动报ClassNotFoundException优先排查对应数据源/任务插件的 JDBC 驱动或 shade 包是否就位。完成以上步骤后一套多机的 DolphinScheduler 生产集群即可投入运行可承载大规模、多租户的工作流调度任务。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考