1. 伪集群部署
伪集群部署目的是在单台机器部署 DolphinScheduler 服务,该模式下 master、worker、api server 都在同一台机器上
如果你是新手,想要体验 DolphinScheduler 的功能,推荐使用 Standalone 方式体检。如果你想体验更完整的功能,或者更大的任务量,推荐使用 伪集群部署 。如果你是在生产中使用,推荐使用 集群部署 或者 kubernetes
1.1 准备工作
安装数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要
JDBC Driver 8.0.16进程树分析
- macOS安装
pstree - Fedora/Red/Hat/CentOS/Ubuntu/Debian 安装
psmisc
# 如果是集群模式,每个节点都需要安装 sudo yum install -y psmisc- macOS安装
注意: DolphinScheduler 本身不依赖 Hadoop、Hive、Spark,但如果你运行的任务需要依赖他们,就需要有对应的环境支持
1.2 配置用户免密执行权限
任务执行服务是以 sudo -u {linux-user} 切换不同 linux 用户的方式来实现多租户运行作业,所以部署用户需要有 sudo 权限,而且是免密的。所以这里需配置用户的免密权限
创建部署用户,并且一定要配置 sudo 免密。以创建 dolphinscheduler 用户为例
# 创建用户需使用 root 登录
useradd dolphinscheduler
# 为 dolphinscheduler 用户设置密码,密码为 “dolphinscheduler”
echo "dolphinscheduler" | passwd --stdin dolphinscheduler
# 配置 sudo 免密
sed -i '$adolphinscheduler ALL=(ALL) NOPASSWD: NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults requirett/#Defaults requirett/g' /etc/sudoers
# 修改目录权限,使得dolphinscheduler用户对 apache-dolphinscheduler-3.1.4-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-3.1.4-bin
- 如果发现
/etc/sudoers文件中有 “Defaults requiretty” 这行,也请注释掉
1.3 配置SSH免密登陆
配置单节点免密登录可实现无缝的自动化脚本执行,提高任务成功率,同时简化本地节点的管理和维护过程。
# 切换用户
su dolphinscheduler
# 使用RSA 算法生成一对密钥 ,密码为 '' 即没有密码
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 实现免密登录
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
配置完成后,可以通过运行命令 ssh localhost 判断是否成功,如果不需要输入密码就能ssh登陆则证明成功
1.4 配置 zookeeper(单节点)
1.4.1 下载安装文件
zookeeper 下载地址:http://archive.apache.org/dist/zookeeper/
根据自己的需要下载对应版本,这里下载的版本是 3.5.6
1.4.2 解压安装包
# 将下载的安装包上传到服务器
# 切换文件夹
[root@node1 ~]# cd /opt/
# 解压 安装包
[root@node1 opt]# tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz
[root@node1 opt]# ll
总用量 30452
-rw-r--r-- 1 root root 9230052 10月 16 08:35 apache-zookeeper-3.5.6-bin.tar.gz
drwxr-xr-x 8 root root 4096 1月 30 11:34 zookeeper-3.5.6
1.4.3 创建所需文件夹
# 切换文件夹
[root@node1 opt]# cd zookeeper-3.5.6/
# 创建数据文件夹(Zookeeper之后产生的数据会存储在该文件夹中)
[root@node1 opt]# mkdir data
# 创建日志文件夹(Zookeeper之后产生的日志数据会存储在该文件夹中)
[root@node1 opt]# mkdir logs
[root@node1 zookeeper-3.5.6]# ll
总用量 48
drwxr-xr-x 2 1000 1000 4096 10月 9 04:14 bin
drwxr-xr-x 2 1000 1000 4096 1月 29 22:24 conf
drwxr-xr-x 3 root root 4096 1月 29 22:24 data # 数据文件夹
drwxr-xr-x 5 1000 1000 4096 10月 9 04:15 docs
drwxr-xr-x 2 root root 4096 1月 29 21:50 lib
-rw-r--r-- 1 1000 1000 11358 10月 5 19:27 LICENSE.txt
drwxr-xr-x 3 root root 4096 1月 29 22:12 logs # 日志文件夹
-rw-r--r-- 1 1000 1000 432 10月 9 04:14 NOTICE.txt
-rw-r--r-- 1 1000 1000 1560 10月 9 04:14 README.md
-rw-r--r-- 1 1000 1000 1347 10月 5 19:27 README_packaging.txt
1.4.4 修改配置文件
# 切换文件夹
[root@node1 zookeeper-3.5.6]# cd conf
[root@node1 conf]# ll
总用量 16
-rw-r--r-- 1 1000 1000 535 10月 5 19:27 configuration.xsl
-rw-r--r-- 1 1000 1000 2712 10月 5 19:27 log4j.properties
-rw-r--r-- 1 1000 1000 922 10月 9 04:14 zoo_sample.cfg
# 修改配置文件名称,默认是使用zoo.cfg,固定的
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
[root@node1 conf]# vim zoo.cfg
在配置文件中增加或修改一下内容
# 指定数据文件夹
dataDir=/opt/zookeeper-3.5.6/data
# 指定数据日志文件夹
dataLogDir=/opt/zookeeper-3.5.6/logs
# the port at which the clients will connect
clientPort=2181
#2888,3888 are election port
server.0=node1:2888:3888
1.4.5 启动服务
[root@node1 conf]# cd /opt/zookeeper-3.5.6/bin
[root@node1 bin]#
[root@node1 bin]# ll
总用量 56
-rwxr-xr-x 1 1000 1000 2067 10月 9 04:14 zkCleanup.sh
-rwxr-xr-x 1 1000 1000 1621 10月 9 04:14 zkCli.sh # zookeeper 客户端
-rwxr-xr-x 1 1000 1000 3690 10月 5 19:27 zkEnv.sh
-rwxr-xr-x 1 1000 1000 4573 10月 9 04:14 zkServer-initialize.sh
-rwxr-xr-x 1 1000 1000 9386 10月 9 04:14 zkServer.sh # zookeeper 服务器相关命令
-rwxr-xr-x 1 1000 1000 1385 10月 5 19:27 zkTxnLogToolkit.sh
#启动zookeeper服务,restart 重启
[root@node1 bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看zookeeper服务状态
[root@node1 bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: standalone # 单节点模式
#停止zookeeper服务
[root@node1 bin]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.5.6/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
1.4.6 查看zookeeper进程
# 查看Java进程
[root@node1 bin]# jps -l
7696 org.apache.zookeeper.server.quorum.QuorumPeerMain
8311 sun.tools.jps.Jps
[root@node1 bin]#
#根据端口查看进程信息
[root@node1 bin]# lsof -i:2181
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 7696 root 49u IPv4 1194504 0t0 TCP *:eforward (LISTEN)
如果没有lsof服务可以使用 yum install lsof 安装
1.4.7 启动客户端
- 连接本机
[root@node1 bin]# zkCli.sh #默认连接本机
Connecting to localhost:2181
...
Welcome to ZooKeeper!
JLine support is enabled
...
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
[zk: localhost:2181(CONNECTED) 0] quit # 退出客户端
WATCHER::
WatchedEvent state:Closed type:None path:null
- 连接远程zookeeper服务
[root@node1 bin]# zkCli.sh -server localhost:2181 # 连接远程服务
Connecting to localhost:2181
...
Welcome to ZooKeeper!
JLine support is enabled
...
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
1.5 修改相关配置
完成基础环境的准备后,需要根据你的机器环境修改配置文件。配置文件可以在目录 bin/env 中找到,他们分别是 并命名为 install_env.sh 和 dolphinscheduler_env.sh。
1.5.1 修改 install_env.sh
文件 install_env.sh 描述了哪些机器将被安装 DolphinScheduler 以及每台机器对应安装哪些服务。您可以在路径 bin/env/install_env.sh 中找到此文件,配置详情如下。
vim bin/env/install_env.sh
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# 由于 master、worker 和 API 服务器部署在单个节点上,因此服务器的 IP 为机器 IP 或本地主机(localhost)
ips="localhost"
sshPort="22"
masters="localhost"
workers="localhost:default"
alertServer="localhost"
apiServers="localhost"
# DolphinScheduler 安装路径,如果不存在将自动创建。
installPath=/opt/dolphinscheduler
# 部署用户,需要配置了免密执行权限和免密登录
deployUser="dolphinscheduler"
1.5.2 修改 dolphinscheduler_env.sh
文件 ./bin/env/dolphinscheduler_env.sh 描述了下列配置:
- DolphinScheduler 的数据库配置,详细配置方法见初始化数据库
- 一些任务类型外部依赖路径或库文件,如
JAVA_HOME和SPARK_HOME都是在这里定义的 - 注册中心
zookeeper - 服务端相关配置,比如缓存,时区设置等
如果您不使用某些任务类型,您可以忽略任务外部依赖项,但您必须根据您的环境更改 JAVA_HOME、注册中心和数据库相关配置。
vim ./bin/env/dolphinscheduler_env.sh
# JAVA_HOME, will use it to start DolphinScheduler server
export JAVA_HOME=/usr/java/jdk1.8.0_181
# 与数据库相关的配置,设置数据库类型、用户名和密码
export DATABASE=mysql
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL=jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8&useSSL=false
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=root@123
# Registry center configuration, determines the type and link of the registry center
export REGISTRY_TYPE=zookeeper
export REGISTRY_ZOOKEEPER_CONNECT_STRING=192.168.1.73:2181
1.5.3 修改一些 application.yaml 配置文件
- tools 模块配置文件, 在进行数据库初始化时会用到
vim tools/conf/application.yaml
# 修改下面的 mysql url 跟前面的配置保持一致
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8
- alert-server 模块
vim alert-server/conf/application.yaml
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root@123
- api-server 模块
vim api-server/conf/application.yaml
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root@123
vim master-server/conf/application.yaml
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root@123
- worker-server 模块
vim worker-server/conf/application.yaml
---
spring:
config:
activate:
on-profile: mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.1.73:3306/ds2?useUnicode=true&characterEncoding=UTF-8&useSSL=false
username: root
password: root@123
1.6 初始化数据库
在初始化数据库之前 需要创建好数据库, 这里配置的是 ds2
初始化数据库之前需要把驱动包拷贝到对应的模块 libs 目录下
cp mysql-connector-java-8.0.16.jar alert-server/libs/
cp mysql-connector-java-8.0.16.jar api-server/libs/
cp mysql-connector-java-8.0.16.jar master-server/libs/
cp mysql-connector-java-8.0.16.jar standalone-server/libs/
cp mysql-connector-java-8.0.16.jar tools/libs/
cp mysql-connector-java-8.0.16.jar worker-server/libs/
- 初始化数据库
bash tools/bin/upgrade-schema.sh
...
2023-03-28 08:34:42.575 INFO 11235 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown initiated...
2023-03-28 08:34:42.580 INFO 11235 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : DolphinScheduler - Shutdown completed.
1.7 部署 DolphinScheduler
使用上面创建的部署用户运行以下命令完成部署,部署后的运行日志将存放在 logs 文件夹内
# 使用 dolphinscheduler 用户进行安装
bash ./bin/install.sh
1.create directory
2.scp resources
localhost:default
scp dirs to localhost//opt/dolphinscheduler_single_cluster starting
start to scp bin to localhost//opt/dolphinscheduler_single_cluster
......
......
localhost Begin status master-server......
master-server [ RUNNING ]
End status master-server.
localhost Begin status worker-server......
worker-server [ RUNNING ]
End status worker-server.
localhost Begin status alert-server......
alert-server [ RUNNING ]
End status alert-server.
localhost Begin status api-server......
api-server [ RUNNING ]
End status api-server.
# 查看进程
[dolphinscheduler@node2 dolphinscheduler_single_cluster_install_package]$ jps -l
31429 sun.tools.jps.Jps
20886 org.apache.dolphinscheduler.alert.AlertServer
31129 org.apache.dolphinscheduler.server.worker.WorkerServer
31177 org.apache.dolphinscheduler.alert.AlertServer
31082 org.apache.dolphinscheduler.server.master.MasterServer
31226 org.apache.dolphinscheduler.api.ApiApplicationServer
*注意:* 第一次部署的话,可能出现 5 次
sh: bin/dolphinscheduler-daemon.sh: No such file or directory相关信息,此为非重要信息直接忽略即可
- 查看日志
tail -200f alert-server/logs/dolphinscheduler-alert.log
tail -200f api-server/logs/dolphinscheduler-api.log
tail -200f master-server/logs/dolphinscheduler-master.log
tail -200f worker-server/logs/dolphinscheduler-worker.log
1.8 登录 DolphinScheduler
浏览器访问地址 http://localhost:12345/dolphinscheduler/ui 即可登录系统UI。默认的用户名和密码是 admin/dolphinscheduler123
1.9 启停服务
# 一键停止集群所有服务
bash ./bin/stop-all.sh
# 一键开启集群所有服务
bash ./bin/start-all.sh
# 启动 Master
bash ./bin/dolphinscheduler-daemon.sh start master-server
# 停止 master
bash ./bin/dolphinscheduler-daemon.sh stop master-server
# 查看 master 状态
bash ./bin/dolphinscheduler-daemon.sh status master-server
# 启停 Worker
bash ./bin/dolphinscheduler-daemon.sh start worker-server
bash ./bin/dolphinscheduler-daemon.sh stop worker-server
bash ./bin/dolphinscheduler-daemon.sh status worker-server
# 启停 Api
bash ./bin/dolphinscheduler-daemon.sh start api-server
bash ./bin/dolphinscheduler-daemon.sh stop api-server
bash ./bin/dolphinscheduler-daemon.sh status api-server
# 启停 Alert
bash ./bin/dolphinscheduler-daemon.sh start alert-server
bash ./bin/dolphinscheduler-daemon.sh stop alert-server
bash ./bin/dolphinscheduler-daemon.sh status 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然后启动服务,目的是为了减少用户修改配置的成本.*注意2:*:服务用途请具体参见《系统架构设计》小节。Python gateway service 默认与 api-server 一起启动,如果您不想启动 Python gateway service 请通过更改 api-server 配置文件
api-server/conf/application.yaml中的python-gateway.enabled : false来禁用它。
2. 集群部署
集群部署(Cluster)使用的脚本和配置文件与 伪集群部署 中的配置一样,所以所需要的步骤也与伪集群部署大致一样。下面的部署文档中省略了大部分章节, 仅介绍了集群部署过程中与伪分布式部署配置上有差异的部分。
区别就是伪集群部署针对的是一台机器,而集群部署(Cluster)需要针对多台机器,且两者 “ 修改相关配置 ” 步骤区别较大
2.1 集群规划
| 节点 | 服务 |
|---|---|
| 192.168.1.72 | MasterServer, WorkerServer, ApiServer, AlertServer |
| 192.168.1.71 | WorkerServer |
2.2 安装 JDK
前面介绍过了, 这里略过。
2.3 安装 psmisc
# 在所有节点执行
sudo yum install -y psmisc
2.4 配置用户免密执行权限
所有节点都需要配置, 详细内容见 伪集群部署中的 配置用户免密执行权限 章节
2.5 配置SSH免密登陆
# 切换用户
su dolphinscheduler
# 使用RSA 算法生成一对密钥 ,密码为 '' 即没有密码
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
# 实现免密登录
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 免密登录到其他节点
ssh-copy-id ip
# ip 为想要登录的节点
2.6 配置 zookeeper
根据需求,zookeeper 配置集群或者单节点均可, 详细配置见上述章节
2.7 修改相关配置
2.7.1 修改 install_env.sh
除了上述的部分还有一些有区别的配置如下:
vim bin/env/install_env.sh
# 修改如下配置
# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# 由于 master、worker 和 API 服务器部署在单个节点上,因此服务器的 IP 为机器 IP 或本地主机(localhost)
ips="192.168.1.72,192.168.1.71"
sshPort="22"
masters="localhost"
# worker组就是多个 worker 组成了一个组,创建任务时 可以指定任务分片到哪些worker中执行
workers="192.168.1.72:default,192.168.1.71:default"
alertServer="192.168.1.72:default"
apiServers="192.168.1.72:default"
# DolphinScheduler 安装路径,如果不存在将自动创建。需要写当前用户有权限的路径
installPath=/opt/dolphinscheduler
# 部署用户,需要配置了免密执行权限和免密登录,将来作为启动dolphinScheduler的用户
deployUser="dolphinscheduler"