---
title: "路由策略 | OceanBase 文档中心"
description: 路由策略 路由策略介绍 路由策略用于从多副本中选择出一个合适的副本。这里的多副本，可能来自备副本路由时选择出的多个副本，也有可能是类似 select 1 from dual 这种语句，使用了租户的路由信息有多个副本（指租户的机器列表）。 路由策略主要有三种： Primary Zone 路由：第一优先级 LDC 路由：…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.1.0 企业版

# 路由策略

更新时间：2026-06-20 15:23:46

## 路由策略介绍

路由策略用于从多副本中选择出一个合适的副本。这里的多副本，可能来自备副本路由时选择出的多个副本，也有可能是类似 `select 1 from dual` 这种语句，使用了租户的路由信息有多个副本（指租户的机器列表）。

路由策略主要有三种：

- Primary Zone 路由：第一优先级
 - LDC 路由：第二优先级
 - 随机路由：第三优先级

### Primary Zone 路由

在多副本选择时，优先发往 Primary Zone（租户的属性，Primary Zone 指副本的 Leader 优先分布在 Primary Zone 中）所在的机器。出现这种路由策略主要有以下两个原因：

1. OceanBase 中常用的高性能部署架构是租户的 Primary Zone 在一台机器，这样可以避免分布式系统的很多网络开销；
 2. ODP 在主副本路由时，存在找不出表名和计算不出分区的情况，通过 Primary Zone 路由可以尽量发往主副本。

### LDC 路由

LDC 路由是基于地址位置的路由，其中有两个重要的概念：

- IDC：表示逻辑机房概念
 - Region：表示城市的概念。

ODP 和 OceanBase 数据库都可以设置 LDC 信息。通过 LDC 信息，ODP 可以确定和 OceanBase 数据库的位置关系。当设置了 LDC 信息后，ODP 就会默认使用 LDC 路由。

#### OceanBase 数据库 LDC 设置

OceanBase 数据库的每个 Zone 都可以设置 Region 属性或 IDC 属性，Region 通常设置为城市名（大小写敏感），IDC 代表该 Zone 所处的机房信息，通常设置机房名（小写）。设置 SQL 如下：

```sql
alter system modify zone "z1" set region = "SHANGHAI";
alter system modify zone "z1" set idc = "zue";

```

结果如下：

```sql
mysql> select * from DBA_OB_ZONES;
+-------+----------------------------+----------------------------+--------+-----+----------------+-----------+
| ZONE  | CREATE_TIME                | MODIFY_TIME                | STATUS | IDC | REGION         | TYPE      |
+-------+----------------------------+----------------------------+--------+-----+----------------+-----------+
| z1    | 2022-10-31 11:48:29.040552 | 2022-10-31 11:48:29.041609 | ACTIVE | zue | SHANGHAI       | ReadWrite |
+-------+----------------------------+----------------------------+--------+-----+----------------+-----------+
| z2    | 2022-10-31 11:48:29.040552 | 2022-10-31 11:48:29.041609 | ACTIVE | zue | SHANGHAI       | ReadWrite |
+-------+----------------------------+----------------------------+--------+-----+----------------+-----------+
| z3    | 2022-10-31 11:48:29.040552 | 2022-10-31 11:48:29.041609 | ACTIVE | ztg | HANGZHOU       | ReadOnly  |
+-------+----------------------------+----------------------------+--------+-----+----------------+-----------+
3 rows in set

```

#### 说明

OceanBase 数据库中更新 LDC 的 Region 和 IDC 信息后，需同步更新 OCP 中的配置，否则 OCP 会产生告警，具体操作请参见官网 **云平台 OCP** 文档 [告警参考/OB 告警/ob_cluster_sync_failed 获取 OB 集群信息失败](https://www.oceanbase.com/docs/enterprise-oceanbase-ocp-cn-10000000002099251)。

#### ODP 设置 LDC

ODP 通过配置项或者启动参数设置 LDC 信息，以 zue 为示例机房介绍这两种操作方法。

- 方法一：ODP 进程启动时通过 `-o` 参数指定设置 LDC 信息

  ```shell
  cd /opt/taobao/install/obproxy
  ./bin/obproxy -o proxy_idc_name=zue

  ```
 - 方法二：通过执行 SQL 语句设置 LDC 信息

  ```sql
  mysql> alter proxyconfig set proxy_idc_name='zue';

  ```

通过 ODP 执行内部命令 `show proxyinfo idc;` 可以检查 ODP 内部识别的 LDC 部署情况。

```sql
mysql> show proxyinfo idc;
+-----------------+--------------+-----------------+-----------------+--------------------------------------------------------+-------------+--------------------+
| global_idc_name | cluster_name | match_type      | regions_name    | same_idc                                               | same_region | other_region       |
+-----------------+--------------+-----------------+-----------------+--------------------------------------------------------+-------------+--------------------+
| zue             | obcluster    | MATCHED_BY_NONE | []              | [[0]"z1", [1]"z1", [2]"z2", [3]"z2", [4]"z3", [5]"z3"] | []          | []                 |
+-----------------+--------------+-----------------+-----------------+--------------------------------------------------------+-------------+--------------------+
| zue             | obcluster    | MATCHED_BY_IDC  | [[0]"SHANGHAI"] | [[0]"z1", [1]"z1", [2]"z2", [3]"z2"]                   | []          | [[0]"z3", [1]"z3"] |
+-----------------+--------------+-----------------+-----------------+--------------------------------------------------------+-------------+--------------------+
| zue             | obcluster    | MATCHED_BY_IDC  | [[0]"SHANGHAI"] | [[0]"z1", [1]"z1", [2]"z2", [3]"z2"]                   | []          | [[0]"z3", [1]"z3"] |
+-----------------+--------------+-----------------+-----------------+--------------------------------------------------------+-------------+--------------------+
3 rows in set

```

#### 说明

- 如果只有一个机房，LDC 用处不大，因为默认同机房机器间延迟相同。如果在同机房要使用 LDC 路由，需要划分出 LDC 架构，并设置 OBServer 和 ODP 的 LDC 属性。如果有多个机房，就可以根据机房和城市设置 LDC。
 - 某些特殊情况下，可以通过 trick 方法设置 LDC 信息影响 LDC 路由，但不太推荐这么做。

### 随机路由

通过优先级路由后，如果还有多个副本，进行随机路由即可。如未开启 Primary Zone 路由或者未设置 LDC 路由，就会直接使用随机路由。

## 路由配置和查看

数据路由比较复杂的一个原因是有不同的路由策略，ODP 默认策略是先进行主副本路由和备副本路由，没有副本则进行租户机器路由。如果只有一个副本被选中，则直接路由，否则根据策略路由。

对于 Primary Zone 路由和 LDC 路由，受到配置项控制：

- `enable_primary_zone`：为 true 表示使用 Primary Zone 路由策略
 - `proxy_idc_name`：内容非空（内容为 IDC 的名字）表示使用 LDC 路由

除了现有路由策略，若想使用其它路由策略，可以通过修改配置项 `proxy_route_policy` 控制实现，设置后新策略优先级最高。目前经常设置的其它路由策略有以下两种，都和弱读有关。

- `FOLLOWER_FIRST`：优先发往备副本，如果无备副本可用则发往主副本。
 - `FOLLOWER_ONLY`：只能发往备副本，如果无备副本可用则报错。

ODP 具体使用了什么路由策略，可以在 ODP 的日志中查看关键信息 route_type，如 `ROUTE_TYPE_LEADER` 表示进行了主副本路由。`ROUTE_TYPE_NONPARTITION_UNMERGE_LOCAL` 情况比较复杂，下面介绍主要关键字含义。

- `PARTITON`：选取有副本数据的机器，不区分副本的类型。
 - `NONPARTITION`：不关心表数据分布，任何租户机器都可以。
 - `FOLLOWER`：发往备副本。
 - `LEADER`：发往主副本。
 - `UNMERGE`：发往不在合并状态的机器。
 - `MERGE`：发往在合并状态的机器。
 - `LOCAL`：发往同 IDC（机房）机器。
 - `REMOTE`：发往同城不同 IDC（机房）机器。
 - `REGION`：发往异地的机器。
 - `READONLY`：发往 ReadOnly 属性 Zone 内机器。
 - `READWRITE`：发往 ReadWrite 属性 Zone 内机器。
 - `DUP`：复制表中，发往复制表所在的机器。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
