首批通过分布式安全可靠测评,为关键业务系统打造
路由策略
更新时间:2026-06-20 15:23:46
路由策略介绍
路由策略用于从多副本中选择出一个合适的副本。这里的多副本,可能来自备副本路由时选择出的多个副本,也有可能是类似 select 1 from dual 这种语句,使用了租户的路由信息有多个副本(指租户的机器列表)。
路由策略主要有三种:
Primary Zone 路由:第一优先级
LDC 路由:第二优先级
随机路由:第三优先级
Primary Zone 路由
在多副本选择时,优先发往 Primary Zone(租户的属性,Primary Zone 指副本的 Leader 优先分布在 Primary Zone 中)所在的机器。出现这种路由策略主要有以下两个原因:
OceanBase 中常用的高性能部署架构是租户的 Primary Zone 在一台机器,这样可以避免分布式系统的很多网络开销;
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 如下:
alter system modify zone "z1" set region = "SHANGHAI";
alter system modify zone "z1" set idc = "zue";
结果如下:
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 集群信息失败。
ODP 设置 LDC
ODP 通过配置项或者启动参数设置 LDC 信息,以 zue 为示例机房介绍这两种操作方法。
方法一:ODP 进程启动时通过
-o参数指定设置 LDC 信息cd /opt/taobao/install/obproxy ./bin/obproxy -o proxy_idc_name=zue方法二:通过执行 SQL 语句设置 LDC 信息
mysql> alter proxyconfig set proxy_idc_name='zue';
通过 ODP 执行内部命令 show proxyinfo idc; 可以检查 ODP 内部识别的 LDC 部署情况。
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:复制表中,发往复制表所在的机器。