首批通过分布式安全可靠测评,为关键业务系统打造
典型 AP 架构部署指南
更新时间:2026-06-29 18:17:49
本文将介绍如何规划与部署 OceanBase 的 AP 能力,涵盖行列混存、单机/分布式拓扑、可读副本类型、路由与容灾策略以及跑批场景下的资源控制,便于在 TP 写为主的前提下合理使用 AP 列存副本与路由策略。
版本与访问路径决策
列存副本(C 副本)的部署方式与读请求如何到达 C 副本,与 OceanBase 数据库版本密切相关,请先确认版本再选路径:
| OceanBase 数据库版本 | 部署 C 副本后,使用列存副本的典型方式 |
|---|---|
| V4.6.0 以前 | 通常需要为访问 C 副本 单独部署 ODP(V4.3.2+),并在 ODP 侧配置弱读、route_target_replica_type、proxy_route_policy、init_sql(如 ob_route_policy = COLUMN_STORE_ONLY)等,使 AP 流量路由到 C 副本。详见下文 「V4.6.0 之前:经 ODP 访问 C 副本」 与 部署与使用列存副本。 |
| V4.6.0 及以上 | 无需为使用列存副本而单独部署一套 ODP 或配置上述 ODP 路由变量。在租户已配置 C 副本的前提下,通过 V4.6.0 引入的列存副本自动选择(系统变量 ap_query_route_policy 等)控制是否走列存;应用可 直连 OBServer,也可继续经已有 ODP 访问,按会话/全局变量生效。详见 部署与使用列存副本。 |
行列混存表(无独立 C 副本)的部署与版本无上述 ODP 强制要求,仍以表级存储形态与 ob_table_access_policy 等为准。
架构总览
OceanBase 的典型 AP 架构可从三个维度理解:
- 行列混存架构:TP 写为主,AP 可读写分离并搭配列存副本;路由支持自动路由与强制指定(具体方式随版本不同,见上文版本表)。
- 单机拓扑:单 Zone 或简单多 Zone 下,F 读(全能副本)支持 TP + AP;C 读(纯列存副本)仅适用于纯 AP。
- 分布式拓扑:多 Zone/多机房下,列存副本与路由策略、容灾降级、负载均衡协同;跑批等重负载场景可通过 Resource Manager 做资源控制。
行列混存架构
读写分离:TP 写为主,AP 列存副本
OceanBase 支持在同一套集群内同时支撑 TP 与 AP 负载,常见两种形态:
- 行列混存表:同一张表同时具备行存与列存形态,TP 写入走行存,AP 查询可由优化器自动选择行存或列存路径,适合 TP 与 AP 混合、且希望强一致读的分析场景。详见 OceanBase 表类型与存储形态。
- 列存副本(C 副本):在独立 Zone 上部署只读列存副本,TP 写与强读走主/备副本(F 副本),AP 分析走 C 副本以实现 TP/AP 资源物理隔离并节省存储。
- V4.6.0 之前:AP 访问 C 副本通常依赖 独立 ODP 与 ODP 侧路由变量,且多为弱读场景。
- V4.6.0 及之后:可通过 列存副本自动选择 直连或使用常规连接访问 C 副本,不要求为 C 副本单独部署 ODP;读一致性仍可通过 ob_read_consistency 等按版本说明配置。
副本与 Locality 的通用说明见 部署与使用列存副本。
路由策略:自动路由与强制指定
- V4.6.0 及之后(含列存副本自动选择):在租户已配置 C 副本时,由
ap_query_route_policy、ap_query_cost_threshold、ap_query_replica_fallback等与优化器行为共同决定是否在列存副本上执行;也可用 Hint 做单条 SQL 控制。详见 部署与使用列存副本。会话级 ob_route_policy。 - V4.6.0 之前(经 ODP 访问 C 副本):不显式指定时由 ODP 默认策略及
ob_route_policy等决定;访问 C 副本时常通过 ODP 的route_target_replica_type、proxy_route_policy以及init_sql中设置ob_route_policy = 'COLUMN_STORE_ONLY'等将 AP 流量导向列存副本。
可读副本类型、ODP 侧路由与容灾降级、负载均衡的详细说明见本文 列存副本与路由策略(详细) 一节以及 ODP 读写分离与路由策略。
行列混存架构如何部署
若采用仅行列混存表、不部署 C 副本(TP 与 AP 同库、强一致读),按以下步骤即可完成部署:
- 建表时选择行列混存或列存:通过表属性指定存储形态,由优化器按查询自动选择行存/列存路径。具体语法见 列存。
- (可选)配置访问偏好:通过系统变量
ob_table_access_policy(如COLUMN_STORE、ROW_STORE、AUTO)指定优先访问行存或列存。 - (可选)跑批与资源隔离:若有物化视图刷新、大批量导入等重负载,通过 Resource Manager 配置资源组或上限,避免影响在线 TP/AP。查看资源配置信息,参见 DBA_OB_RSRC_DIRECTIVES。
验证:对行列混存表执行点查与范围扫描,确认执行计划中的存储格式符合预期。
若采用TP 写为主、AP 走列存副本,则属于「单机/分布式 + C 读」方案,参见下文 单机拓扑 - C 读如何部署 或 分布式拓扑 - 列存副本如何部署。
单机拓扑架构
单机或单 Zone 部署、或 Zone 数较少的场景下,可读副本类型与 AP 的对应关系如下。
F 读(Follow 读):全能副本,支持 TP+AP
- Full 副本(F 副本)包含 Paxos 中的 Leader 与 Follower,参与日志同步,可承担强一致读写与弱读。
- 在单机/少 Zone 拓扑下,若不部署独立 C 副本,AP 查询可走 F 副本(行存或行列混存表的列存部分),由优化器与
ob_table_access_policy等选择行存/列存路径。 - 特点:无需单独列存 Zone,部署简单;TP 与 AP 共享同一批副本,需关注资源隔离(如通过 Resource Manager、用户资源组等)。
F 读如何部署:无需为 AP 做额外部署。集群按常规部署后,建表时选择行列混存或列存(参见 行列混存架构如何部署),TP 与 AP 共用同一套 F 副本即可。若有跑批等重负载,建议配置 Resource Manager 做资源隔离。
C 读:纯列存副本,仅适用于纯 AP
- ColumnStore 副本(C 副本)为只读、纯列存形态,不参与 Paxos 选举,专用于 AP 类负载。
- 单机拓扑下若为某租户增加 C 副本(例如单 Zone 内 F 副本 + 独立 Zone 的 C 副本),则 AP 流量到达 C 副本的方式 随版本不同:
- V4.6.0 之前:须通过 独立 ODP 配置 仅路由到列存副本(如
route_target_replica_type = 'ColumnStore'、proxy_route_policy = 'TARGET_REPLICA_TYPE_FOLLOWER_ONLY'),实现与 TP 的读隔离。 - V4.6.0 及之后:在租户 Locality 中完成 C 副本部署后,配置 列存副本自动选择 相关变量即可,无需为 C 副本单独部署 ODP。
- V4.6.0 之前:须通过 独立 ODP 配置 仅路由到列存副本(如
- 适用场景:以分析为主,希望与 TP 读路径物理隔离;是否采用弱读/强读按业务与 ob_read_consistency 及版本说明选择。
C 读如何部署(单机/少 Zone 下 C 副本):
在租户中指定 C 副本:创建租户时在
LOCALITY中写 C(如F@zone1,F@zone2,C@zone3),或对已有租户 添加 Zone/添加节点 后新增资源池并ALTER TENANT ... LOCALITY增加C@zone4。完整 SQL 见 部署与使用列存副本。按版本配置访问路径
- OceanBase 数据库 ≥ V4.6.0:按 部署与使用列存副本 设置
ap_query_route_policy等;应用连接 OBServer 或现有代理即可,无需为 C 副本单独部署 ODP 或配置 ODP 的route_target_replica_type/proxy_route_policy/init_sql。 - OceanBase 数据库低于 V4.6.0:在独立机器上部署 ODP(V4.3.2+),使用
root@proxysys登录后设置:obproxy_read_consistency = 1、route_target_replica_type = 'ColumnStore'、proxy_route_policy='TARGET_REPLICA_TYPE_FOLLOWER_ONLY'、init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY'。用SHOW PROXYCONFIG核对。
- OceanBase 数据库 ≥ V4.6.0:按 部署与使用列存副本 设置
验证:执行典型 AP 查询,确认计划与监控体现数据来自 C 副本侧(如列存扫描算子);可通过
DBA_OB_CS_REPLICA_STATS/CDB_OB_CS_REPLICA_STATS查看行转列进度。
分布式拓扑部署
多 Zone、多机房或跨地域部署时,除副本类型与路由外,还需考虑容灾降级与负载均衡。
跑批场景下 Resource Manager 做资源控制
- 跑批、大批量导入、物化视图刷新等后台型 AP 任务会占用较多 CPU、IO 等资源,可能影响前台 TP 或在线 AP 查询。
- OceanBase 提供 Resource Manager 能力,可对不同类型的任务(如物化视图刷新、MLOG Purge、批处理任务)做资源隔离与上限配置,避免跑批打满资源。
- 建议在分布式 AP 架构中,为跑批任务单独配置资源组或 Resource Manager 策略,保证在线 TP/AP 的稳定性。相关视图与配置参见 DBA_OB_RSRC_DIRECTIVES 等。
跑批与资源隔离如何部署
在分布式拓扑下,若存在重跑批或物化视图等后台任务,通过 Resource Manager 为相应任务配置资源组或 CPU/IO 上限即可,无需改动副本或 ODP。配置方式与视图见 DBA_OB_RSRC_DIRECTIVES 及资源隔离相关文档。
列存副本与路由策略(分布式)
分布式下 列存副本 + 路由 的规划可拆成两部分理解:
| 维度 | V4.6.0 之前(ODP 访问 C 副本) | V4.6.0 及之后 |
|---|---|---|
| 副本类型选择 | 通过 ODP route_target_replica_type 指定 ColumnStore(不可与 Full/Readonly 组合) |
由 ap_query_route_policy 等与优化器决定是否在列存副本上执行;ob_route_policy 等仍可按版本说明使用 |
| 容灾与回切 | proxy_route_policy:访问列存时常为 TARGET_REPLICA_TYPE_FOLLOWER_ONLY |
列存不可用时是否回退行存由 ap_query_replica_fallback 等控制,见 部署与使用列存副本 |
| 负载均衡 | ODP LDC/IDC 亲和:需 OBServer Zone 配置 IDC/REGION,ODP 配置 proxy_idc_name |
连接仍可能经 ODP 时,LDC 规则仍适用;直连 OBServer 时以 Observer 侧负载与副本选择逻辑为准 |
分布式拓扑下列存副本如何部署
在租户 Locality 中指定 C 副本(可多 Zone);
若 OceanBase 数据库 ≥ V4.6.0:按 部署与使用列存副本 配置会话或全局变量即可,无需为 C 副本单独部署 ODP。
若 OceanBase 数据库低于 V4.6.0:为访问 C 副本部署独立 ODP(V4.3.2+),配置弱读 +
route_target_replica_type='ColumnStore'+proxy_route_policy='TARGET_REPLICA_TYPE_FOLLOWER_ONLY'+init_sql='set @@ob_route_policy = COLUMN_STORE_ONLY'。验证请求与行转列进度;多机房时在 使用 ODP 的场景下可继续配置 Zone 的
IDC/REGION与 ODPproxy_idc_name做 LDC 亲和。完整 Locality 示例见 部署与使用列存副本。
列存副本与路由策略
经 ODP 访问 C 副本时的可读副本类型(route_target_replica_type)
适用版本:V4.6.0 之前。
- Full:全能副本(Leader + Follower),参与日志同步,支持 TP+AP。
- Readonly:只读副本,用于读扩展。
- ColumnStore:列存副本,专用于 AP;不可与 Full/Readonly 组合。配置为仅列存时,容灾策略固定为不允许回切主副本,且
proxy_route_policy须为TARGET_REPLICA_TYPE_FOLLOWER_ONLY。
路由与容灾降级(proxy_route_policy)
适用版本:V4.6.0 之前。
TARGET_REPLICA_TYPE_WITH_LEADER:主副本与指定副本同时参与路由,无需容灾降级逻辑。TARGET_REPLICA_TYPE_FOLLOWER_FIRST:优先指定类型副本,全部不可用时降级读主。TARGET_REPLICA_TYPE_FOLLOWER_ONLY:仅路由到指定类型副本,不可用时断开连接,不回切主;将流量定向至列存副本时固定使用此策略。
服务端列存副本选择
适用版本:V4.6.0 及以上版本。
- 以
ap_query_route_policy、ap_query_cost_threshold、ap_query_replica_fallback为主;说明与决策表见 部署与使用列存副本。 - ob_route_policy 作用于 OBServer 内部读路径可选的副本类型。
负载均衡(LDC/IDC)
- 在 流量经过 ODP 时,ODP 通过 LDC 在可选副本集合内按同 IDC → 同 Region → 跨 Region 排序,实现地域亲和与负载均衡。
- 需在 OBServer 侧为 Zone 配置
IDC、REGION,在 ODP 侧配置proxy_idc_name。详见 ODP 读写分离与路由策略 及 SQL 路由。
部署前置与选型决策
前置条件
在开始部署前,请确认:
- 版本与路径:已根据本文 「版本与访问路径决策」 确定是走 ODP 专线路由(低于 V4.6.0) 还是 列存副本自动选择(V4.6.0 及以上)。
- ODP(仅 V4.6.0 之前访问 C 副本时):访问 C 副本的 ODP 须为 V4.3.2 及以上,且建议单独部署,不与访问 F 副本的 ODP 混用。
- 集群与租户:集群已按规划完成部署(如 2F1A、3F 等);若采用 C 副本,需至少有一个 Zone 用于部署 C 副本,且该 Zone 建议仅放 C 副本。
- 网络与权限:应用与 OBServer/ODP 之间网络互通;执行 Locality、租户、ODP 配置的账号具备相应权限。
部署建议
| 场景 | 建议 |
|---|---|
| 选型 | 仅需同库 TP+AP、强一致读 → 行列混存表;需 TP/AP 物理隔离、分析走 C 副本 → 列存副本 + 按版本选择 ODP 或自动选择变量。 |
| C 副本数量 | 自 V4.3.5 BP1 起支持多 C 副本,建议最多 3 个。 |
| 访问 C 副本 | 低于 V4.6.0:独立 ODP + 路由变量;V4.6.0 及以上:无需为 C 副本单独部署 ODP。C 副本所在 Zone 建议仅部署 C 副本,避免与 F/R 混部。 |
| 跑批与资源 | 存在重跑批、物化视图刷新时,建议配置 Resource Manager 做资源隔离与上限。 |
| 合并与 DDL | C 副本合并较慢,未完成前无法发起新一轮租户级合并;DDL 会加重资源占用,建议在低峰操作。 |
更多注意事项见 部署与使用列存副本。