DolphinScheduler 测试/生产部署实例
由于官方指引相对以轻量简单为主,但真实的企业级部署往往情况复杂(如多种混杂环境交错、集成已有DevOps、PaaS平台需统一认证等等),操作过程中可能存在一些问题,因此实战总结了以下操作笔记,以供不时之需。
1. Deploy on Docker
先决条件: (Docker 1.13.1+、Docker Compose 1.11.0+)
此方案仅推荐用于测试,生产环境建议使用 集群模式 和 Kubernetes 模式
- 如果是 containerd 环境,则可使用 https://github.com/containerd/nerdctl 此工具代替 docker:
alias docker='nerdctl'
1.1 环境配置
- 查看容器默认配置
可选,由于 dolphinscheduler 采用 springboot 开发,因此查看容器内默认配置文件就知道所有支持的环境变量名。
docker run --rm \
--entrypoint /bin/sh \
apache/dolphinscheduler:2.0.5 -c "cat /opt/apache-dolphinscheduler-*-bin/conf/application-postgresql.yaml"
cat <<-EOF>config.env.sh
DOLPHINSCHEDULER_OPTS=
REGISTRY_PLUGIN_NAME=zookeeper
REGISTRY_SERVERS=dolphinscheduler-zookeeper:2181
DATABASE_TYPE=postgresql
DATABASE_USERNAME=root
DATABASE_PASSWORD=root
DATABASE_HOST=dolphinscheduler-postgresql
DATABASE_PARAMS="characterEncoding=utf8"
# for compatibility, invalid?
#SPRING_DATASOURCE_URL="jdbc:postgresql://${DATABASE_HOST}:5432/dolphinscheduler"
#SPRING_DATASOURCE_USERNAME="${DATABASE_USERNAME}"
#SPRING_DATASOURCE_PASSWORD="${DATABASE_PASSWORD}"
EOF
1.2 使用 compose 运行容器 (使用内置 postgresql)
注:目前亲测发现,使用 nerdctl 0.20.0 可能存在如启动容器 cni 插件版本不支持错误、12345 端口映射错误,前者可通过手动修改
/etc/cni/dolphinscheduler-*
配置中的 version 字段为MARKDOWN_HASH9eac01120a372609e0afa3b236d9ed2dMARKDOWNHASH
即可,但后者暂未找到解决方法,此时建议使用如下 1.3#直接运行容器。
curl -L -O https://raw.githubusercontent.com/apache/dolphinscheduler/2.0.5/docker/docker-swarm/docker-compose.yml
# 【注】当前 2.0.5 版本官方配置错误,需手动替换为 2.0.5
sed -i 's/2.0.4/2.0.5/g' docker-compose.yml
# 启动前清空主机上的环境变量,否则它会此 java 路径(no such)会导致启动失败。
export JAVA_HOME=
# If the engine is dockerd.
docker-compose up -d
# If the engine is containerd.
nerdctl compose --env-file ./config.env.sh up -d
1.3 (可选)直接运行容器 (使用外部 MySQL)
-
运行所有容器
export ds_servers=(master worker api alert python-gateway)
for dss in ${ds_servers[@]}; do
docker run -d \
--name ds-${dss} \
--network host \
--restart always \
-e DATABASE_TYPE=mysql \
-e DATABASE_HOST="172.29.235.101" \
-e DATABASE_PORT="3306" \
-e DATABASE_DATABASE="dolphinscheduler" \
-e DATABASE_USERNAME="dolphinscheduler" \
-e DATABASE_PASSWORD="dolphinscheduler" \
-e DATABASE_PARAMS='useunicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&useSSL=false&autoReconnect=true' \
-e ZOOKEEPER_QUORUM="172.29.235.101:2181" \
apache/dolphinscheduler:2.0.5 ${dss}-server
done
- 由于许可证限制默认未包含 mysql-connector.jar,需手动拷贝进所有容器。
# 注意版本
#curl -OL 'https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.16/mysql-connector-java-8.0.16.jar'
curl -OL 'https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.48/mysql-connector-java-5.1.48.jar'
# 将驱动拷贝进容器
for dss in ${ds_servers[@]}; do docker cp ./mysql-connector-*.jar ds-${dss}:/opt/apache-dolphinscheduler-2.0.5-bin/lib/; echo $dss; done
# jar 文件授权
for dss in ${ds_servers[@]}; do docker exec -it ds-${dss} /bin/bash -c "chown -R 1005:1005 /opt/apache-dolphinscheduler-2.0.5-bin/lib/; echo $dss"; done
- 重启所有容器
for dss in ${ds_servers[@]}; do docker restart ds-${dss}; done
- 查看日志
docker logs -f --tail 10 ds-master # ds-api ds-worker ds-alert ds-python-gateway
1.5 登录系统
-
默认账号:admin/dolphinscheduler123
2. Deploy on Host (Distributed Cluster)
TODO
3. Deploy on Kubernetes (Distributed Cluster)
- 更多配置参见官方文档: dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/guide/installation/kubernetes.html
TODO
4. Integration with SSO
TODO
- LDAP
TODO