告別手動排程,海豚排程器 3.1.x 叢集部署讓你輕鬆管理多機!

海豚调度發表於2024-04-23

file

轉載自第一片心意

1 前言

由於海豚排程器官網的叢集部署文件寫的較亂,安裝過程中需要跳轉到很多地方進行操作,所以自己總結了一篇可以直接跟著從頭到尾進行操作的文件,以方便後續的部署、升級、新增節點、減少節點的相關操作。

2. 提前準備

2.1. 基礎元件

  • JDK:下載JDK (1.8+),安裝並配置 JAVA_HOME 環境變數,並將其下的 bin 目錄追加到 PATH 環境變數中。如果你的環境中已存在,可以跳過這步。
  • 二進位制包:在下載頁面下載 DolphinScheduler 二進位制包
  • 資料庫:PostgreSQL (8.2.15+) 或者 MySQL (5.7+),兩者任選其一即可,如 MySQL 則需要 JDBC Driver 8 版本,可以從中央倉庫下載。
  • 註冊中心:ZooKeeper (3.4.6+),下載地址。
  • 程序樹分析
    • macOS安裝pstree
    • Fedora/Red/Hat/CentOS/Ubuntu/Debian安裝psmisc。

注意: DolphinScheduler 本身不依賴 Hadoop、Hive、Spark 等,但如果你執行的任務需要依賴他們,就需要有對應的環境支援。

3. 上傳

上傳二進位制包,並且解壓到某個目錄,具體目錄位置,自己定即可。

要注意目錄名稱,最好在後面加一些字元,要做到安裝目錄和二進位制包解壓目錄不同名,以進行區分。

tar -xvf apache-dolphinscheduler-3.1.7-bin.tar.gz
mv apache-dolphinscheduler-3.1.7-bin dolphinscheduler-3.1.7-origin

後面的 -origin 表示這是原始的二進位制包解壓檔案,後續有配置改動時,可以修改改目錄下的檔案,然後重新執行安裝指令碼。

4. 使用者

4.1. 配置使用者免密及許可權

建立部署使用者,並且一定要配置 sudo 免密。以建立 dolphinscheduler 使用者為例:

# 建立使用者需使用 root 登入
useradd dolphinscheduler

# 新增密碼
echo "dolphinscheduler" | passwd --stdin dolphinscheduler

# 配置 sudo 免密
sed -i '$adolphinscheduler  ALL=(ALL)  NOPASSWD: ALL' /etc/sudoers
sed -i 's/Defaults    requirett/#Defaults    requirett/g' /etc/sudoers

# 修改目錄許可權,使得部署使用者對二進位制包解壓後的 apache-dolphinscheduler-*-bin 目錄有操作許可權
chown -R dolphinscheduler:dolphinscheduler apache-dolphinscheduler-*-bin

注意:

  • 因為任務執行服務是以 sudo -u {linux-user} 切換不同 linux 使用者的方式來實現多租戶執行作業,所以部署使用者需要有 sudo 許可權,而且是免密的。初學習者不理解的話,完全可以暫時忽略這一點。
  • 如果發現 /etc/sudoers 檔案中有 “Defaults requirett” 這行,也請註釋掉。

4.2. 配置機器SSH免密登陸

由於安裝的時候需要向不同機器傳送資源,所以要求各臺機器間能實現SSH免密登陸。配置免密登陸的步驟如下:

su dolphinscheduler

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登陸,則證明成功。

5. 啟動zookeeper

啟動叢集中的 zookeeper 即可。

6. 修改配置

下面所有的操作,均在 dolphinscheduler 使用者下執行。

完成基礎環境的準備後,需要根據你的機器環境修改配置檔案。配置檔案可以在目錄 bin/env 中找到,他們分別是 install_env.shdolphinscheduler_env.sh

6.1. install_env.sh

install_env.sh 檔案配置將 DolphinScheduler 安裝到哪些機器 ,以及每臺機器安裝哪些服務。可以在路徑 bin/env/ 中找到此檔案,之後按照下面的說明修改對應的配置即可。

# ---------------------------------------------------------
# INSTALL MACHINE
# ---------------------------------------------------------
# A comma separated list of machine hostname or IP would be installed DolphinScheduler,
# including master, worker, api, alert. If you want to deploy in pseudo-distributed
# mode, just write a pseudo-distributed hostname
# Example for hostnames: ips="ds1,ds2,ds3,ds4,ds5", Example for IPs: ips="192.168.8.1,192.168.8.2,192.168.8.3,192.168.8.4,192.168.8.5"
# 配置海豚排程器要安裝到那些機器上
ips=${ips:-"ds01,ds02,ds03,hadoop02,hadoop03,hadoop04,hadoop05,hadoop06,hadoop07,hadoop08"}

