DolphinScheduler 安装和使用

实验目标 -DolphinScheduler 集群

实验准备

物理环境 (四台机器)

IP hostName 软件 1 软件 2
192.168.8.88 node0 zookeeper 1 DolphinScheduler1
192.168.8.144 node1 zookeeper 2 DolphinScheduler2
192.168.8.145 node2 zookeeper 3 DolphinScheduler3
192.168.8.146 node3 zookeeper DolphinScheduler4
192.168.8.97 数据库

软件环境

  1. JDK:下载JDK (1.8+),安装并配置 JAVA_HOME 环境变量,并将其下的 bin 目录追加到 PATH 环境变量中。如果你的环境中已存在,可以跳过这步。
  2. 二进制包:在下载页面下载 DolphinScheduler 3.1.4 二进制包
  3. 数据库:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),两者任选其一即可,如 MySQL 则需要 JDBC Driver 8.0.16
  4. 注册中心:ZooKeeper (3.8.3),下载地址
  5. 进程树分析
  • macOS安装pstree
  • Fedora/Red/Hat/CentOS/Ubuntu/Debian安装psmisc

DolphinScheduler概念

架构图解释

img

*** MasterServer ***

  1. DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态
  2. MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务

*** WorkerServer ***

  1. WorkerServer主要负责任务的执行和提供日志服务
  2. WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳

*** LoggerServer ***
是一个RPC服务,提供日志分片查看、刷新和下载等功能

*** ZooKeeper服务 ***

  1. ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错

*** Task Queue ***
提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响

*** Alert ***
提供告警相关接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能
*** API ***
API接口层,主要负责处理前端UI层的请求
*** UI ***
系统的前端页面,提供系统的各种可视化操作界面

实验步骤

实验搭建DolphinScheduler集群

1. 配置用户免密及权限

# 创建用户需使用 root 登录
useradd 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
# 修改目录权限,使得部署用户对二进制包解压后的 apache-dolphinscheduler-*-bin 目录有操作权限
chown -R dolphinscheduler:dolphinscheduler /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin

su dolphinscheduler
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

cd ~    #回到主界面
ssh-keygen -t rsa -f ~/.ssh/id_rsa  

 ssh-copy-id -i node0
 ssh-copy-id -i node1
 ssh-copy-id -i node2
 ssh-copy-id -i node3

cat /home/dolphinscheduler/.ssh/authorized_keys   

ssh node0
ssh node1
ssh node2
ssh node3

2. Zookeeper 安装和使用

mkdir -p /opt/zookeeper;   #创建zookeeper目录
mkdir -p /opt/zookeeper/data;   #创建zookeeper数据存放目录
mkdir -p /opt/zookeeper/log;   #创建zookeeper日志存放目录
tar -zxvf /usr/local/software/apache-zookeeper-3.8.3-bin.tar.gz  -C /opt/zookeeper
cp /opt/zookeeper/apache-zookeeper-3.8.3-bin/conf/zoo_sample.cfg /opt/zookeeper/apache-zookeeper-3.8.3-bin/conf/zoo.cfg

dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/log
clientPort=2181
server.0=192.168.8.88:2888:3888
server.1=192.168.8.145:2888:3888
server.2=192.168.8.146:2888:3888
server.3=192.168.8.144:2888:3888

export ZK_HOME=/opt/zookeeper/apache-zookeeper-3.8.3-bin
export PATH=$PATH:$ZK_HOME/bin

3. 启动ZooKeeper服务器


# 启动查看对应模块的日志 如果页面报错看api-server 的日志
cat /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/master-server/logs/ master-server-localhost.localdomain.out 


启动ZooKeeper服务器
bash
bin/zkServer.sh start

停止ZooKeeper服务器:
bash
bin/zkServer.sh stop

连接到ZooKeeper客户端:
bash
zkCli.sh -server 192.168.161.3:2181

创建一个持久节点:
bash
create /path data

创建一个临时节点:
bash
create -e /path data

创建一个顺序节点:
bash
create -s /path data

列出节点内容:
bash
ls /path

获取节点数据:
bash
get /path

设置节点数据:
bash
set /path data

删除节点:
bash
delete /path

监视节点变化:
bash
get -w /path

查看帮助信息:
help

4. 创建数据库,添加数据库驱动


sudo wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.29.tar.gz

sudo tar -zxvf mysql-connector-java-8.0.25.tar.gz

cp mysql-connector-java-8.0.25.jar  /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/worker-server/libs

cp mysql-connector-java-8.0.25.jar  /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/alert-server/libs

cp mysql-connector-java-8.0.25.jar  /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/api-server/libs

cp mysql-connector-java-8.0.25.jar  /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/worker-server/libs

5. 修改相关配置

# 以下步骤在21,22,23,24上都需要完成
# 以下步骤在21,22,23,24上都需要完成
# 以下步骤在21,22,23,24上都需要完成
# 以21为例

# 进入/data/tools
cd /data/tools
tar -zxvf apache-dolphinscheduler-3.1.4-bin.tar.gz -C /opt/dolphinscheduler

# 创建总文件夹dolphinscheduler
mkdir dolphinscheduler

# 进入dolphinscheduler
cd dolphinscheduler

# 将20上的tar复制到21
scp 10.192.168.20:/data/tools/dolphinscheduler/apache-dolphinscheduler-incubating-1.3.5-dolphinscheduler-bin.tar.gz /data/tools/dolphinscheduler/

# 解压
tar -zxvf apache-dolphinscheduler-incubating-1.3.5-dolphinscheduler-bin.tar.gz


# 将20配置好的datasource.properties复制到21
scp 10.192.168.20:/data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/ /datasource.properties /data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/


# 将20配置好的install_config.conf复制到21
scp 10.192.168.20:/data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/ /config/install_config.conf  /data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/config


# 将20配置好的install_config.conf复制到21
scp 10.192.168.20:/data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/ /env/dolphinscheduler_env.sh   /data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/conf/env

# 创建installPath,一定要安装的用户有可读可写的权限
mkdir install-ds-1.3.5

# 创建个当前版本的软链接,后续若有升级、降级操作,只需要改变当前版本软连即可,博主的独到秘籍
ln -sf /data/tools/dolphinscheduler/install-ds-1.3.5 current

# 以上步骤在21,22,23,24上都需要完成
# 以上步骤在21,22,23,24上都需要完成
# 以上步骤在21,22,23,24上都需要完成

# 然后任意选一台机器,这里就选20吧,进入/data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/
cd /data/tools/dolphinscheduler/apache-dolphinscheduler-1.3.5/

# 一键部署启动
sh install.sh

#注意:
# 第一次部署的话,在运行中第3步`3,stop server`出现5次以下信息,此信息可以忽略
# sh: bin/dolphinscheduler-daemon.sh: No such file or directory
# 正确部署后,这个命令是可以将整个dolphinscheduler集群启动起来的
# 正确部署后,这个命令是可以将整个dolphinscheduler集群启动起来的
# 正确部署后,这个命令是可以将整个dolphinscheduler集群启动起来的

6. 修改install_env.sh



ips=${ips:-"192.168.8.88,192.168.8.144,192.168.8.145,192.168.8.146"}

masters=${masters:-"192.168.8.88,192.168.8.144,192.168.8.145"}

workers=${workers:-"192.168.8.88:default,192.168.8.144:default,192.168.8.145:default,192.168.8.146:default"}

alertServer=${alertServer:-"192.168.8.146"}

apiServers=${apiServers:-"192.168.8.146"}

installPath=${installPath:-"/tmp/dolphinscheduler"}


deployUser=${deployUser:-"dolphin"}

# 创建这个文件, 并赋予权限 /tmp/dolphinscheduler
mkdir -p /tmp/dolphinscheduler
chown -R dolphinscheduler:dolphinscheduler /opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin
/opt/dolphinscheduler/apache-dolphinscheduler-3.1.4-bin/bin/env

# 账号密码 dolphin


7. 修改dolphinscheduler_env.sh



export JAVA_HOME=/usr/java/jdk1.8.0_361

export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:mysql://192.168.8.97:3306/dolphinscheduler?useSSL=false&useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=UTF-8"
export SPRING_DATASOURCE_USERNAME=root
export SPRING_DATASOURCE_PASSWORD=123456

export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-192.168.8.144:2181}ZZ:


root

# 账号密码 dolphin

8. 启动和停止服务

# 查看服务
jps 
# 一键停止集群所有服务
bash ./bin/stop-all.sh
# 一键开启集群所有服务
bash ./bin/start-all.sh
# 启停 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


9. 登录 访问Web UI (admin dolphinscheduler123)

实验结果

  1. zookeeper 验证
    spring boot 连接上微服务 能在服务器上 ls 到注册的服务
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- ZooKeeper 客户端库 -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.7.0</version> <!-- 版本号根据你的需要进行修改 -->
    </dependency>
</dependencies>


import org.apache.zookeeper.*;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import java.io.IOException;

@SpringBootApplication
public class ZookeeperRegistryApplication {

    private static final String ZOOKEEPER_CONNECTION_STRING = "localhost:2181";
    private static final int SESSION_TIMEOUT = 3000;
    private static final String ZNODE_PATH = "/myApp";

    public static void main(String[] args) {
        SpringApplication.run(ZookeeperRegistryApplication.class, args);

        try {
            ZooKeeper zooKeeper = new ZooKeeper(ZOOKEEPER_CONNECTION_STRING, SESSION_TIMEOUT, new Watcher() {
                @Override
                public void process(WatchedEvent event) {
                    // 处理连接事件
                    if (event.getState() == Watcher.Event.KeeperState.SyncConnected) {
                        System.out.println("Connected to ZooKeeper");
                    }
                }
            });

            // 创建一个持久节点
            if (zooKeeper.exists(ZNODE_PATH, false) == null) {
                zooKeeper.create(ZNODE_PATH, "data".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            }

            // 注册服务(在此节点下创建临时顺序节点)
            String serviceNode = zooKeeper.create(ZNODE_PATH + "/service", "service-data".getBytes(),
                    ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);

            System.out.println("Service registered at: " + serviceNode);

        } catch (IOException | KeeperException | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

2. dolpinSechduler 使用

posted @ 2024-02-28 09:23  庭有奇树  阅读(192)  评论(0编辑  收藏  举报