Open geosmart opened 3 years ago
DSS(DataSphereStudio)的实现强依赖于Linkis计算中间件,dss包含6个,而底层linkis需要部署18个服务,所以一般基于dss二次开发,关键就是对linkis的hadoop集群做适配,以及超多的微服务导致部署的问题(工作量大,服务间存在依赖,容易出错)。
本文主要的关注点是如何将dss应用于生产环境并采用gerrit + jenkins + ansible + docker实施cicd,实现对linkis和dss的自动化部署,封装每个微服务在不同运行环境的配置和启动脚本。
gerrit + jenkins + ansible + docker
cicd
目前linkis-0.9.4的linkis-mdm和linkis-dsm以及linkis-cs-server微服务实际没有用上 可以在pom中取消编译,assembly中删除打包,生产环境不部署
DSS(DataSphereStudio)的实现强依赖于Linkis计算中间件,dss包含6个,而底层linkis需要部署18个服务,所以一般基于dss二次开发,关键就是对linkis的hadoop集群做适配,以及超多的微服务导致部署的问题(工作量大,服务间存在依赖,容易出错)。
本文主要的关注点是如何将dss应用于生产环境并采用
# 关于DSS DSS(DataSphereStudio)是一个一站式数据应用开发管理门户,基于插拔式的集成框架设计,基于计算中间件`Linkis`实现。 # Linkis部署结构 linkis总共18个微服务 ## Linkis服务列表 * eureka:注册中心 * linkis-gateway:网关 * linkis-resourcemanager:资源管理服务 * linkis-dsm-server:数据源服务 * linkis-mdm-server:元数据管理服务 * linkis-metadata:元数据服务 * linkis-bml:物料库 * linkis-cs-server:统一上下文服务 * linkis-publicservice:公共服务(variable,database,udf,workspace等) >ujes 统一作业执行引擎 * linkis-ujes-hive-enginemanager * linkis-ujes-hive-entrance * linkis-ujes-jdbc-entrance * linkis-ujes-python-enginemanager * linkis-ujes-python-entrance * linkis-ujes-shell-enginemanager * linkis-ujes-shell-entrance * linkis-ujes-spark-enginemanager * linkis-ujes-spark-entrance ## Linkis部署包组成 每个服务的目录结构都一致,ujes部分会多一些引擎相关的配置: * bin:服务启动/停止脚本 * pid文件:linkis.pid * 用户切换脚本:rootScript.sh * 启动服务:start-${SERVICE_NAME}.sh * 停止服务:stop-${SERVICE_NAME}.sh * config:服务配置文件 * log4j2.xml:log4j日志配置 * log4j.properties:日志变量 * application.yml:spring boot配置 * linkis.properties:linkis服务配置 * linkis-engine.properties:linkis ujes引擎配置 * log4j2-engine.xml:ujes引擎log4j日志配置 * lib:依赖jar包 * logs:日志文件 * linkis.log:log4j日志,按天/大小回滚 * linkis.out:jvm启动日志,每次启动覆盖 * linkis-gc.log:jvm gc日志,每次启动覆盖 # DSS部署结构 * dss-web:前端服务(可包含visualis-web) * dss-server:dss后端服务 * dss-flow-execution-entrance:工作流执行入口 * linkis-appjoint-entrance:linkis任务提交入口 * dss-init-db:仅用于第一次初始化数据库 由于linkis和dss都是微众开源的,dss部署包的目录结构和linkis类似; # DSS部署资源规划 安装linkis+dss服务测试环境,采用4核8G*6台虚机: * Server1:linkis-gateway、linkis-publicservice、linkis-cs-server、linkis-dsm-server、linkis-bml、linkis-metadata、linkis-mdm-server * Server2:enginemanager(spark、python)、entrance(spark、python) * Server3:enginemanager(hive、shell)、entrance(hive、shell)、jdbc-entrance * Server4:eureke、linkis-resourcemanager * Server5:dss-server、linkis-appjoint-entrance、dss-flow-execution-entrance * Server6:qualitis-server、azkaban、visualis-server >测试采用简化部署结构,生产eureke,linkis-resourcemanager需要HA部署; >每个服务的堆大小默认设置为1G; >服务间存在依赖关系,需按顺序启动:比如需先启动eureka,gateway,resoucemanager等基础服务,再启动其他应用层服务; 单机资源够的情况下,测试时可以将ujes都部署在一台服务器; ![DataSphereStudio部署图](https://user-images.githubusercontent.com/3156608/99943327-12533580-2dac-11eb-87da-dbb6e538bd90.png) 实际生产环境,根据服务使用人数,具体可参考官方的文档[Linkis生产部署参考指南](https://github.com/WeBankFinTech/Linkis/wiki/Linkis生产部署参考指南)做容量规划。 # DSS的CICD流程 主体CICD流程:代码提交到gerrit,review成功后,自动mvn打包,并通过ansible在测试环境发布重启docker容器,同时生成生产环境的部署包; ## Linkis自定义编译 自定义hadoop版本,修改linkis根目录和linkis-ujes-spark-engine项目的pom.xml文件 比如修改hadoop到2.6 ```xmlgerrit + jenkins + ansible + docker
实施cicd
,实现对linkis和dss的自动化部署,封装每个微服务在不同运行环境的配置和启动脚本。