# Port of SSH protocol, default value is 22. For now we only support same port in all `ips` machine
# modify it if you use different ssh port
sshPort=${sshPort:-"22"}

# A comma separated list of machine hostname or IP would be installed Master server, it
# must be a subset of configuration `ips`.
# Example for hostnames: masters="ds1,ds2", Example for IPs: masters="192.168.8.1,192.168.8.2"
# 配置 master 角色要安裝到哪些機器上
masters=${masters:-"ds01,ds02,ds03,hadoop04,hadoop05,hadoop06,hadoop07,hadoop08"}

# A comma separated list of machine <hostname>:<workerGroup> or <IP>:<workerGroup>.All hostname or IP must be a
# subset of configuration `ips`, And workerGroup have default value as `default`, but we recommend you declare behind the hosts
# Example for hostnames: workers="ds1:default,ds2:default,ds3:default", Example for IPs: workers="192.168.8.1:default,192.168.8.2:default,192.168.8.3:default"
# 配置 worker 角色要安裝到哪些機器上,預設都放到 default 的 worker 分組內,其他分組,可以透過海豚排程器介面進行單獨配置
workers=${workers:-"ds01:default,ds02:default,ds03:default,hadoop02:default,hadoop03:default,hadoop04:default,hadoop05:default,hadoop06:default,hadoop07:default,hadoop08:default"}

# A comma separated list of machine hostname or IP would be installed Alert server, it
# must be a subset of configuration `ips`.
# Example for hostname: alertServer="ds3", Example for IP: alertServer="192.168.8.3"
# 配置 alert 角色安裝到哪個機器上,配置一臺機器即可
alertServer=${alertServer:-"hadoop03"}

# A comma separated list of machine hostname or IP would be installed API server, it
# must be a subset of configuration `ips`.
# Example for hostname: apiServers="ds1", Example for IP: apiServers="192.168.8.1"
# 配置 api 角色安裝到哪個機器上,配置一臺機器即可
apiServers=${apiServers:-"hadoop04"}

# The directory to install DolphinScheduler for all machine we config above. It will automatically be created by `install.sh` script if not exists.
# Do not set this configuration same as the current path (pwd). Do not add quotes to it if you using related path.
# 配置安裝路徑,將會在所有海豚叢集的機器上安裝服務,一定要和上面解壓的二進位制包目錄區分開,最好帶上版本號,以方便後續的升級操作。
installPath=${installPath:-"/opt/dolphinscheduler-3.1.5"}

# The user to deploy DolphinScheduler for all machine we config above. For now user must create by yourself before running `install.sh`
# script. The user needs to have sudo privileges and permissions to operate hdfs. If hdfs is enabled than the root directory needs
# to be created by this user
# 部署使用的使用者,用上面自己新建的使用者即可
deployUser=${deployUser:-"dolphinscheduler"}

# The root of zookeeper, for now DolphinScheduler default registry server is zookeeper.
# 配置註冊到 zookeeper znode 名稱,如果配置了多個海豚叢集,則需要配置不同的名稱
zkRoot=${zkRoot:-"/dolphinscheduler"}

6.2. dolphinscheduler_env.sh

可以在路徑 bin/env/ 中找到此檔案,該檔案用來配置用到的一些環境,按照下面的說明修改對應配置即可:

# JDK 路徑,一定要修改
export JAVA_HOME=${JAVA_HOME:-/usr/java/jdk1.8.0_202}

# 資料庫型別,支援 mysql、postgresql
export DATABASE=${DATABASE:-mysql}
export SPRING_PROFILES_ACTIVE=${DATABASE}
# 連線 url,主要修改下面的 hostname,最後配置的是東八區
export SPRING_DATASOURCE_URL="jdbc:mysql://hostname:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"
export SPRING_DATASOURCE_USERNAME=dolphinscheduler
# 如果密碼比較複雜,則需要前後使用英文單引號括起來
export SPRING_DATASOURCE_PASSWORD='xxxxxxxxxxxxx'

export SPRING_CACHE_TYPE=${SPRING_CACHE_TYPE:-none}
# 配置各角色 JVM 啟動時使用的時區,預設為 -UTC,如果想要完全支援東八區,則設定為 -GMT+8
export SPRING_JACKSON_TIME_ZONE=${SPRING_JACKSON_TIME_ZONE:-GMT+8}
export MASTER_FETCH_COMMAND_NUM=${MASTER_FETCH_COMMAND_NUM:-10}

export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
# 配置使用的 zookeeper 地址
export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-hadoop01:2181,hadoop02:2181,hadoop03:2181}

# 配置使用到的一些環境變數,按照自己的需要進行配置即可,所有需要的元件,都自己安裝
export HADOOP_HOME=${HADOOP_HOME:-/opt/cloudera/parcels/CDH/lib/hadoop}
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-/etc/hadoop/conf}
export SPARK_HOME1=${SPARK_HOME1:-/opt/soft/spark1}
export SPARK_HOME2=${SPARK_HOME2:-/opt/spark-3.3.2}
export PYTHON_HOME=${PYTHON_HOME:-/opt/python-3.9.16}
export HIVE_HOME=${HIVE_HOME:-/opt/cloudera/parcels/CDH/lib/hive}
export FLINK_HOME=${FLINK_HOME:-/opt/flink-1.15.3}
export DATAX_HOME=${DATAX_HOME:-/opt/datax}
export SEATUNNEL_HOME=${SEATUNNEL_HOME:-/opt/seatunnel-2.1.3}
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:$SEATUNNEL_HOME/bin:$CHUNJUN_HOME/bin:$PATH

6.3. common.properties

從自己的 hadoop 叢集上下載 hdfs-site.xml core-site.xml 檔案,然後放到 api-server/conf/worker-server/conf/ 目錄下。如果是自己搭建的 apache 的原生叢集,則從各個元件的 conf 目錄下找,如果是 CDH ,則可以透過 CDH 介面直接下載。

修改 api-server/conf/worker-server/conf/ 目錄下的這個檔案,該檔案主要用來配置資源上傳相關引數,比如將海豚的資源上傳到 hdfs 等,按照下面的說明修改即可:

# 本地路徑,主要用來存放任務執行時的臨時檔案,要保證使用者對該檔案具有讀寫許可權,一般保持預設即可,如果後續任務執行報錯說是對該目錄下的檔案沒有操作許可權,直接將該目錄許可權修改為 777 即可
data.basedir.path=/tmp/dolphinscheduler

# resource view suffixs
#resource.view.suffixs=txt,log,sh,bat,conf,cfg,py,java,sql,xml,hql,properties,json,yml,yaml,ini,js

# 儲存資源的地方,可用值為: HDFS, S3, OSS, NONE
resource.storage.type=HDFS
# 資源上傳的基本路徑,必須以 /dolphinscheduler 開頭,要保證使用者對該目錄有讀寫許可權
resource.storage.upload.base.path=/dolphinscheduler

# The AWS access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.access.key.id=minioadmin
# The AWS secret access key. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.secret.access.key=minioadmin
# The AWS Region to use. if resource.storage.type=S3 or use EMR-Task, This configuration is required
resource.aws.region=cn-north-1
# The name of the bucket. You need to create them by yourself. Otherwise, the system cannot start. All buckets in Amazon S3 share a single namespace; ensure the bucket is given a unique name.
resource.aws.s3.bucket.name=dolphinscheduler
# You need to set this parameter when private cloud s3. If S3 uses public cloud, you only need to set resource.aws.region or set to the endpoint of a public cloud such as S3.cn-north-1.amazonaws.com.cn
resource.aws.s3.endpoint=http://localhost:9000

# alibaba cloud access key id, required if you set resource.storage.type=OSS
resource.alibaba.cloud.access.key.id=<your-access-key-id>
# alibaba cloud access key secret, required if you set resource.storage.type=OSS
resource.alibaba.cloud.access.key.secret=<your-access-key-secret>
# alibaba cloud region, required if you set resource.storage.type=OSS
resource.alibaba.cloud.region=cn-hangzhou
# oss bucket name, required if you set resource.storage.type=OSS
resource.alibaba.cloud.oss.bucket.name=dolphinscheduler
# oss bucket endpoint, required if you set resource.storage.type=OSS
resource.alibaba.cloud.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com

# if resource.storage.type=HDFS, the user must have the permission to create directories under the HDFS root path
resource.hdfs.root.user=hdfs
# if resource.storage.type=S3, the value like: s3a://dolphinscheduler; if resource.storage.type=HDFS and namenode HA is enabled, you need to copy core-site.xml and hdfs-site.xml to conf dir
# 
resource.hdfs.fs.defaultFS=hdfs://bigdata:8020

# whether to startup kerberos
hadoop.security.authentication.startup.state=false

# java.security.krb5.conf path
java.security.krb5.conf.path=/opt/krb5.conf

# login user from keytab username
login.user.keytab.username=hdfs-mycluster@ESZ.COM

# login user from keytab path
login.user.keytab.path=/opt/hdfs.headless.keytab

# kerberos expire time, the unit is hour
kerberos.expire.time=2


# resourcemanager port, the default value is 8088 if not specified
resource.manager.httpaddress.port=8088
# if resourcemanager HA is enabled, please set the HA IPs; if resourcemanager is single, keep this value empty
yarn.resourcemanager.ha.rm.ids=hadoop02,hadoop03
# if resourcemanager HA is enabled or not use resourcemanager, please keep the default value; If resourcemanager is single, you only need to replace ds1 to actual resourcemanager hostname
yarn.application.status.address=http://ds1:%s/ws/v1/cluster/apps/%s
# job history status url when application number threshold is reached(default 10000, maybe it was set to 1000)
yarn.job.history.status.address=http://hadoop02:19888/ws/v1/history/mapreduce/jobs/%s

# datasource encryption enable
datasource.encryption.enable=false

# datasource encryption salt
datasource.encryption.salt=!@#$%^&*

# data quality option
data-quality.jar.name=dolphinscheduler-data-quality-dev-SNAPSHOT.jar

#data-quality.error.output.path=/tmp/data-quality-error-data

# Network IP gets priority, default inner outer

# Whether hive SQL is executed in the same session
support.hive.oneSession=false

# use sudo or not, if set true, executing user is tenant user and deploy user needs sudo permissions; if set false, executing user is the deploy user and doesn't need sudo permissions
sudo.enable=true
setTaskDirToTenant.enable=false

# network interface preferred like eth0, default: empty
#dolphin.scheduler.network.interface.preferred=

# network IP gets priority, default: inner outer
#dolphin.scheduler.network.priority.strategy=default

# system env path
#dolphinscheduler.env.path=dolphinscheduler_env.sh

# development state
development.state=false

# rpc port
alert.rpc.port=50052

# set path of conda.sh
conda.path=/opt/anaconda3/etc/profile.d/conda.sh

# Task resource limit state
task.resource.limit.state=false

# mlflow task plugin preset repository
ml.mlflow.preset_repository=https://github.com/apache/dolphinscheduler-mlflow
# mlflow task plugin preset repository version
ml.mlflow.preset_repository_version="main"

6.4. application.yaml

需要修改所有角色下 /conf/application.yaml 檔案,包括:master-server/conf/application.yaml、worker-server/conf/application.yaml、api-server/conf/application.yaml、alert-server/conf/application.yaml,主要修改的是時區設定,具體修改如下:

spring:
  banner:
    charset: UTF-8
  jackson:
    # 將時區設定為東八區,只修改這一個地方即可
    time-zone: GMT+8
    date-format: "yyyy-MM-dd HH:mm:ss"

6.5. service.57a50399.js和service.57a50399.js.gz

這兩個檔案在 api-server/ui/assets/ui/assets/ 目錄下。

分別切換到這兩個目錄下,然後分別找到這兩個檔案,之後透過 vim 命令開啟,然後搜尋 15e3,找到之後,將其改為 15e5。這修改的是頁面響應的超時時間,預設值 15e3 表示 15 秒,我們將其改為 1500 秒,在上傳大檔案時,不會因為頁面超時而報錯。

file

7. 初始化資料庫

驅動配置

將 mysql 驅動(8.x)複製到海豚排程器每個角色的 lib 目錄下,包括:api-server/libsalert-server/libsmaster-server/libsworker-server/libstools/libs

資料庫使用者

使用 root 使用者登入 mysql,然後執行以下 sql,mysql5 和 mysql8 都支援:

create database `dolphinscheduler` character set utf8mb4 collate utf8mb4_general_ci;
create user 'dolphinscheduler'@'%' IDENTIFIED WITH mysql_native_password by 'your_password';
grant ALL PRIVILEGES ON dolphinscheduler.* to 'dolphinscheduler'@'%';
flush privileges;

執行資料庫升級指令碼:

bash tools/bin/upgrade-schema.sh

8. 安裝

bash ./bin/install.sh

執行該指令碼,會將本地的所有檔案透過 scp 遠端傳輸給上面配置檔案中配置的所有機器,然後停止對應機器上的角色,之後再啟動所有機器上的角色。

第一次安裝之後,就已經啟動了所有的角色,無需再次單獨啟動任何角色,如果有哪些角色沒啟動的話,可以去對應的機器上檢視對應的日誌,看具體是什麼問題導致的。

9. 啟停服務

# 一鍵停止叢集所有服務
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

一定要注意,必須使用安裝海豚排程器的使用者執行這些指令碼,否則會有一些許可權之類的問題。

每個服務在路徑 <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 ,然後啟動服務,這麼做是為了減少使用者修改配置的成本。

10. 擴容

10.1. 標準方式

參考上面的步驟,進行如下操作:

  1. 新節點
    1. 安裝配置好 JDK。
    2. 新建海豚使用者(Linux 使用者),然後配置免密登入、許可權等。
  2. 之前安裝海豚排程器時解壓二進位制安裝包的機器上。
    1. 登入安裝海豚的使用者。
    2. 切換到之前安裝海豚排程器時解壓二進位制安裝包,修改配置檔案:bin/env/install_env.sh,在該配置檔案中,修改需要在新節點上部署的角色。
    3. 執行 /bin/install.sh 檔案進行安裝,該指令碼會按照 bin/env/install_env.sh 檔案中的配置,將整個目錄重新 scp 到所有的機器,之後停止所有機器上的角色,然後再啟動所有角色。

該方式的缺點:如果海豚排程器上有很多分鐘級別的任務,或者是 flink、spark 之類的實時任務,由於該操作會停止所有的角色,然後啟動,這期間會花費一定的時間,在這期間,這些任務可能會由於整個叢集的重啟,從而異常停止,或者是無法被正常排程起來。但海豚排程器自己實現了自動容錯和災備等功能,所以可以這麼操作,最後觀察下所有任務執行是否正常。

10.2. 簡單方式

參考上面的步驟,進行如下操作:

  1. 新節點
    1. 安裝配置好 JDK。
    2. 新建海豚使用者(Linux 使用者),然後配置免密登入、許可權等。
  2. 之前安裝海豚排程器時解壓二進位制安裝包的機器上。
    1. 登入安裝海豚的使用者。
    2. 將之前修改完配置的整個目錄直接壓縮,然後傳輸到新節點上。
  3. 新節點
    1. 在新節點上解壓檔案,然後將其重新命名到之前配置檔案 bin/env/install_env.sh 中配置的安裝目錄下。
    2. 登入安裝海豚的使用者。
    3. 需要在新節點部署哪些角色,就啟動哪些角色,具體指令碼位置:/bin/dolphinscheduler-daemon.sh,啟動命令為:
./dolphinscheduler-daemon.sh start master-server
./dolphinscheduler-daemon.sh start worker-server
  1. 登入到海豚排程器介面,然後“監控中心”中觀察,對應角色在新節點是否啟動。

11.縮容

  1. 在需要下線的機器上,透過 /bin/dolphinscheduler-daemon.sh 指令碼停止機器上所有的角色,停止命令為:
./dolphinscheduler-daemon.sh stop worker-server
  1. 登入到海豚排程器介面,然後“監控中心”中觀察,剛才機器上停止的角色是否已經消失。
  2. 在之前安裝海豚排程器時解壓二進位制安裝包的機器上
  3. 登入安裝海豚的使用者。
  4. 修改配置檔案:bin/env/install_env.sh,在該配置檔案中,刪除下線角色對應的機器。

12. 升級

按照上面的步驟,一步一步操作即可,對於已經有過的操作,無需二次操作。下面是一些具體的操作步驟:

  1. 上傳新版二進位制包。
  2. 解壓,解壓到和舊版安裝目錄不同的目錄,或者是重新命名也可以。
  3. 修改配置檔案,比較簡單的方式是,將上面步驟中涉及到的所有配置檔案,從之前安裝的目錄下複製到新版本目錄下,替換即可。
  4. 將其他節點上部署的一些元件,全部打包,然後解壓放到新節點對應的位置。具體需要複製哪些元件,可以檢視 dolphinscheduler_env.sh 檔案中的配置。
  5. 配置驅動,參考《初始化資料庫》中的步驟。
  6. 停止之前的叢集。
  7. 備份整個資料庫。
  8. 執行資料庫升級指令碼,參考《初始化資料庫》中的步驟。
  9. 執行安裝指令碼,參考《安裝》。
  10. 升級完成,登入介面,檢視“監控中心”,看所有角色是否都成功啟動。

檔案轉載,請標明出處。歡迎大家一起討論技術,寫的不對的地方還請大家一起討論。

原文連結:https://blog.csdn.net/u012443641/article/details/131419391

本文由 白鯨開源 提供釋出支援!

相關文章