跳到主要内容

DolphinScheduler 高可用集群部署指南

概述​

本指南介绍如何在三台 Linux 虚拟机上部署 DolphinScheduler 3.4.1 高可用集群,采用角色分离部署方式,适合准生产环境。

架构特点:

  • 2 个 Master 节点实现高可用故障转移
  • 2 个 Worker 节点负载均衡执行任务
  • 外置 ZooKeeper 集群实现分布式协调
  • 外置 PostgreSQL 数据库存储元数据

一、环境规划​

1.1 节点配置(角色分离部署)​

节点名称IP 地址MasterWorkerAPIAlert角色定位
ubuntu-ds-node110.123.0.121✓✗✓✓调度中心
ubuntu-ds-node210.123.0.122✓✓✗✗混合部署
ubuntu-ds-node310.123.0.123✗✓✗✗纯执行节点

1.2 外部依赖​

组件版本说明
PostgreSQL12+元数据存储(外置数据库集群)
ZooKeeper3.8.x分布式协调服务(外置集群,参考 部署指南)
OpenJDK17Ubuntu 24.04 默认
DolphinScheduler3.4.1本指南部署版本

1.3 节点角色说明​

ubuntu-ds-node1 (10.123.0.121) - 调度中心​

  • 部署组件: MasterServer + API Server + Alert Server
  • 主要职责:
    • 任务调度和协调(Master)
    • 提供 Web UI 和 API 服务(API)
    • 告警服务(Alert)
  • 不部署: WorkerServer(避免资源争抢)

ubuntu-ds-node2 (10.123.0.122) - 混合节点​

  • 部署组件: MasterServer + WorkerServer
  • 主要职责:
    • 任务调度备份(Master 备用节点)
    • 任务执行(Worker)
  • 特点: 兼顾调度和执行,资源利用均衡

ubuntu-ds-node3 (10.123.0.123) - 纯执行节点​

  • 部署组件: WorkerServer
  • 主要职责:
    • 专注任务执行(Worker)
  • 优势: 无 Master 调度开销,全力执行任务

1.4 架构特点​

  • ✅ Master 高可用:2 个 Master 节点(ubuntu-ds-node1、ubuntu-ds-node2)实现故障转移
  • ✅ Worker 水平扩展:2 个 Worker 节点(ubuntu-ds-node2、ubuntu-ds-node3)负载均衡
  • ✅ 角色分离:Master 专注调度,Worker 专注执行
  • ✅ 外置依赖:PostgreSQL 和 ZooKeeper 均为外置集群,专业运维

二、前置准备​

2.1 磁盘分区规划 ⭐重要​

推荐的分区方案:

# 查看当前分区
lsblk
df -h

# 建议的分区大小
/boot 1GB # 引导分区
/ 50GB # 根目录
/opt 100GB+ # DolphinScheduler 安装目录
swap 8GB # 交换空间(与内存相当)

验证 /opt 空间:

df -h /opt

2.2 系统要求​

  • CPU: 4 核(推荐 8 核)
  • 内存: 8GB(推荐 16GB)
  • 磁盘: 100GB+ SSD(/opt 目录)
  • 网络: 千兆网卡

2.3 安装基础软件​

在三台节点上执行:

# 更新软件源
sudo apt update

# 安装 JDK 17(Ubuntu 24.04 默认)
sudo apt install openjdk-17-jdk -y

# 安装必要工具
sudo apt install psmisc ssh openssh-server wget curl netcat-openbsd -y

# 验证 Java 安装
java -version
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64

2.4 创建部署用户​

# 创建用户
useradd dolphinscheduler

# 设置密码:dolphinscheduler
echo "dolphinscheduler:dolphinscheduler" | chpasswd

# 配置 sudo 免密(Ubuntu 亲测有效)
echo 'dolphinscheduler ALL=(ALL) NOPASSWD: ALL' | tee -a /etc/sudoers
sed -i 's/^Defaults\s*requiretty/#Defaults requiretty/g' /etc/sudoers

# 关闭 requiretty(解决 sudo 报错:没有终端)
sed -i 's/^Defaults requiretty/#Defaults requiretty/g' /etc/sudoers

# 创建 master 日志目录 + 全局PID目录
sudo mkdir -p /opt/dolphinscheduler/{master-server/logs,logs}

# 再次赋权(确保新目录权限正确)
sudo chown -R dolphinscheduler:dolphinscheduler /opt/dolphinscheduler

chmod -R 777 /tmp/dolphinscheduler

2.5 配置 chrony 时间同步​

在所有节点执行:

sudo apt install chrony -y

sudo tee /etc/chrony/chrony.conf > /dev/null << 'EOF'
pool ntp.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
logdir /var/log/chrony
EOF

sudo systemctl restart chronyd
sudo systemctl enable chronyd

chronyc sources -v
chronyc tracking

2.7 系统优化配置​

sudo sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
sudo sed -i 's/#GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config
sudo systemctl restart sshd

sudo tee -a /etc/sysctl.conf > /dev/null << 'EOF'

vm.swappiness = 0
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
fs.file-max = 6815744
vm.max_map_count = 262144
fs.aio-max-nr = 1048576
EOF

sudo sysctl -p

2.8 配置 SSH 免密登录​

在所有节点上执行(以 dolphinscheduler 用户为例):

# 切换到 dolphinscheduler 用户
su - dolphinscheduler

# 生成 SSH 密钥
ssh-keygen -t rsa -P ""

# 分发公钥到所有节点(包括自己)
# ubuntu-ds-node1、ubuntu-ds-node2、ubuntu-ds-node3 都需要执行
ssh-copy-id dolphinscheduler@10.123.0.121 # ubuntu-ds-node1
ssh-copy-id dolphinscheduler@10.123.0.122 # ubuntu-ds-node2
ssh-copy-id dolphinscheduler@10.123.0.123 # ubuntu-ds-node3

# 测试免密登录(在任意节点执行)
ssh dolphinscheduler@10.123.0.122 "hostname"
# 应该输出:ubuntu-ds-node2

三、PostgreSQL 数据库准备​

3.1 创建数据库和用户​

在 PostgreSQL (10.123.0.111) 上执行:

CREATE USER dolphinscheduler WITH PASSWORD 'YourStrongPassword123!';
CREATE DATABASE dolphinscheduler OWNER dolphinscheduler;
GRANT ALL PRIVILEGES ON DATABASE dolphinscheduler TO dolphinscheduler;
\c dolphinscheduler
GRANT ALL ON SCHEMA public TO dolphinscheduler;

四、ZooKeeper 集群准备​

DolphinScheduler 依赖 ZooKeeper 实现分布式协调(Master 选举、任务分发、集群管理)。

4.1 部署要求​

  • 版本: ZooKeeper 3.6+(推荐 3.8.x)
  • 节点数: 至少 3 节点(奇数节点,保证选举过半)
  • 端口: 2181(客户端)、2888(集群通信)、3888(选举)

4.2 部署指南​

请参考 ZooKeeper 集群部署指南 完成集群部署。

4.3 验证 ZooKeeper 连接​

在 DolphinScheduler 节点上验证 ZK 连通性:

# 测试连接(替换为实际 ZK 地址)
echo "stat" | nc <zk-server-ip> 2181

# 或使用 zkCli.sh(路径根据实际部署位置)
zkCli.sh -server <zk-server-ip>:2181

五、DolphinScheduler 安装​

5.1 下载安装包​

在 ubuntu-ds-node1 上执行:

cd /tmp
wget https://archive.apache.org/dist/dolphinscheduler/3.4.1/apache-dolphinscheduler-3.4.1-bin.tar.gz
tar -xzf apache-dolphinscheduler-3.4.1-bin.tar.gz
sudo mv apache-dolphinscheduler-3.4.1-bin /opt/dolphinscheduler
sudo chown -R dolphinscheduler:dolphinscheduler /opt/dolphinscheduler

5.2 配置文件修改​

修改 bin/env/dolphinscheduler_env.sh,所有服务共享同一配置:

cd /opt/dolphinscheduler
vim bin/env/dolphinscheduler_env.sh

关键配置项:

# JDK 路径
export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-17-openjdk-amd64}

# 数据库配置(PostgreSQL)
export DATABASE=${DATABASE:-postgresql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
export SPRING_DATASOURCE_URL="jdbc:postgresql://10.123.0.111:5432/dolphinscheduler"
export SPRING_DATASOURCE_USERNAME=dolphinscheduler
export SPRING_DATASOURCE_PASSWORD=YourStrongPassword123!

# DolphinScheduler server related configuration
export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none}
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-UTC}

# ZooKeeper 集群地址
export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-10.123.0.191:2181,10.123.0.192:2181,10.123.0.193: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 SEATUNNEL_HOME=${SEATUNNEL_HOME:-/opt/soft/seatunnel}

export PATH=$HADOOP_HOME/bin:$SPARK_HOME/bin:$PYTHON_LAUNCHER:$JAVA_HOME/bin:$HIVE_HOME/bin:$FLINK_HOME/bin:$DATAX_LAUNCHER:$PATH/bin:$SEATUNNEL_HOME:$PATH

5.3 初始化数据库​

注意: 仅需在 ubuntu-ds-node1 执行一次。

cd /opt/dolphinscheduler
bash tools/bin/upgrade-schema.sh

出现 Schema initialized successfully 表示数据库初始化完成。

5.4 分发到各节点​

前置准备(在所有节点执行):

# 方式一:仅授权 dolphinscheduler 目录(推荐)
sudo mkdir -p /opt/dolphinscheduler
sudo chown dolphinscheduler:dolphinscheduler /opt/dolphinscheduler

# 方式二:授权 /opt 目录(简化操作,不推荐生产环境)
sudo chown dolphinscheduler:dolphinscheduler /opt

分发到 ubuntu-ds-node2 (10.123.0.122):Master + Worker

