首批通过分布式安全可靠测评,为关键业务系统打造
OMS 社区版高可用(HA)介绍
更新时间:2026-04-14 15:36:11
OceanBase 迁移服务(OceanBase Migration Service,OMS)社区版的高可用模块(High Available,简称 HA)为数据传输链路的稳定性和连续性提供保障。当 OMS 社区版部署服务器发生单点故障或个别任务进程发生异常时,HA 能够及时发现、介入并尝试恢复。
HA 容灾级别
| 容灾级别 | 是否支持 | 部署要求 | 描述 |
|---|---|---|---|
| 城市级容灾 | 不支持 | -- | 暂不支持。 |
| 机房级容灾 | 支持 | 单地域多节点 多地域多节点 |
OMS 社区版在同一地域的机器需要做跨机房部署。当某一机房故障时,其余机房容量需要能够承接故障机房的所有任务。 |
| 机器级容灾 | 支持 | 单地域多节点 多地域多节点 |
您需要在多节点部署 OMS 社区版。如果您在多地域部署 OMS 社区版,则每一地域中至少需要两台机器。当单机发生故障时,同地域其他机器容量需要能够承接故障机器上的所有任务。 |
| 组件级容灾 | 支持 | 单地域单节点 单地域多节点 多地域多节点 |
对 OMS 社区版部署无要求,单地域单节点亦可。异常组件会通过重启和新建等方式尝试恢复。 |
注意
容灾时资源调度的范围都在同地域内,允许跨机房,但不允许跨地域(就近读写原则)。
HA 组件守护
OMS 社区版包含 4 个组件:
| 组件名称 | 组件用途 | 是否具备高可用能力 |
|---|---|---|
| Store | 数据库增量日志采集 | 是 |
| Incr-Sync | 数据库增量同步写入 | 是 |
| Full-Import | 数据库全量数据导入 | 否 |
| Full-Verification | 数据库全量数据校验 | 否 |
HA 触发场景
从 HA 的角度来看,机房级别的容灾和机器级别的容灾是相同的。机房容灾可以被解释为同时在多台机器上发生的容灾。因此,HA 只关注以下两种场景:
| Store | Incr-Sync | Full-Import | Full-Verification | |
|---|---|---|---|---|
| 机器宕机 | ✅ | ✅ | ❌ | ❌ |
| 组件异常 | ✅ | ✅ | ❌ | ❌ |
机器宕机
每台 OMS 社区版机器都运行着一个类似代理的组件 oms_drc_supervisor,该组件定时向 OMS 社区版元数据库报告心跳。如果 OMS 社区版后台巡检发现某台机器在较长一段时间内(超过了 checkHostDownIntervalSec 设定的时间间隔)未汇报心跳,则 OMS 社区版将该机器标记为宕机。
宕机后 HA 行为
查询宕机机器上 Incr-Sync 组件的任务列表,根据其状态分为 运行中 和其它两个子集合。
对于 运行中 的 Incr-Sync 组件,OMS 社区版将尝试终止其任务进程。但通常该操作无法成功。因为机器已经宕机,向其发送指令很可能无法成功传递。
为确保 Incr-Sync 组件注册信息的全局唯一性,无论该注册信息所对应的 Incr-Sync 组件是否正在运行,OMS 社区版将在同一地域的其他健康机器上重新构建步骤 1 中发现的所有 Incr-Sync 组件,并同时删除它们在宕机机器上的注册信息。
对于原状态是 运行中 的 Incr-Sync 组件,在新机器上启动。原来就不处于运行中的 Incr-Sync 组件,迁移至新机器后保持原状态不变。
机器宕机的注意事项
HA 迁移 Incr-Sync 组件时,会复制其所有配置。
如果机器宕机并重新恢复,可能会观察到 Incr-Sync 双写目标端的情况。此外,由于 HA 迁移过程中已删除注册信息,因此在 OMS 社区版控制台中无法查询到宕机机器上的 Incr-Sync 进程。
组件异常
| 组件名称 | 是否支持 HA | 异常判定条件 | HA 行为逻辑 |
|---|---|---|---|
| Store | 支持 | 见下文。 | 见下文。 |
| Incr-Sync | 支持 | 组件状态异常。 启动中、运行中、已停止和迁移中都不算异常。 |
尝试重启 Incr-Sync 进程。重启后有 10 分钟的冷却时间,在此期间 HA 不会重复操作该组件。 |
| Full-Import | 不支持 | -- | -- |
| Full-Verification | 不支持 | -- | -- |
Store HA 逻辑说明
同一数据源下可能存在多个 Store 以供下游消费,因此 HA 的逻辑比较复杂。本节将详细说明 Store 的 HA逻辑。
对每个数据源,HA 将检查数据源下的 Store 的数量和状态,分为以下情况:
如果 Store 数量为 0,HA 不会干预。
如果 Store 数量 >=1,但状态均为 已停止(用户手工操作停止),HA 不会干预。
步骤 1 和步骤 2 通常是运维人员操作的结果,此时 HA 不新建 Store,以避免影响到日常操作 Store 的连贯性。如果是较大规模的运维动作,建议预先在 OMS 的系统配置中关闭 HA 守护开关,待变更完毕后再重新打开。
如果 Store 数量达到了上限(subtopicStoreNumberThreshold),HA 不会干预。
过多的 Store 数量是导致 HA 失效最常见的原因之一。这种设计初衷是为了避免在某些极端情况下,HA 不断地创建 Store 任务,消耗机器资源。
如果没有任何一个 Store 处于 运行中 状态(正常工作且持续在心跳汇报),HA 将尝试新建 Store。
当 运行中 的 Store 持有的数据无法满足下游的消费需求时(例如,Store 仅存储过去 8 小时的数据,而下游消费需要从 10 小时前开始),且用户在 HA 配置中开启了感知下游消费位点的功能(perceiveStoreClientCheckpoint),HA 也将尝试重新创建新的 Store。
在 HA 新建 Store 时,需要决定新建的 Store 从何时开始抓取数据库日志,即确定 Store 的启动位点 unix timestamp。计算逻辑如下:
如果
perceiveStoreClientCheckpoint=false,HA 不感知下游消费位点。新建 Store 的启动位点 =
${当前时间} - refetchStoreIntervalMin如果
perceiveStoreClientCheckpoint=true,HA 会首先查询所有消费下游的最早位点。新建 Store 的启动位点 =
${下游的最早消费位点} - refetchStoreIntervalMin
组件异常的注意事项
OMS 社区版的迁移任务不支持 Store 共享,每个迁移任务会独立创建、管理、守护自己的 Store 进程。所以如果基于同一个数据库源标识创建了多个迁移任务,HA 会为每个任务独立守护其 Store 进程。
同步任务支持 Store 共享,如果有多个同步任务的源端是同一个数据库实例,且开启了 Store 共享。HA 会为这些任务共通守护 Store。
如果开启了
perceiveStoreClientCheckpoint,但是在 HA 执行的过程中没有发现任何下游,则无法获取下游的最小消费位点。在这种情况下,HA 将放弃操作。
HA 运行配置
HA 运行时的行为依赖以下系统参数控制。您可以在 OMS 社区版控制台的 系统管理 - 系统参数 页面搜索 ha.config 查看和编辑以下参数:
| 范围 | 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| 全局控制 | enable | Boolean | false | HA 总开关。 |
| 全局控制 | checkRequestIntervalSec | Integer | 600 | HA 链路操作同一对象的最小时间间隔,可用来避免短时间内对同一对象重复发起大量容灾操作。 |
| 机器宕机 | enableHost | Boolean | false | 机器宕机 HA 开关。 |
| 机器宕机 | checkHostDownIntervalSec | Integer | 540 | 机器宕机的判定阈值,单位为秒。当一台机器超过此阈值未汇报心跳时,HA 会认为该机器宕机。 |
| 组件异常(Store) | enableStore | Boolean | true | Store HA 开关。 |
| 组件异常(Store) | checkModuleExceptionIntervalSec | Integer | 240 | Store 异常的判定阈值,单位秒。当一个 Store 超过这个时间都没有汇报心跳,HA 会认为该 Store 异常。 |
| 组件异常(Store) | subtopicStoreNumberThreshold | Integer | 5 | 一个「任务-数据源」对上最多可以创建的 Store 数目。当 Store 数量达到这个数量时,OMS 社区版会放弃 HA。 |
| 组件异常(Store) | refetchStoreIntervalMin | Integer | 30 | HA 新建 Store 组件时启动位点基于当前时间回退的分钟数。 注意: 当下游延时较大时,新建的 Store 组件将不能保证满足下游的消费要求。 例如,10:00 时 HA 发现一个 Store 组件异常,因此 HA 新建了 Store 组件,并从 9:30 开始消费数据库的增量日志。位点的计算逻辑是从当前时间 10:00 回退 30 分钟。 |
| 组件异常(Store) | perceiveStoreClientCheckpoint | Boolean | false | 当此配置设置为 true 时,HA 会从下游最早的消费点开始创建新的 Store,并回退 refetchStoreIntervalMin 分钟,以确保新创建的 Store 能够满足所有下游消费的要求。 例如, 10:00 时 HA 发现了一个 Store 异常,此时下游消费到 9:40,HA 新建 Store 将从 9:10 开始消费数据库的增量日志。位点的计算逻辑是下游消费位点 9:40 回退 30 分钟。 |
| 组件异常(Store) | clearAbnormalResourceHours | Integer | 72 | Store 状态异常,且已超过 72 小时未汇报心跳。HA 会尝试清理该 Store,以释放磁盘空间并降低因 Store 数量过多导致的 HA 限制。 |
| 组件异常(Incr-Sync) | enableConnector | Boolean | true | Connector HA 开关。 |