调度中心(powerjob-server)部署

2,460次阅读
没有评论

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
 0
评论(没有评论)

文心AIGC

2023 年 12 月
 123
45678910
11121314151617
18192021222324
25262728293031
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026 一水 2025-1...
10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了

10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了

10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了 一水 2025-12-12 13:56:19 ...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026

跳过“逐字生成”!蚂蚁集团赵俊博:扩散模型让我们能直接修改Token | MEET2026 一水 2025-1...
10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了

10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了

10亿美元OpenAI股权兑换迪士尼版权!米老鼠救Sora来了 一水 2025-12-12 13:56:19 ...
IDC MarketScape: 容联云位居“中国AI赋能的联络中心”领导者类别

IDC MarketScape: 容联云位居“中国AI赋能的联络中心”领导者类别

IDC MarketScape: 容联云位居“中国AI赋能的联络中心”领导者类别 量子位的朋友们 2025-1...