首批通过分布式安全可靠测评,为关键业务系统打造
强读 Primary Zone 路由
更新时间:2026-04-14 17:41:09
OceanBase 集群中存在多个 Zone,Primary Zone 概念包含 OceanBase 集群中的若干个 Zone。ODP 感知 Primary Zone 包含的若干副本位置,并将无法计算分区位置的强读请求路由到这些副本。
ODP 提供如下两种使用 Primary Zone 的方式。
ODP 配置 Primary Zone:配置 ODP 配置项
proxy_primary_zone_name。配置后 ODP 会将proxy_primary_zone_name中配置的 OBServer 节点加入路由候选列表,并按照路由策略所表明的优先级进行选取。OceanBase 集群 Primary Zone:配置 OceanBase 集群的 Primary Zone,并将 ODP 配置项
enable_primary_zone配置为True。ODP 将处于 Primary Zone 中的 OBServer 节点加入一个名为 PZ 的候选列表,之后直接从 PZ 中选择 OBServer 节点进行路由,当 PZ 候选列表无可用 OBServer 节点时,Primary Zone 路由失效。
注意
配置项 proxy_primary_zone_name 优先级高于 OceanBase 集群的 Primary Zone,proxy_primary_zone_name 值非空时,OceanBase 集群 Primary Zone 路由失效。
示例一:使用配置项 proxy_primary_zone_name
此处以集群涉及到的 OBServer 节点和 Zone 如下为例进行介绍。
| 节点 | Zone |
|---|---|
| 10.10.10.1 | z1 |
| 10.10.10.2 | z2 |
| 10.10.10.3 | z3 |
使用 root@proxysys 账号登录 ODP,修改配置项
proxy_primary_zone_nameobclient [(none)]> ALTER PROXYCONFIG SET PROXY_PRIMARY_ZONE_NAME = 'z2';在用户租户下执行强读请求,使用 EXPLAIN ROUTE 命令查看 ODP 路由选取过程
obclient [test]> EXPLAIN ROUTE SELECT /* +READ_CONSISTENCY(STRONG) */ 888\G输出如下,ODP 将请求路由到 z2 副本。
*************************** 1. row *************************** Route Plan: Trans Current Query:"EXPLAIN ROUTE SELECT /* +READ_CONSISTENCY(STRONG) */ 888" Route Prompts ----------------- > SQL_PARSE [INFO] Maybe counldn't get location cache of the query table since table name is empty. > ROUTE_INFO [INFO] Will route to partition server or routed by route policy > ROUTE_POLICY [INFO] Will route to the proxy primary zone(z2) [INFO] Use default route policy(MERGE_IDC_ORDER) for strong read Route Plan ----------------- > SQL_PARSE:{cmd:"COM_QUERY", table:""} > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"} > ROUTE_POLICY:{replica:"10.10.10.2:50110", idc_type:"SAME_IDC", zone_type:"ReadWrite", role:"FOLLOWER", type:"FULL", chosen_route_type:"ROUTE_TYPE_PRIMARY_ZONE", proxy_primary_zone:"z2"} > CONGESTION_CONTROL:{svr_addr:"10.10.10.2:50110"}
示例二:使用集群 Primary Zone
查看 OceanBase 集群的 Primary Zone
obclient [test]> SELECT TENANT_NAME, PRIMARY_ZONE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME='mysql'\G输出如下,表示在 OceanBase 集群中 z3 的优先级高于 z1 和 z2。
*************************** 1. row *************************** TENANT_NAME: mysql PRIMARY_ZONE: z3;z1,z2执行强读请求,使用 EXPLAIN ROUTE 命令查看 ODP 路由选取过程
obclient [test]> EXPLAIN ROUTE SELECT /* +READ_CONSISTENCY(STRONG) */ 888\G输出如下,ODP 将请求路由到 z3 副本。
*************************** 1. row *************************** Route Plan: Trans Current Query:"EXPLAIN ROUTE SELECT /* +READ_CONSISTENCY(STRONG) */ 888" Route Prompts ----------------- > SQL_PARSE [INFO] Maybe counldn't get location cache of the query table since table name is empty. > ROUTE_INFO [INFO] Will route to partition server or routed by route policy > ROUTE_POLICY [INFO] Will route to the cluster primary zone(z3;z1,z2) [INFO] Use default route policy(MERGE_IDC_ORDER) for strong read Route Plan ----------------- > SQL_PARSE:{cmd:"COM_QUERY", table:""} > ROUTE_INFO:{route_info_type:"USE_PARTITION_LOCATION_LOOKUP"} > ROUTE_POLICY:{replica:"10.10.10.3:50111", idc_type:"SAME_IDC", zone_type:"ReadWrite", role:"FOLLOWER", type:"FULL", chosen_route_type:"ROUTE_TYPE_PRIMARY_ZONE", cluster_primary_zone:"z3;z1,z2"} > CONGESTION_CONTROL:{svr_addr:"10.10.10.3:50111"}