当前位置:   article > 正文

DolphinScheduler 3.0.0 docker部署_dolphinscheduler worker python

dolphinscheduler worker python

 一、目标

        使用docker(不是docker-compose)去部署dolphinscheduler 3.0.0版本。

        本来以为dolphin的镜像应该和其他组件一样的流程(下载 -> 改配置 -> 运行),结果去docker官网下载镜像的时候发现,刚好从3.0.0开始,dolphin的镜像就是分开的了

        官网推荐使用docker-compose去部署,但是,我要部署到鲸云上,就必须用docker,而网上直接docker部署的文章少,所以自己部署完后来记录一下。

二、部署

1.构建自己的dockerfile镜像

        因为我使用mysql数据库,所以需要在镜像的libs目录中添加一个支持mysql的jar包,我添加的是mysql-connector-java-8.0.16.jar(需要的网上找一下应该就可以找到)

(1) api镜像

  1. FROM apache/dolphinscheduler-api:3.0.0
  2. COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
  3. RUN apt-get update

        api组件也是访问ui的组件,如果要访问dolphin的webUI的话,就要安装api

(2)master镜像

  1. FROM apache/dolphinscheduler-master:3.0.0
  2. COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
  3. RUN apt-get update

(3)  worker镜像

  1. FROM apache/dolphinscheduler-worker:3.0.0
  2. COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
  3. # 安装python3环境
  4. RUN sudo apt-get update && \
  5. apt-get install -y --no-install-recommends curl && \
  6. rm -rf /var/lib/apt/lists/*
  7. RUN apt-get update && \
  8. apt-get install -y --no-install-recommends python3 && \
  9. rm -rf /var/lib/apt/lists/*
  10. RUN apt-get update && \
  11. apt-get install -y --no-install-recommends python3-pip && \
  12. rm -rf /var/lib/apt/lists/*

        worker镜像必须要有python镜像,不然跑不了,会报错

(4)alert镜像

  1. FROM apache/dolphinscheduler-alert-server:3.0.0
  2. COPY mysql-connector-java-8.0.16.jar /opt/dolphinscheduler/libs
  3. RUN apt-get update

        alert是负责告警的组件,不安装这个告警的功能就用不了 

(5)tools

        这个组件是初始化数据库的,也是需要放入mysql的jar包,修改mysql配置,但是我没用这个运行起来(这个镜像的bin目录下有一个upgrade-schema.sh的脚本,运行这个就行)

        我是用的之前本地dolphin用的mysql数据库,所以不用初始化,之前的数据也都在,迁移到鲸云的时候,也是直接导出之前mysql的数据为一个sql脚本;

2.打包镜像

(1) api

      在api的Dockerfile文件目录下面执行命令

docker build -t api:3.0.0 .

master:3.0.0 表示的是打包出来的镜像的名字,最末尾的 “ . ” 表示的是是当前目录下的Dockerfile文件

(2)master

         在master的Dockerfile文件目录下面执行命令

docker build -t master:3.0.0 .

master:3.0.0 表示的是打包出来的镜像的名字,最末尾的 “ . ” 表示的是是当前目录下的Dockerfile文件

(3)worker

docker build -t worker:3.0.0 .

(4)alter

docker build -t alter:3.0.0 .

3.修改配置

        4个组件下主要修改application.yaml、dolphinscheduler_env.sh两个配置文件即可

application.yaml:

  1. datasource:
  2. driver-class-name: org.postgresql.Driver
  3. url: jdbc:postgresql://127.0.0.1:5432/dolphinscheduler
  4. username: root
  5. password: root
  6. registry:
  7. type: zookeeper
  8. zookeeper:
  9. namespace: dolphinscheduler
  10. connect-string: localhost:2181
  11. retry-policy:
  12. base-sleep-time: 60ms
  13. max-sleep: 300ms
  14. max-retries: 5
  15. session-timeout: 30s
  16. connection-timeout: 9s
  17. block-until-connected: 600ms
  18. digest: ~

将上述的数据库地址改为自己的mysql数据库,例如

  1. datasource:
  2. driver-class-name: com.mysql.cj.jdbc.Driver
  3. url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler
  4. username: root
  5. password: root
  6. registry:
  7. type: zookeeper
  8. zookeeper:
  9. namespace: dolphinscheduler
  10. connect-string: localhost:2181
  11. retry-policy:
  12. base-sleep-time: 60ms
  13. max-sleep: 300ms
  14. max-retries: 5
  15. session-timeout: 30s
  16. connection-timeout: 9s
  17. block-until-connected: 600ms
  18. #如果你的zk开启了认证,则修改下面的zkName和zkPassword
  19. digest: zookeeperName:zookeeperPass

如果最下面有一个Spring里面也有数据库地址的话,并且你报错连接不到数据库,就把最下面的也改掉就行;

dolphinscheduler_env.sh:

  1. # Database related configuration, set database type, username and password
  2. export DATABASE=${DATABASE:-mysql}
  3. export SPRING_PROFILES_ACTIVE=${DATABASE}
  4. export SPRING_DATASOURCE_URL="jdbc:mysql://mysqlUrl:3306/dolphinscheduler?useUnicode=true&characterEncoding=UTF-8&useSSL=false"
  5. export SPRING_DATASOURCE_USERNAME=root
  6. export SPRING_DATASOURCE_PASSWORD=root
  7. # Registry center configuration, determines the type and link of the registry center
  8. export REGISTRY_TYPE=${REGISTRY_TYPE:-zookeeper}
  9. export REGISTRY_ZOOKEEPER_CONNECT_STRING=${REGISTRY_ZOOKEEPER_CONNECT_STRING:-zkUrl:2181}

将上面几个配置修改为自己的mysql和zk地址即可,其他的环境变量,看自己需求修改,如果没其他需求就用默认的就行

4.运行容器

(1) api

  1. docker run -d --name dolphinscheduler-api \
  2. -v /usr/local/docker/dolphin/api/conf:/opt/dolphinscheduler/conf \
  3. -p 12345:12345 \
  4. -d api:3.0.0

(2) master

  1. docker run -d --name dolphinscheduler-master \
  2. -v /usr/local/docker/dolphin/master/conf:/opt/dolphinscheduler/conf \
  3. -d master:3.0.0

(3) worker

  1. docker run -d --name dolphinscheduler-worker \
  2. -v /usr/local/docker/dolphin/worker/conf:/opt/dolphinscheduler/conf \
  3. -d worker:3.0.0

(4) alter

  1. docker run -d --name dolphinscheduler-alter \
  2. -v /usr/local/docker/dolphin/alter/conf:/opt/dolphinscheduler/conf \
  3. -d alter:3.0.0

5.登录

        到这里,docker部署就已经完成了,接下来登录 http://localhost:12345/dolphinscheduler 就可以去使用了,默认用户admin,默认密码dolphinscheduler123

四、遇到的问题

问题1:  dolphin的4个组件是怎么关联起来的

        这里一开始我以为要配置什么ip地址,因为在本地使用jar包部署的时候,就有一个配置文件中,需要配置master的ip,worker的ip等。

        但是,其实docker部署是不需要这个配置的,我们配置的zk就是用来管理和关联这些组件的;每启动一个组件,这个组件就会去zk的指定的namespace下面注册自己的信息,注册内容是“ip:端口”,所以master要找worker的时候,就会去zk里面找worker注册的信息,就可以找到ip和端口去访问了

问题2: 鲸云上部署的时候,必须要设置暴露出来的端口,和检查健康的地址

 api:     

  1. ​ 端口:12345
  2. 健康地址:http://localhost:12345/dolphinscheduler/actuator/health

master:       

  1. ​端口:5679
  2. 健康地址:http://localhost:12345/dolphinscheduler/actuator/healthhttp://localhost:5679/actuator/healthhttp://localhost:12345/dolphinscheduler/actuator/health

 worker:     

  1. 端口:1235
  2. 健康地址:http://localhost:12345/dolphinscheduler/actuator/healthhttp://localhost:1235/actuator/healthhttp://localhost:12345/dolphinscheduler/actuator/health

 alert:

  1. 端口:50053
  2. 健康地址:http://localhost:50053/actuator/health

问题3: 本地docker部署成功后,转移到鲸云上部署时候发现,master和worker访问使用的是容器名字(hostname),但是这个容器是是不知道这些hostname代表的ip是什么的,所以就报错不能识别hostname;去zk查看注册信息就会发现,注册的时候,就是用hostname注册的

​​​​​​​

解决:

        因为鲸云底层其实是k8s,从启动的容器中执行命令env发现有两个env参数:

  1. KUBERNETES_POD_NAME=app-e1d5b6be5f6c4d0a876d26cc-1-7866dc6fd-mw7ht 
  2. KUBERNETES_POD_IP=10.172.131.105

这里他明显是拿 KUBERNETES_POD_NAME去注册了,所以我们需要去源码中简单修改一下,使代码用KUBERNETES_POD_IP去zk里面注册

类地址:org.apache.dolphinscheduler.common.utils.NetUtils

然后在使用dolphin已经写好的dockerfile重新打包一个master和worker镜像出来即可;

--如果你是新手,可以按照下面来执行:

1.去下载源码

2.编译:mvn clean install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true

3.修改好源码,具体就是添加上面图片的第一个if语句即可;

4.找到master和worker的dockerfile文件

 这里执行的时候 “ADD ./target/master-server $DOLPHINSCHEDULER_HOME”会去target文件下找master-server,然后添加到容器中,但是我执行的时候,一直说找不到这个地址,所以我直接把mastr-server这个目录放到了和我的Dockerfile同一个目录下了,然后把这个地方改成了“ADD ./master-server $DOLPHINSCHEDULER_HOME”;(这里targer下面的master-server、worker-server是在第二步编译的时候生成的,如果你清空了找不到,就再去编译一次)

5. 修改docker镜像的名字

6.运行

         你发现本地产生了你的docker镜像后,就大功告成了,然后和一开始的步骤一样给这个镜像添加好mysql的jar包,修改mysql地址,zk地址就可以用了;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/587464
推荐阅读
相关标签
  

闽ICP备14008679号