海豚调度器集群搭建笔记
- 1.DolphinScheduler Cluster部署
- 1.1 集群部署规划
- 1.2 集群准备工作
- 1.3 初始化数据库
- 1.4 修改安装环境配置
- 1.5 安装DolphinScheduler
- 1.6 启停命令
- 1.7 登录 DolphinScheduler UI
1.DolphinScheduler Cluster部署
分布式去中心化易扩展的工作流任务调度系统,用于大数据项目任务调度。
1.1 集群部署规划
集群模式下,可配置多个Master及多个Worker。通常可配置2~3个Master,若干个Worker。由于集群资源有限,此处配置一个Master,三个Worker,集群规划如下。
主机名 | ip | 服务 | 备注 |
---|---|---|---|
ds02 | 172.18.8.42 | master,worker,api | |
ds03 | 172.18.8.43 | master,worker,alert | 该服务器也可以安装master |
ds04 | 172.18.8.44 | worker |
1.2 集群准备工作
-
操作系统:linux centos 7.7
-
部署版本:apache-dolphinscheduler-3.1.4-bin
这个在官网下载二进制包即可:https://dolphinscheduler.apache.org/zh-cn/download/3.1.4
-
JDK:配置Java环境,将JAVA_HOME配置于PATH中,推荐版本使用jdk8+(下载地址)
-
数据库:本文使用的是MySQL 8.0.26版本,也可以使用5.7版本及以上,或者是使用PostgreSQL数据库(8.2.15+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16+下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java
-
注册中心:zookeeper(3.6.3),下载地址
这个版本一定要注意:
官网给的zk 3.4.6+,但是不能使用3.4.x,3.5.x
如果版本不匹配,启动会如下报错:
================================================================================_ _ _ _ ____ _ _ ___| | ___ | |_ __ | |__ (_)_ __ / ___| ___| |__ ___ __| |_ _| | ___ _ __/ _` |/ _ \| | '_ \| '_ \| | '_ \\___ \ / __| '_ \ / _ \/ _` | | | | |/ _ \ '__|
| (_| | (_) | | |_) | | | | | | | |___) | (__| | | | __/ (_| | |_| | | __/ |\__,_|\___/|_| .__/|_| |_|_|_| |_|____/ \___|_| |_|\___|\__,_|\__,_|_|\___|_||_|
================================================================================:: DolphinScheduler api server :: (v3.1.4)
[INFO] 2023-08-08 07:37:51.852 +0000 org.apache.curator.framework.state.ConnectionStateManager:[252] - State change: CONNECTED
[WARN] 2023-08-08 07:37:51.904 +0000 org.apache.zookeeper.ClientCnxn:[1292] - Session 0x20202809e56007f for server 172.18.8.46/172.18.8.46:2182, Closing socket connection. Attempting reconnect except it i s a SessionExpiredException.
org.apache.zookeeper.ClientCnxn$EndOfStreamException: Unable to read additional data from server sessionid 0x20202809e56007f, likely server has closed socketat org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:77)at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350)at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1282)
[ERROR] 2023-08-08 07:37:51.905 +0000 org.apache.curator.framework.imps.CuratorFrameworkImpl:[733] - Ensure path threw exception
org.apache.zookeeper.KeeperException$UnimplementedException: KeeperErrorCode = Unimplemented for /dolphinschedulerat org.apache.zookeeper.KeeperException.create(KeeperException.java:106)at org.apache.zookeeper.KeeperException.create(KeeperException.java:54)at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:1347)at org.apache.curator.utils.ZKPaths.mkdirs(ZKPaths.java:351)at org.apache.curator.framework.imps.NamespaceImpl$1.call(NamespaceImpl.java:90)at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:93)at org.apache.curator.framework.imps.NamespaceImpl.fixForNamespace(NamespaceImpl.java:83)at org.apache.curator.framework.imps.CuratorFrameworkImpl.fixForNamespace(CuratorFrameworkImpl.java:758)at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:584)at org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:48)at org.apache.dolphinscheduler.plugin.registry.zookeeper.ZookeeperRegistry.put(ZookeeperRegistry.java:184)at org.apache.dolphinscheduler.service.registry.RegistryClient.initNodes(RegistryClient.java:247)at org.apache.dolphinscheduler.service.registry.RegistryClient.afterConstruct(RegistryClient.java:77)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)
对应版本可参考:
DS版本 | zk版本 |
---|---|
dolphinscheduler-3.1.4 | zookeeper-3.6.3+ |
dolphinscheduler-3.1.7 | zookeeper-3.8.1+ |
-
其他大数据相关组件:Hadoop 3.3.1 、Hive 3.1.2 、DataX 3.0、Spark 3.1.2等
-
创建部署用户,并为该用户配置免登录,以创建dolphinscheduler用户为例(
准备执行DS安装程序的服务器上创建即可
)# 创建用户需使用root登录 useradd dolphinscheduler # 添加密码 echo "dolphinscheduler" | passwd --stdin **** # 配置sudo(系统管理命令)免密 sed -i '$aswscroot ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
注意:
- 因为任务执行服务是以
sudo -u {linux-user}
切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。初学习者不理解的话,完全可以暂时忽略这一点 - 如果发现
/etc/sudoers
文件中有 “Defaults requirett” 这行,也请注释掉
- 因为任务执行服务是以
-
配置机器SSH免密登陆
由于安装的时候需要向不同机器发送资源,所以要求各台机器间能实现SSH免密登陆。配置免密登陆的步骤如下
su dolphinschedulerssh-copy-id ds02 ssh-copy-id ds03 ssh-copy-id ds04
注意:
配置完成后,可以通过运行命令
ssh localhost
判断是否成功,如果不需要输入密码就能ssh登陆则证明成功 -
启动zookeeper集群(
所有安装Zookeper的服务器均执行
)# 启动 zookeeper ./bin/zkServer.sh start
1.3 初始化数据库
DolphinScheduler 元数据存储在关系型数据库中,目前支持 PostgreSQL 和 MySQL。下面分别介绍如何使用 MySQL 初始化数据库。
-
创建数据库、用户和授权
-- 进入MySQL命令行 [root@qianfeng01 soft]# mysql -uroot -p123456 -- 创建dolphinscheduler的数据库用户和密码,并限定登陆范围 mysql> CREATE USER 'dolphinscheduler'@'%' IDENTIFIED BY 'QF-Dolphinscheduler123!'; -- 创建dolphinscheduler的元数据库,并指定编码 mysql> CREATE DATABASE dolphinscheduler DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; -- 为dolphinscheduler数据库授权 mysql> grant all privileges on dolphinscheduler.* to 'dolphinscheduler'@'%' ; -- 刷新权限 mysql> flush privileges;
-
解压安装包
上传DolphinScheduler安装包到ds02节点的
/opt/software
目录,并解压安装包到该目录。#上传安装包到服务器 $ scp ~/Desktop/apache-dolphinscheduler-3.1.4-bin.tar.gz ds02:/opt/soft #解压 [root@ds02 soft]# tar -zxvf ./apache-dolphinscheduler-3.1.4-bin.tar.gz # 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限 [root@ds02 soft]# chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-3.1.4-bin
-
添加MySQL驱动
需要手动下载 对应的
mysql-connector-java驱动
(8.0.16)并移动到 DolphinScheduler 的每个模块的 libs 目录下,其中包括api-server/libs
和alert-server/libs
和master-server/libs
和worker-server/libs
和tools/libs
#复制mysql的驱动到对应libs目录中 [root@ds02 soft]# cp ./mysql-connector-java-8.0.16.jar ./apache-dolphinscheduler-3.1.4-bin/alert-server/libs/ [root@ds02 soft]# cp ./mysql-connector-java-8.0.16.jar ./apache-dolphinscheduler-3.1.4-bin/master-server/libs/ [root@ds02 soft]# cp ./mysql-connector-java-8.0.16.jar ./apache-dolphinscheduler-3.1.4-bin/worker-server/libs/ [root@ds02 soft]# cp ./mysql-connector-java-8.0.16.jar ./apache-dolphinscheduler-3.1.4-bin/api-server/libs/ [root@ds02 soft]# cp ./mysql-connector-java-8.0.16.jar ./apache-dolphinscheduler-3.1.4-bin/tools/libs/
-
修改
dolphinscheduler_env.sh
配置文件文件
./bin/env/dolphinscheduler_env.sh
描述了下列配置:- DolphinScheduler 的数据库配置,将username和password改成你在上一步中设置的用户名和密码
- 一些任务类型外部依赖路径或库文件,如
JAVA_HOME
和SPARK_HOME
都是在这里定义的 - 注册中心
zookeeper
- 服务端相关配置,比如缓存,时区设置等
如果您不使用某些任务类型,您可以忽略任务外部依赖项,但您必须根据您的环境更改
JAVA_HOME
、注册中心和数据库相关配置。#修改内容如下 [root@ds02 soft]# cd ./apache-dolphinscheduler-3.1.4-bin [root@ds02 apache-dolphinscheduler-3.1.4-bin]# vim ./bin/env/dolphinscheduler_env.sh# JAVA_HOME, will use it to start DolphinScheduler server # 改为自己的JDK路径 export JAVA_HOME=${JAVA_HOME:-/usr/local/jdk1.8.0_321}# Database related configuration, set database type, username and password # MySQL数据库连接信息 export DATABASE=${DATABASE:-mysql} export SPRING_PROFILES_ACTIVE=${DATABASE} export SPRING_DATASOURCE_URL="jdbc:mysql://172.18.8.42:33017/ds_db?useUnicode=true&characterEncoding=UTF-8&useSSL=false&allowPublicKeyRetrieval=true" export SPRING_DATASOURCE_USERNAME=${SPRING_DATASOURCE_USERNAME:-"ds_root"} export SPRING_DATASOURCE_PASSWORD=${SPRING_DATASOURCE_PASSWORD:-"ds123456"}# DolphinScheduler server related configuration # 不用修改 export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none} export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC} export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}# Registry center configuration, determines the type and link of the registry center # zookeeper集群信息 export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper} export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-ds02:2181,ds03:2181,ds04:2181}# Tasks related configurations, need to change the configuration if you use the related tasks. # 对已有可以正常配置,没有的保持默认即可 export HADOOP_HOME=${HADOOP_HOME:-/usr/local/hadoop-3.3.1} export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/usr/local/hadoop-3.3.1/etc/hadoop} export SPARK_HOME1=${SPARK_HOME1:-/usr/local/spark-3.1.2} export SPARK_HOME2=${SPARK_HOME2:-/usr/local/spark-3.1.2} export PYTHON_HOME=${PYTHON_HOME:-/usr/bin/python} export HIVE_HOME=${HIVE_HOME:-/usr/local/hive-3.1.2} export FLINK_HOME=${FLINK_HOME:-/usr/local/flink-1.14.3} export DATAX_HOME=${DATAX_HOME:-/usr/local/datax} export SEATUNNEL_HOME=${SEATUNNEL_HOME:-/opt/soft/seatunnel} export CHUNJUN_HOME=${CHUNJUN_HOME:-/opt/soft/chunjun}export PATH=$HADOOP_HOME/bin:$SPARK_HOME1/bin:$SPARK_HOME2/bin:$PYTHON_HOME/bin:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_HOME/bin:$PATH
-
初始化元数据
# 切换到apache-dolphinscheduler-3.1.4-bin目录下,执行命令 [root@ds02apache-dolphinscheduler-3.1.4-bin]# sh ./tools/bin/upgrade-schema.sh
1.4 修改安装环境配置
完成基础环境和元数据库初始化的准备后,需要根据你的机器环境修改配置文件。配置文件可以在目录 bin/env
中找到,他们分别是 install_env.sh
和 dolphinscheduler_env.sh
。
-
修改
install_env.sh
文件文件
install_env.sh
描述了哪些机器将被安装 DolphinScheduler 以及每台机器对应安装哪些服务。您可以在路径bin/env/install_env.sh
中找到此文件,可通过以下方式更改env变量,export <ENV_NAME>=,配置详情如下。#修改配置如下 [root@ds02 apache-dolphinscheduler-3.1.4-bin]# vim ./bin/env/install_env.sh# --------------------------------------------------------- # INSTALL MACHINE # --------------------------------------------------------- # Due to the master, worker, and API server being deployed on a single node, the IP of the server is the machine IP or localhost ips="ds02 ,ds03,ds04" sshPort="22" # masters可以是一台,也可以是多台,根据自己机器配置决定 masters="ds02,ds03" workers="ds02:default,ds03:default,ds04:default" alertServer="ds03" apiServers="ds02"# DolphinScheduler installation path, it will auto-create if not exists # 最终的安装路径 installPath=${installPath:-"/user/local/ds-3.1.7-install"}# Deploy user, use the user you create in section **Configure machine SSH password-free login** deployUser="dolphinscheduler"# The root of zookeeper, for now DolphinScheduler default registry server is zookeeper. zkRoot=${zkRoot:-"/dolphinscheduler"}
1.5 安装DolphinScheduler
使用上面创建的部署用户运行以下命令完成部署,部署后的运行日志将存放在 安装目录下的logs 文件夹内
[root@qianfeng01 apache-dolphinscheduler-3.1.4-bin]# sh ./bin/install.sh
注意:
第一次部署的话,可能出现 5 次sh: bin/dolphinscheduler-daemon.sh: No such file or directory相关信息,为非重要信息直接忽略即可。启动情况如图,并使用jps命令查看是否有这些服务的进程
1.6 启停命令
第一次安装后会自动启动所有服务的,如有服务问题或者后续需要启停,命令如下。下面的操作脚本都在dolphinScheduler安装目录bin下。
# 一键停止集群所有服务
sh /usr/local/dolphinscheduler-3.1.4/bin/stop-all.sh
# 一键开启集群所有服务
sh /usr/local/dolphinscheduler-3.1.4/bin/start-all.sh
# 启停 Master
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop master-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start master-server
# 启停 Worker
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start worker-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop worker-server
# 启停 Api
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start api-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop api-server
# 启停 Logger
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start logger-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop logger-server
# 启停 Alert
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start alert-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop alert-server
# 启停 Python Gateway
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh start python-gateway-server
sh /usr/local/dolphinscheduler-3.1.4/bin/dolphinscheduler-daemon.sh stop python-gateway-server
注意:
每个服务在路径
<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
然后启动服务,目的是为了减少用户修改配置的成本.服务用途请具体参见《系统架构设计》小节。Python gateway service 默认与 api-server 一起启动,如果您不想启动 Python gateway service 请通过更改 api-server 配置文件
api-server/conf/application.yaml
中的python-gateway.enabled : false
来禁用它。
1.7 登录 DolphinScheduler UI
浏览器访问地址 http://ds02:12345/dolphinscheduler/ui 即可登录系统UI。默认的用户名和密码是 admin/dolphinscheduler123
登录如下图所示: