什么是LDC路由

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】什么是LDC路由
【复现路径】问题出现前后相关操作

5 个赞

一、什么是 LDC

LDC(Logical Data Center,逻辑数据中心) 是 OceanBase 在多 IDC 场景下定义的一个逻辑概念。

  • 每个 OBServer 节点都可以通过配置,被标记为属于某个 LDC;
  • 每个 ODP 也配置了自己的 LDC;
  • 这样,当 ODP 接到请求时,就可以根据客户端 → ODP → OBServer 的 LDC 关系,来决定最优的路由目标。

:point_right: 简单来说,LDC 就是给机房打的标签,ODP 通过标签来做“就近访问”。

:compass: 二、LDC 路由的核心目标

目标 说明
:globe_with_meridians: 就近访问 优先将请求路由到与 ODP 属于相同 LDC 的 OBServer 节点
:rocket: 降低延迟 避免跨机房(跨地域)的网络访问延迟
:muscle: 提高可靠性 当本地 LDC 宕机时,自动切换到其他 LDC
:cyclone: 读写分离可结合 LDC 实现“本地读、本地写”或“本地读、异地容灾”的组合策略

:brain: 三、LDC 路由的工作机制

ODP 路由请求时,除了考虑分区信息,还会在候选节点中:

  1. 优先选择与自己同 LDC 的节点(同机房)
  2. 如果本地 LDC 没有对应分区的 Leader/Follower → 再回退到其他 LDC;
  3. 在多副本场景下,还会结合主从、副本优先级、负载情况来最终选择目标。

:pushpin: 举个例子

假设:

  • OB 集群在 北京(LDC=A)上海(LDC=B) 各部署一套 OBServer;
  • 北京有一个 ODP,属于 LDC=A;
  • 某分区的 Leader 节点在北京,Follower 节点在上海。

应用在北京连接 ODP 发送查询时:

  • ODP 检查路由 → 发现 LDC=A 中有 Leader → 直接路由到北京 Leader 节点 :white_check_mark:
  • 若北京节点宕机 → ODP 会自动 fallback 到 LDC=B 的节点,保证服务不中断。

:toolbox: 四、LDC 配置方式(简要)

:one: 给 OBServer 打标签

通过 ALTER SYSTEM 命令或集群配置,给每个节点设置 LDC 名称,例如:

ALTER SYSTEM SET region='bj', idc='LDC_A' server='192.168.0.1:2882';
ALTER SYSTEM SET region='sh', idc='LDC_B' server='192.168.1.1:2882';

:two: 配置 ODP 的 LDC

ODP 侧也要在配置文件中指定它所属的 LDC,例如:

obproxy_config {
  proxy_idc_name = "LDC_A"
}

:three: 确保租户副本分布覆盖多个 LDC

租户在 LDC_A 和 LDC_B 都有副本(Leader/Follower),以便 ODP 能有路由选择。

:compass: 五、LDC 路由与普通 ODP 路由的关系

项目 普通 ODP 路由 LDC 路由
场景 单机房 / 简单集群 多机房 / 双活 / 异地容灾
主要依据 SQL 分区键、副本位置、读写类型 分区键 + LDC 本地优先策略
目标 正确找到分区所在节点 优先访问本地机房,降低延迟
容灾 节点失效切换 本地优先 + 自动跨 LDC 容灾
4 个赞

看着有点难,慢慢消化一下

4 个赞

不难