调度中心(powerjob-server)部署

1,143次阅读
没有评论

https://www.yuque.com/powerjob/guidence/deploy_server

PowerJob 的设计目标为企业级的分布式任务调度平台,即成为某个公司的调度中间件,该公司下任意业务线的应用仅需要依赖 powerjob-worker 即可获取任务调度与分布式计算的能力。因此,PowerJob 的理想部署模式为一个公司统一部署 powerjob-server 集群,各业务线应用直接接入使用。

在 Spring Data JPA 和 Docker 技术的加持下,调度中心的部署极其简单,预计耗时5分钟!

环境要求

  • JDK 8 或 JDK 11 或 JDK17(三个 LTS 版本)
  • 高版本 JDK 需要自行加入 javax.xml.bind等依赖,详细文档可见LINK
  • 任意 Spring Data Jpa 支持的关系型数据库MySQL/PostgreSQL/Oracle/MS SQLServer…)
  • PostgreSQL 启动报错可见 LINK
  • 达梦等数据库可自行百度“JPA连接达梦数据库”,简单适配即可
  • MongoDB(可选),任意支持 GridFS 的 mongoDB 版本(4.2.6测试通过,其余未经测试,仅从理论角度分析可用),缺失该组件的情况下将无法使用完全版的在线日志、容器部署等扩展功能(无法做到容器与日志数据的高可用,如果 server 单实例部署则无任何影响)

STEP1: 初始化数据库

调度服务器(powerjob-server)的持久化层基于Spring Data Jpa实现,对于能够直连数据库的应用,开发者仅需完成数据库的创建,即运行SQL:CREATE DATABASE IF NOT EXISTS `powerjob-product` DEFAULT CHARSET utf8mb4

  • PowerJob支持环境隔离,提供日常(daily)、预发(pre)和线上(product)三套环境,请根据使用的环境分别部署对应的数据库 powerjob-dailypowerjob-pre powerjob-product
  • 如有手动建立数据库表结构需求,可使用 SQL 文件:下载地址

STEP2: 部署调度服务器(powerjob-server)

调度服务器(powerjob-server)支持任意的水平扩展,即多实例集群部署仅需要在同一个局域网内启动新的服务器实例,性能强劲无上限!

配置讲解

调度服务器(powerjob-server)为了支持环境隔离,分别采用了日常(application-daily.properties)、预发(application-pre.properties)和线上(application-product.properties)三套配置文件,请根据实际需求进行修改,以下为配置文件详解。

配置项 含义 可选
server.port SpringBoot配置,HTTP端口号,默认7700 否,且不建议更改
oms.transporter.active.protocols server 需要激活的通讯协议,建议激活全部支持的协议来支持各种 worker 连接 否,且不建议更改
oms.transporter.main.protocol 主要通讯协议,用于 server 与 server 之间的通讯,用户必须保证该协议可用(端口开放)!
oms.akka.port PowerJob配置,Akka端口号,默认10086 否,且不建议更改
oms.http.port PowerJob配置,多语言客户端HTTP端口号,默认10010 否,且不建议更改
oms.table-prefix 自定义数据库表名前缀
spring.datasource.core.xxx 关系型数据库连接配置
spring.mail.xxx 邮件配置 是,未配置情况下将无法使用邮件报警功能
oms.container.retention.local 本地容器保留天数,负数代表永久保留
oms.container.retention.remote 远程容器保留天数,负数代表永久保留
oms.instanceinfo.retention 任务实例和工作流实例信息的保留天数,负数代表永久保留(不建议) 是,推荐使用默认配置,生产环境保留7天

端口说明:

最省事的方法:所有端口(7700 + 10086 + 10010)全打开。如果你想精细化控制端口,那么请遵循以下原则自行设置:

  1. 对于任何用户,7700 为调度服务器(powerjob-server)的 Web 服务端口,必须打开
  2. oms.协议.port 的端口按需打开,考虑 server-server 和 server-worker 通讯的场景
  • 比如 server-server 默认通过 HTTP 协议交互(参数 oms.transporter.main.protocol控制),那必须打开 HTTP 10010 端口
  • 同时 server-worker 部分通过 HTTP,部分通过 AKKA,则仍需要打开 AKKA 的 10086 端口

注: 调度服务器部署完成后可访问 http://ip:${server.port} 检验是否部署成功!


存储扩展配置

