DolphinScheduler 2.伪集群与集群部署文档


1. 伪集群部署

伪集群部署目的是在单台机器部署 DolphinScheduler 服务,该模式下 master、worker、api server 都在同一台机器上

如果你是新手,想要体验 DolphinScheduler 的功能,推荐使用 Standalone 方式体检。如果你想体验更完整的功能,或者更大的任务量,推荐使用 伪集群部署 。如果你是在生产中使用,推荐使用 集群部署 或者 kubernetes

1.1 准备工作

  • 下载安装包

  • 安装数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16

  • 部署注册中心 ZooKeeper (3.4.6+, 不包含 3.4.6) ,下载地址

  • 进程树分析

    • macOS安装 pstree
    • Fedora/Red/Hat/CentOS/Ubuntu/Debian 安装 psmisc
    # 如果是集群模式,每个节点都需要安装
    sudo yum install -y psmisc

注意: 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 1016 08:35 apache-zookeeper-3.5.6-bin.tar.gz
drwxr-xr-x 8 root root    4096 130 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 109 04:14 bin
drwxr-xr-x 2 1000 1000  4096 129 22:24 conf
drwxr-xr-x 3 root root  4096 129 22:24 data # 数据文件夹
drwxr-xr-x 5 1000 1000  4096 109 04:15 docs
drwxr-xr-x 2 root root  4096 129 21:50 lib
-rw-r--r-- 1 1000 1000 11358 105 19:27 LICENSE.txt
drwxr-xr-x 3 root root  4096 129 22:12 logs # 日志文件夹
-rw-r--r-- 1 1000 1000   432 109 04:14 NOTICE.txt
-rw-r--r-- 1 1000 1000  1560 109 04:14 README.md
-rw-r--r-- 1 1000 1000  1347 105 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 105 19:27 configuration.xsl
-rw-r--r-- 1 1000 1000 2712 105 19:27 log4j.properties
-rw-r--r-- 1 1000 1000  922 109 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 109 04:14 zkCleanup.sh
-rwxr-xr-x 1 1000 1000 1621 109 04:14 zkCli.sh # zookeeper 客户端
-rwxr-xr-x 1 1000 1000 3690 105 19:27 zkEnv.sh
-rwxr-xr-x 1 1000 1000 4573 109 04:14 zkServer-initialize.sh
-rwxr-xr-x 1 1000 1000 9386 109 04:14 zkServer.sh # zookeeper 服务器相关命令
-rwxr-xr-x 1 1000 1000 1385 105 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.shdolphinscheduler_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_HOMESPARK_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"

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
  目录