scp -r /opt/dolphinscheduler/* dolphinscheduler@10.123.0.122:/opt/dolphinscheduler/
# ssh dolphinscheduler@10.123.0.122 "rm -rf /opt/dolphinscheduler/alert-server"

分发到 ubuntu-ds-node3 (10.123.0.123):Worker

scp -r /opt/dolphinscheduler/* dolphinscheduler@10.123.0.123:/opt/dolphinscheduler/
# ssh dolphinscheduler@10.123.0.123 "rm -rf /opt/dolphinscheduler/master-server /opt/dolphinscheduler/api-server /opt/dolphinscheduler/alert-server"

5.5 配置 MySQL 驱动(可选)​

如果需要使用 MySQL 数据源,需要在所有节点安装 MySQL 驱动:

# 下载 MySQL 驱动到安装目录
cd /opt/dolphinscheduler

# 复制到各服务 libs 目录
cp mysql-connector-j-8.0.33.jar master-server/libs/
cp mysql-connector-j-8.0.33.jar worker-server/libs/
cp mysql-connector-j-8.0.33.jar api-server/libs/
cp mysql-connector-j-8.0.33.jar alert-server/libs/

分发到其他节点:

# ubuntu-ds-node2
scp mysql-connector-j-8.0.33.jar dolphinscheduler@10.123.0.122:/opt/dolphinscheduler/
ssh dolphinscheduler@10.123.0.122 "cd /opt/dolphinscheduler && cp mysql-connector-j-8.0.33.jar master-server/libs/ worker-server/libs/"

# ubuntu-ds-node3
scp mysql-connector-j-8.0.33.jar dolphinscheduler@10.123.0.123:/opt/dolphinscheduler/
ssh dolphinscheduler@10.123.0.123 "cd /opt/dolphinscheduler && cp mysql-connector-j-8.0.33.jar worker-server/libs/"

六、启动服务​

6.1 启动各节点服务​

ubuntu-ds-node1 (Master + API + Alert):

cd /opt/dolphinscheduler
./bin/dolphinscheduler-daemon.sh start master-server
./bin/dolphinscheduler-daemon.sh start api-server
./bin/dolphinscheduler-daemon.sh start alert-server


./bin/dolphinscheduler-daemon.sh stop master-server
./bin/dolphinscheduler-daemon.sh stop api-server
./bin/dolphinscheduler-daemon.sh stop alert-server

ubuntu-ds-node2 (Master + Worker):

cd /opt/dolphinscheduler
./bin/dolphinscheduler-daemon.sh start master-server
./bin/dolphinscheduler-daemon.sh start worker-server

./bin/dolphinscheduler-daemon.sh stop master-server
./bin/dolphinscheduler-daemon.sh stop worker-server

ubuntu-ds-node3 (Worker):

cd /opt/dolphinscheduler
./bin/dolphinscheduler-daemon.sh start worker-server

./bin/dolphinscheduler-daemon.sh stop worker-server

6.2 验证服务状态​

# 在各个节点上检查进程
jps -l | grep DolphinScheduler

# 检查 ZooKeeper 集群(在任意节点执行)
echo stat | nc 10.123.0.121 2181 # ubuntu-ds-node1
echo stat | nc 10.123.0.122 2181 # ubuntu-ds-node2
echo stat | nc 10.123.0.123 2181 # ubuntu-ds-node3

6.3 访问 Web UI​

6.4 集群验证​

6.4.1 查看节点状态​

登录 Web UI 后,进入 监控中心 → 节点管理:

  • Master 节点:ubuntu-ds-node1、ubuntu-ds-node2 应显示「在线」
  • Worker 节点:ubuntu-ds-node2、ubuntu-ds-node3 应显示「在线」

所有节点在线即部署成功。

6.4.2 测试任务执行​

  1. 进入 项目管理,创建测试项目

  2. 创建工作流,添加一个 Shell 任务:

    echo "Hello DolphinScheduler"
  3. 保存并上线工作流

  4. 运行工作流,查看执行日志

任务执行成功证明集群正常工作。

6.4.3 常用运维命令​

# 查看服务状态
./bin/dolphinscheduler-daemon.sh status master-server
./bin/dolphinscheduler-daemon.sh status worker-server
./bin/dolphinscheduler-daemon.sh status api-server

# 重启服务
./bin/dolphinscheduler-daemon.sh restart master-server

# 停止服务
./bin/dolphinscheduler-daemon.sh stop api-server

七、配置 systemd 开机自启​

7.1 创建 systemd 服务文件​

MasterServer 服务(ubuntu-ds-node1、ubuntu-ds-node2):

sudo tee /etc/systemd/system/dolphinscheduler-master.service > /dev/null << 'EOF'
[Unit]
Description=DolphinScheduler Master Server
After=network.target

[Service]
Type=forking
User=dolphinscheduler
Group=dolphinscheduler
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start master-server
ExecStop=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop master-server
PIDFile=/opt/dolphinscheduler/master-server/pid
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

WorkerServer 服务(ubuntu-ds-node2、ubuntu-ds-node3):

sudo tee /etc/systemd/system/dolphinscheduler-worker.service > /dev/null << 'EOF'
[Unit]
Description=DolphinScheduler Worker Server
After=network.target

[Service]
Type=forking
User=dolphinscheduler
Group=dolphinscheduler
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start worker-server
ExecStop=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop worker-server
PIDFile=/opt/dolphinscheduler/worker-server/pid
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

API Server 服务(ubuntu-ds-node1):

sudo tee /etc/systemd/system/dolphinscheduler-api.service > /dev/null << 'EOF'
[Unit]
Description=DolphinScheduler API Server
After=dolphinscheduler-master.service

[Service]
Type=forking
User=dolphinscheduler
Group=dolphinscheduler
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start api-server
ExecStop=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop api-server
PIDFile=/opt/dolphinscheduler/api-server/pid
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

Alert Server 服务(ubuntu-ds-node1):

sudo tee /etc/systemd/system/dolphinscheduler-alert.service > /dev/null << 'EOF'
[Unit]
Description=DolphinScheduler Alert Server
After=dolphinscheduler-api.service

[Service]
Type=forking
User=dolphinscheduler
Group=dolphinscheduler
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh start alert-server
ExecStop=/opt/dolphinscheduler/bin/dolphinscheduler-daemon.sh stop alert-server
PIDFile=/opt/dolphinscheduler/alert-server/pid
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target
EOF

7.2 启用服务​

sudo systemctl daemon-reload

sudo systemctl enable dolphinscheduler-master
sudo systemctl enable dolphinscheduler-worker
sudo systemctl enable dolphinscheduler-api
sudo systemctl enable dolphinscheduler-alert

sudo systemctl start dolphinscheduler-master
sudo systemctl start dolphinscheduler-worker
sudo systemctl start dolphinscheduler-api
sudo systemctl start dolphinscheduler-alert

sudo systemctl status dolphinscheduler-*


sudo systemctl restart dolphinscheduler-master
sudo systemctl restart dolphinscheduler-worker
sudo systemctl restart dolphinscheduler-api
sudo systemctl restart dolphinscheduler-alert

八、防火墙配置​

sudo ufw allow 22/tcp
sudo ufw allow 12345/tcp
sudo ufw allow 12346/tcp
sudo ufw allow 56788/tcp
sudo ufw enable

九、监控与告警​

tail -f /opt/dolphinscheduler/logs/dolphinscheduler-*.log | grep ERROR

find /opt/dolphinscheduler/logs -name "*.log" -mtime +30 -delete

十、常见问题​

Q1: Master/Worker 注册不上 ZooKeeper​

# 检查 ZK 连接(替换为实际 ZK 地址)
echo stat | nc <zk-server-ip> 2181

# 检查 DS 配置
tail -100 /opt/dolphinscheduler/logs/dolphinscheduler-master.log
grep REGISTRY_ZOOKEEPER_CONNECT_STRING /opt/dolphinscheduler/bin/env/dolphinscheduler_env.sh

Q2: 数据库连接失败​

psql -h 10.123.0.111 -U dolphinscheduler -d dolphinscheduler -c "SELECT 1;"
grep -E "DATABASE_HOST|DATABASE_PORT|DATABASE_USERNAME|DATABASE_PASSWORD" /opt/dolphinscheduler/bin/env/dolphinscheduler_env.sh
ls -la /opt/dolphinscheduler/lib/ | grep postgresql

Q3: Web UI 无法访问​

jps -l | grep ApiApplicationServer
netstat -tlnp | grep 12345
curl http://localhost:12345/dolphinscheduler

Q4: 任务执行失败​

tail -200 /opt/dolphinscheduler/logs/dolphinscheduler-worker.log
ls -la /opt/dolphinscheduler/resource/

十一、附录​

11.1 各节点服务分布​

服务ubuntu-ds-node1 (10.123.0.121)ubuntu-ds-node2 (10.123.0.122)ubuntu-ds-node3 (10.123.0.123)
MasterServer✓✓✗
WorkerServer✗✓✓
API Server✓✗✗
Alert Server✓✗✗

11.2 关键端口​

服务端口
API Server12345
WorkerServer12346
MasterServer56788

11.3 关键目录​

目录用途
/opt/dolphinschedulerDolphinScheduler 安装目录
/opt/dolphinscheduler/logs日志目录
/opt/dolphinscheduler/conf配置目录