PowerJob 当前支持多套存储(MongoDB、AliyunOSS、MySQL等数据库),接入放可自由选择合适的存储介质。

MongoDB

4.3.4 版本前的主力存储,推荐使用

配置项:

  • oms.storage.dfs.mongodb.uri:mongoDB 连接的 uri,如 mongodb+srv://zqq:No1Bug2Please3!@cluster0.wie54.gcp.mongodb.net/powerjob_daily?retryWrites=true&w=majority
  • spring.data.mongodb.uri:兼容老版本,依旧支持,作用与 oms.storage.dfs.mongodb.uri 一致

AliyunOSS

AliyunOSS 存储支持,海量、安全、低成本、高可靠的云存储服务

配置项:

  • oms.storage.dfs.alioss.endpoint:阿里云 OSS 的 endpoint
  • oms.storage.dfs.alioss.bucket:阿里云 OSS 的存储 bucket
  • oms.storage.dfs.alioss.credential_type:密钥类型,支持以下枚举
  • PWD:账号密码,通过 ak sk 传入密钥
  • SYSTEM_PROPERTY:通过系统参数传入密钥,底层为 com.aliyun.oss.common.auth.SystemPropertiesCredentialsProvider
  • ENV:通过环境变量 OSS_ACCESS_KEY_ID 和 OSS_ACCESS_KEY_SECRET 读取密钥,底层为 com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider
  • oms.storage.dfs.alioss.ak:密钥类型为 PWD 时需要
  • oms.storage.dfs.alioss.sk:密钥类型为 PWD 时需要
  • oms.storage.dfs.alioss.token:密钥类型为 PWD 时需要,可选,如果你不知道这是啥,就不需要传

MySQL系列数据库

针对简单场景,可直接使用数据库进行日志存储,方便快捷。

