ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

JP1/AJS2作业调度平台核心原理与运维实战

JP1/AJS2作业调度平台核心原理与运维实战 1. JP1到底是什么从一次故障排查说起先讲个我印象特别深的场景。某天凌晨两点系统的日终批处理又挂在第三步了值班同事翻遍日志发现是AJS2的作业调度没按预期触发后续单元。你问为什么不用crontab因为这套环境里有上千个作业跨了十几台服务器互相之间还有依赖关系光靠linux自带的定时器根本管不过来。当时我们用的就是JP1准确说是JP1/AJS2这个核心模块。那次处理完问题之后我花了不少时间把JP1的各个组件和工作原理重新整理了一遍这篇文章就是那次整理的产物。JP1是日立Hitachi推出的一套系统运行管理软件在金融、制造、运营商这些对稳定性和合规性要求很高的行业里用得非常多。它不是一个单一软件而是一整个产品家族涵盖作业调度、性能监控、日志管理、进程守护、分发部署等多个方面。你去看日立官网JP1下面挂着一大串子产品每个子产品有不同的代号比如JP1/AJS2、JP1/PFM、JP1/IM、JP1/Base等等。如果你刚接触JP1最容易犯的错误是拿它和普通的“定时任务工具”去比然后发现好像也就那样。但实际上JP1解决的是企业级批量作业管理的整套问题作业之间有先后关系、有执行条件、有异常分支不同作业要跑在不同服务器上有的作业必须在指定窗口内完成有的作业失败后要自动重跑或跳过。这些东西用脚本硬写当然也能实现但维护成本极高。JP1的定位就是把这一套东西变成可配置、可监控、可审计的标准流程。这篇文章适合谁看一类是刚接手使用JP1做运维的工程师需要快速建立整体认知另一类是正在做技术选型、想了解JP1这类商业调度平台到底能干什么的人。我会把模块架构、核心概念、日常操作和排障经验串起来讲尽量说人话。2. 整体架构与核心模块拆解2.1 JP1家族的“总线”JP1/BaseJP1/Base是整个JP1体系的基础通信中间件。所有其他JP1模块之间的通信、认证、事件收发都要依赖JP1/Base先跑起来。你可以把它理解成一条“走廊”AJS2要向IM发告警PFM要把监控数据上报给管理端这些消息都要走Base这条走廊。没有它其他模块就是孤岛。安装的时候JP1/Base是第一个必须装的东西而且每个节点不管承担什么角色都得装。它有两个关键配置一个是逻辑主机Logical Host的配置一个是通信端口和认证信息的设定。在多机热备或集群环境里逻辑主机的作用尤其重要它的思路是让上层业务不感知物理机切换这在后面讲AJS2双机时还会涉及。2.2 作业调度的核心JP1/AJS2JP1/AJS2Automatic Job Scheduling System 2是整个JP1家族里出镜率最高的模块也是绝大多数企业采购JP1的第一站。它负责把一连串作业组织成“作业流”Jobnet按设定好的时间、条件、依赖关系去触发执行并监控每个作业的结果。AJS2里有几个核心概念你必须先搞清楚作业Job最小的执行单元可以是一条命令、一个脚本、一个批处理文件也可以是JP1自身提供的“任务”类型比如等待文件出现、发送邮件、执行SQL等。作业流Jobnet多个作业按执行顺序和依赖关系组成的集合。AJS2里作业流是调度的基本单位你可以把它理解成一张“流程图”。单元UnitAJS2里所有对象的统称作业、作业流、作业组都是某种单元。调度日历Schedule Calendar定义作业在哪些日期执行、哪些日期不执行的日历规则。JP1把“日历”作为独立对象管理这一点比crontab的纯粹时间表达式灵活得多。执行条件Execution Condition定义作业启动的前置条件比如“前一作业正常结束”“某文件存在”“某端口可达”等。实操中大家最常用的组合是作业流里放脚本作业前后设置依赖关系外层套一个日历再配好异常时的邮件通知。这套组合能覆盖绝大多数批处理场景。2.3 性能与可用性监控JP1/PFM和JP1/IM如果说AJS2是“手”负责干活那JP1/PFMPerformance Management就是“眼睛”负责盯资源。PFM可以采集操作系统层面的CPU、内存、磁盘、网络指标也可以采集数据库、中间件的专用指标数据落到PFM的数据库里再通过控制台做成图表和报表。JP1/IMIntegrated Management则是告警事件的中枢。各个模块产生的异常事件都会送进IM由IM做过滤、关联、通知并且可以和CMDB、工单系统、短信网关对接。IM里核心的概念是“严重度”和“动作”每个事件可以定义紧急、重要、严重、次要等不同级别再指定对应的通知动作比如发邮件、执行某个恢复脚本等。JP1/IM在生产环境中非常能给运维兜底。比如AJS2某个作业流跑挂了可以配置IM事件来触发一张值班工单或者直接调用一个重启脚本。这种“事件驱动自动化”的能力很多单位其实没充分利用默认只拿它当告警面板用比较可惜。2.4 其他常见模块JP1/NETM、JP1/SES、JP1/Cm2除了上面三个JP1家族还有一些细分场景的模块我这里简单带一下模块主要用途典型场景JP1/NETM网络与服务器批量管理、软件分发、远程资产盘点大规模PC或服务器的软件批量安装、补丁更新JP1/SES日志监控与分析集中收集应用日志按关键字做实时告警或事后审计JP1/Cm2配置管理/资产管理记录服务器配置变更对比差异辅助合规审计如果你的环境里只有AJS2可以暂时不用关注这些。但如果是整体规划建议把SES和NETM纳入视野因为日志和配置管理迟早要补上。3. 环境准备与安装部署的关键细节3.1 规划主机角色和通信矩阵JP1生产环境最典型的部署方式是“管理服务器执行代理”两层结构。管理服务器Manager装的是AJS2的服务端负责调度和存储定义执行代理Agent装在被管主机上接收指令并实际执行作业。部署前最重要的一步是画清楚通信矩阵。JP1各模块之间的通信依赖固定端口比较常见的有28000系列端口用于Base的通信AJS2的Manager和Agent之间默认走HTTPS或专用端口。如果机器之间有防火墙一定要提前梳理端口清单否则装完发现Agent连不上Manager排查起来很痛苦。我个人的建议是先画一张表格列清楚每台主机分别承担什么角色Manager/Agent/DB Server/Web Console模块之间的端口方向再做防火墙放通。别嫌这一步麻烦百分之六十的安装问题出在端口不通上。3.2 安装步骤里最容易翻车的环节JP1的安装整体不算复杂Linux环境下通常就是解压、跑安装脚本、做环境设定。但有几个细节非常容易出问题第一操作系统账号必须提前规划。JP1的各个服务默认用JP1特有的服务账号来启动安装时要求指定一个OS用户。实际项目中很多人图省事直接拿root跑后续会出现文件属主混乱、Agent无法正常启动的问题。我自己一般是单独建一个专用账号并且保持所有节点账号一致这样在配置Agent连接时能少一大堆麻烦。第二安装顺序不能乱。先装Base再装AJS2或PFM等应用模块最后装管理控制台如AJS2 Web Console / PFM - Manager。如果把顺序搞反后面的模块注册不到Base上启动时就会报“连接到逻辑主机失败”。第三数据库依赖要提前装好。PFM管理端需要数据库来存历史性能数据AJS2也需要数据库存定义和运行履历。JP1对数据库版本有比较明确的支持矩阵安装前一定去官网确认当前版本支持哪种数据库。别拿最新版的数据库去试JP1对数据库版本的兼容性验证往往滞后。3.3 一套可供参考的最小部署参数以中等规模为例假设管理对象是30台服务器、日均跑3000个作业我会这样规划组件建议配置说明AJS2 Manager服务器8核CPU / 32GB内存 / 200GB磁盘作业定义、运行履历都在这里CPU和内存主要消耗在作业并发调度和事件处理上AJS2数据库与Manager同机或独立4核/16GB如果作业量大建议独立部署避免I/O抢占PFM Manager服务器4核/8GB含数据库性能数据有保留周期磁盘按保留30天估算Agent节点2核/4GB只做作业执行负载相对低Web Console服务器2核/4GB早晚高峰多人操作时CPU会上去建议给足一点这个配置不是官方硬性推荐是我根据项目经验做的估算实际还是要按你自己的作业总量做压测。特别是AJS2 Manager的磁盘运行履历和作业执行日志增长很快建议把审核日志和履历文件放到独立磁盘并按季度做归档清理。4. 作业管理与AJS2实操从定义到日常操作4.1 用AJS2定义一个完整作业流我们拿一个典型的日终批量来举例总共四个步骤第一步从上游系统拉取文件第二步做数据校验和清洗第三步做账务汇总第四步生成报表并发送通知。在AJS2里我会按这样的顺序来操作新建一个“作业组”Job Group名称按业务域来比如DAILY_EOD_FINANCE方便后续授权和查找。在作业组下创建四个作业分别指向四个Shell脚本或批处理命令。给作业设置“执行连接”关系作业1完成后执行作业2作业2完成后执行作业3以此类推。AJS2里用“连接”来建依赖关系和画流程图一样直接拖线即可。在作业3和作业4之间加一个“条件判断”如果作业3的返回码是0就继续作业4如果不是0则走异常分支比如触发告警并停止后续作业。给整个作业流挂一个通用日历日期属性设为“工作日执行节假日自动跳过”。在作业流的“固定属性”里设置计划时刻比如每个工作日18:30自动启动。这套配置下来日常调度基本就不用人工干预了。这里重点说第4步AJS2的条件分支是通过“作业结束代码”来判断的。你可以自定义返回码和后续动作比如返回码为10表示“数据量异常但可继续”返回码为20表示“严重错误需要立即停止”。这种基于返回码的分支处理能力比脚本里硬套if [ $? -eq 0 ]要正规得多因为判断逻辑能可视化管理审计也清晰。4.2 日历控制的三种层次JP1的日历功能是一个容易被低估的亮点。它支持三种层次底层日历Base Calendar定义全局的休息日、节假日。可以按周日、按日期范围、按指定日期批量设置。作业流日历Schedule Calendar挂在某个作业流上定义这个作业流的执行日。它引用底层日历但可以再覆盖。比如全局今天虽然是休息日但该作业流今天有一个特殊的“月结任务”要跑就可以在作业流日历里做“例外追加”。作业日历如果某个具体作业和作业流的执行日不同可以单独设置。用得相对少但在“工作日跑主流程、非工作日只跑维护作业”的场景里很好用。我用这个功能处理过一个很头疼的需求某系统的月度结账日是每个月最后一个工作日但如果这个工作是周日实际结账日要放在周日晚上执行、周一早上完成。用普通定时表达式做这种规则要写出一堆条件判断而JP1里直接建一个月末日历再叠加一层“最后工作日”规则非常清爽。4.3 日常运维必备的AJS2命令与操作控制台上当然能完成所有操作但运维人员很多时候需要脚本化、批量化的手段。这里列几个我高频使用的命令以Linux环境为例命令/工具用途ajs2start/ajs2stop启动/停止AJS2服务常配合系统开机启动ajs2status查看AJS2进程和数据库连接状态ajs2rpt按时间段输出作业执行履历报表快速判断哪些作业跑失败ajs2hold/ajs2release临时挂起/恢复某个作业流比在界面上改配置要快很多ajs2act手动启动某个作业流常用于补跑和模拟测试ajs2jobinfor输出某个作业的详细定义和最近执行结果这些命令行工具有个好处可以直接写进运维脚本或告警联动动作里。比如写一个巡检脚本检查ajs2status输出发现服务异常就自动拉起并发送IM告警。这在生产环境里非常实用。另外AJS2的“预测”Forecast功能值得一试。它可以根据日历和执行条件提前算出未来一段时间哪些作业流计划运行、预估运行时间窗口。每次变更前我会跑一遍预测确认变更不会撞上其他批处理窗口。4.4 Agent管理和作业执行结果的查看AJS2的Agent管理在控制台里有专门视图可以看到每台Agent的连接状态、版本号、最后心跳时间。日常检查中我关注的主要是两类异常Agent离线以及Agent上存在“未执行”的作业堆积。Agent离线很好理解网络不通或Agent进程挂了。但“作业堆积”这个问题比较隐蔽。有时候Agent有一个作业是等待某个文件到达而文件源一直没有通知作业就一直卡在“已分配未运行”状态。如果不定期清理这些过期作业会咬住Agent的并发槽位导致真正该跑的作业排不上队。我现在每周会跑一次SQL把“已分配且超过2小时未开始执行”的作业筛选出来逐个判断是继续等还是取消重跑。查看作业执行结果方面AJS2控制台提供树形视图展开作业流可以看到每一步的颜色状态正常是绿色异常是红色运行中是黄色等待中是灰色。这个颜色体系在排查时特别好用看哪个作业变色就能快速定位故障点。5. 性能监控与JP1/PFM的实战用法5.1 PFM能采集什么、怎么用PFM的采集方式分两种一种是直接从OS层面采集系统资源指标另一种是安装对应的数据库/中间件采集器Collector。采集到的数据以固定的“项Item”组织比如CPU使用率、物理内存使用量、磁盘繁忙率等。每一项都有历史归档默认保存周期可以在里设定我一般保留30天太久的性能数据既占空间实际翻看的概率也低。PFM最大的优势不是采集指标而是它的“阈值判定自动动作”机制。你可以针对某个指标设定阈值条件比如“CPU使用率连续5分钟超过90%”满足条件后触发一个动作可以是发告警也可以是调用外部脚本。这一点在应对夜间突发的资源瓶颈时特别有用。5.2 从PFM报表反推系统容量问题有一次用户反馈某应用每天下午3点定时变慢持续十分钟后恢复。从应用日志看不出异常后来在PFM里拉出那个时段的磁盘I/O曲线发现某台服务器的磁盘繁忙率在那个时段飙到了95%。再进一步查发现是另一个团队的定时备份任务恰好落在同一时间点。后来在这个应用和备份任务之间做了时间错峰问题直接消失。如果你没有PFM这类集中式监控这种“跨团队资源争抢”的问题排查起来非常费劲。PFM的价值就在于把历史和实时的指标都串起来出问题时可以先看趋势再定位根因。5.3 PFM控制台的使用技巧PFM的使用有个学习门槛界面里的“记录Record”和“字段Field”概念一开始容易把人绕晕。简单理解一台服务器上运行了很多“记录”每条记录里有很多“字段”每个字段就是一个具体指标。你先选中服务器再选记录类型最后选字段组合起来才能看到对应的曲线。一个实用技巧是把常用的分析视图保存下来。比如我保存了一套“数据库服务器性能全景”视图包含CPU、内存、会话数、锁等待时间四个子图每次排查问题直接打开这个视图一分钟内就能给系统状态做个快速画像。这套自己攒的视图模板比每次临时组合字段要高效得多。6. 常见问题与排查技巧实录6.1 Agent连不上Manager这是JP1环境里出现频率最高的问题。排查路径一般按下面几步走先确认Agent所在主机的jp1base服务状态是否正常。确认Manager主机上对应的逻辑主机和Agent配置是否匹配。网络层面测试端口连通性注意看JP1/Base的端口是否有防火墙阻碍。查看Agent端的日志找到具体的错误码对照JP1联机手册定位。其中第3步最难排查。因为JP1会从高位端口主动对外连接如果防火墙只放行了固定端口实际通信仍可能被拦。我的经验是先在防火墙上启用协调模式观察一段时间日志确认哪些端口被阻断再针对性地放行。6.2 作业流一直挂着不执行场景作业流显示“预约中”或“等待条件成立”但一直不启动。先看两个地方一是日历二是执行条件。日历问题通常是日期属性里忘了添加“执行日设置”。很多新手会预设一个日期但忘记把日期属性改成“执行对象”导致作业流永远在等待。执行条件的问题则要看条件是否被其他作业“占有”。JP1的条件是可以被多个作业流引用的如果某个条件已经被另一个长时间运行的作业流占用当前作业流就会一直等待。这种情况在界面上不容易发现我一般会查ajs2cond相关的状态输出看看条件当前的“保持者”是谁。6.3 作业返回码异常导致误告警AJS2默认会把非0返回码判断为异常结束。但有些脚本即使正常执行最后一句命令的返回码也可能不是0。比如脚本最后调用一个“查询无结果”的命令返回码是1但整个业务其实是正常的。这种情况有两个解决办法一是在脚本结尾强制exit 0二是在AJS2作业定义里把该作业的“异常判定返回码”范围改大比如“返回码大于5时才判定为异常”。我更推荐第一种因为在脚本里明确exit 0能让逻辑更透明也方便其他系统理解。这里也是JP1和普通crontab很大的区别JP1把“返回码判定规则”也作为可配置项交给了用户灵活性高但误配置的话会掩盖真实故障。6.4 常见问题速查表现象可能原因快速处理Manager无法启动Base未启动或数据库连接异常先启动Base再检查数据库监听最后启动Manager服务作业提交到“暂存”区后一直不运行未设置日历或执行条件未满足打开作业流属性确认日历中有执行日、条件已就绪Agent上脚本执行慢作业超时脚本本身的问题或Agent资源不足在Agent端直接执行脚本对比耗时排查资源占用和锁等待PFM图表没有数据Collector未启动或记录采集失败确认Collector进程状态重跑记录定义并测试采集邮件通知收不到SMTP地址错误或通知组未配置先在IM里用“测试送信”功能验证SMTP配置6.5 补充一条经验给作业流写“操作手册”这个建议可能听着不像技术活但真的能在关键时刻救命。每新增一个作业流我在定义属性里会顺手写一段“说明”内容包含业务用途、负责人、上游依赖、下游影响、异常处理方法。JP1的作业流属性里是有“说明”字段的不少人空着不用。有一次凌晨系统批量中断新人值班翻到异常作业流靠属性说明里的“联系某某团队、检查某目录下文件是否生成”直接顺藤摸瓜解决了问题。定义运维资产的说明书属性占用不了多少时间但非常管用。7. 一点个人心得把JP1当平台看最后说一点我自己长期用下来的直觉性判断。JP1这个东西如果你是拿它当“高级crontab”用那它确实显得繁琐。界面层级多、对象概念多、端口环境复杂初次接触很容易觉得笨重。但如果你把它当成一个平台来运营价值就会显出来。我自己的体会是JP1这类商业调度工具真正解决的不是“定时执行”这个动作而是围绕调度发生的一整套治理问题。谁能看、谁能改、改了留没留审计、故障了怎么通知、作业之间怎么依赖、跨系统怎么权限隔离这些才是生产环境里真正让人头疼的事。你在crontab里敲一条命令可能只需要一分钟但要把这个作业的权限、告警、依赖关系、运行记录都管起来就不是一分钟的事了。还有一点JP1的线上故障往往不只是简单的“服务挂了”更多时候是配置、权限、网络、资源四者叠加的结果。排查的时候建议先打开JP1自带的日志体系把AJS2、Base、IM这几类日志的时间轴对齐往往能发现真正的问题链。别一上来就怀疑Agent重启、数据库重启那是最后的办法不是第一步的思路。如果你刚接触JP1有条件的话建议搭一套最小环境自己玩一星期。装上Base加AJS2建三五个作业流故意把某个作业的依赖关系配错触发一次异常亲手看看告警怎么报、日志怎么记、恢复怎么做。这套流程走下来你对JP1的熟悉程度会比看多少篇文档都强。遇事不慌多看日志多用官方手册这套软件才能真正变成你手里顺手的工具。
返回列表