PS. 官方使用的开发环境为 MySQL8(换句话说,别的 DB 版本没测过,使用前请做好测试哦~

配置项:

  • oms.storage.dfs.mysql_series.driver:驱动名称,如 com.mysql.cj.jdbc.Driver
  • oms.storage.dfs.mysql_series.url:JDBC URL,如 jdbc:mysql://localhost:3306/powerjob-daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
  • oms.storage.dfs.mysql_series.username:数据库用户名,如 root
  • oms.storage.dfs.mysql_series.password:数据库密码
  • oms.storage.dfs.mysql_series.auto_create_table:可选,是否自动建表
  • oms.storage.dfs.mysql_series.table_name:可选,数据库表名称,默认为 powerjob_files

附录:数据库表 schema 要求(以 MySQL8 为例)

CREATE TABLE IF NOT EXISTS powerjob_files (
		`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
		`bucket` VARCHAR ( 255 ) NOT NULL COMMENT '分桶',
		`name` VARCHAR ( 255 ) NOT NULL COMMENT '文件名称',
		`version` VARCHAR ( 255 ) NOT NULL COMMENT '版本',
		`meta` VARCHAR ( 255 ) COMMENT '元数据',
		`length` BIGINT NOT NULL COMMENT '长度',
		`status` INT NOT NULL COMMENT '状态',
		`data` LONGBLOB NOT NULL COMMENT '文件内容',
		`extra` VARCHAR ( 255 ) COMMENT '其他信息',
		`gmt_create` DATETIME NOT NULL COMMENT '创建时间',
		`gmt_modified` DATETIME COMMENT '更新时间',
	PRIMARY KEY ( id ) 
);

方式一:Docker(推荐)

基础版流程:

  1. 下载镜像(最新版本请参考 Docker Hub):docker pull tjqq/powerjob-server:latest
  2. 创建容器并运行(仅需修改行 7,即传入 SpringBoot 相关配置信息),示例如下
docker run -d \
 			 --restart=always \
       --name powerjob-server \
       -p 7700:7700 -p 10086:10086 -p 10010:10010 \
       -e TZ="Asia/Shanghai" \
       -e JVMOPTIONS="" \
       -e PARAMS="--spring.profiles.active=product --spring.datasource.core.jdbc-url=jdbc:mysql://192.168.1.1:3306/powerjob-product?useUnicode=true&characterEncoding=UTF-8 --spring.datasource.core.username=root --spring.datasource.core.password=root --spring.data.mongodb.uri=mongodb://192.168.1.1:27017/powerjob-product" \
       -v ~/docker/powerjob-server:/root/powerjob/server -v ~/.m2:/root/.m2 \
       tjqq/powerjob-server:latest

行1: docker run -d :创建 docker 容器,-d 参数指定为后台运行

行2:指定该容器随着 docker 启动而自启

行3:指定容器名称

行4:指定宿主机与容器的端口映射关系(默认使用 Bridge 网络模式)

行5:时区,默认时区为中国标准时区(Asia/Shanghai),国外用户请修改为正确的时区

行6:JVM启动参数,有需求的可以自己添加(-Xmx、-Xms、-Xmn等)

行7:通过-e Params=""传入 SpringBoot 启动参数,详细参数见上表(最小配置为示例参数,需要传入配置文件名称、JDBC_URL、数据库用户名、数据库密码和 mongoDB 的 URI)

行8:映射数据卷,强烈建议映射/root/powerjob/server和/root/.m2这两个路径,前者存储了 powerjob-server所有的运行时文件(日志),后者可以避免使用 maven 编译容器时重复下载依赖的问题(详见容器章节)。

行9:指定使用的 docker 镜像

特殊需求(maven 私服)版流程:

仅需要使用Git容器功能且搭建了maven私服的场景需要进行此流程。

容器功能需要用到 Maven 来编译代码库,而公司内部往往都会搭建自己的私有仓库,为此,官方 docker 镜像所使用的 maven 无法下载编译所需要的依赖包。对于这种需求的用户,需要您自己构建 docker 镜像,别担心,我们提供了一键构建脚本来简化流程。具体步骤如下:

  1. git clone https://github.com/PowerJob/PowerJob.git,下载本项目源码。
  2. 修改 powerjob-server/docker/settings.xml 文件(加入私服配置参数等等)。
  3. 运行 docker 一键构建脚本 others/script/build_docker.sh,按照提示即可完成自定义 docker 镜像的制作。

方式二:源码部署

  1. 克隆:git clone https://github.com/PowerJob/PowerJob.git,下载本项目源码。
  2. 修改对应环境的配置文件(application-xxx.properties)。
  3. 打包:mvn clean package -U -Pdev -DskipTests,构建调度服务器(powerjob-server)Jar 文件。
  4. 运行:java -jar xxx.jar --spring.profiles.active=product,指定生效的配置文件。注意,宿主机需要打开 7700(HTTP 服务)和 10086(AKKA 服务)端口。

STEP3(可选): 部署前端页面(powerjob-console)

每一个powerjob-server都自带了前端页面,不过 Tomcat(为了完善的 WebSocket支持,现已切换到Undertow )做 Web 服务器的性能就 呵呵了(看评测好像还行,不过对于集群部署调度中心的用户还是建议单独使用源码部署)~

源码部署

  1. 源码克隆:git clone https://github.com/PowerJob/PowerJob-Console.git
  2. 替换地址:修改 .env.product 中的 VUE_APP_BASE_URL 为调度服务器地址
  3. npm install && npm run build
  4. 将构建结果 dist 文件夹拷入 Nginx 静态目录下,修改配置文件,重启 nginx,enjoy~

PS. 开发使用的 node 版本为 v14.20.0

Docker 部署

考虑到前端工程 Docker 化并不流行和实用(静态文件存 CDN 它不香嘛),目前暂未提供 Docker 镜像(有一部分原因是本人不会运行时动态替换容器的实际后端请求地址,如果有能力可以帮忙实现的话非常感谢,附前端项目地址),为此,需要开发者手动构建 Docker 镜像,当然,一键构建脚本奉上~

  1. 项目克隆:git clone https://github.com/PowerJob/PowerJob-Console.git
  2. 替换地址:修改 .env.product 中的 VUE_APP_BASE_URL 为调度服务器地址
  3. chmod 755 script/docker/build.sh && bash script/docker/build.sh

STEP4: 验证 & 注册应用

每一个业务系统初次接入 PowerJob 时,都需要先完成应用注册,即将需要接入的应用名称(appName)录入到调度中心。

点击 执行应用注册 按钮,填入应用名称(appName,重要,需要保证唯一,推荐与真实应用名称保持一致)密码(进入控制台的密,如果顺利完成注册,说明调度服务器和前端页面部署成功!

注册成功后,输入应用名称和密码,即可进入控制台,享受分布式调度与计算的快感~


报警用户录入 按钮用于录入用户信息(姓名、手机号、邮箱地址),收集报警信息,用户注册录入个人信息后,即可通过报警配置进行通知。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 
评论(没有评论)