【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】
【 使用版本 】
【问题描述】什么是LDC路由
【复现路径】问题出现前后相关操作
5 个赞
一、什么是 LDC
LDC(Logical Data Center,逻辑数据中心) 是 OceanBase 在多 IDC 场景下定义的一个逻辑概念。
- 每个 OBServer 节点都可以通过配置,被标记为属于某个 LDC;
- 每个 ODP 也配置了自己的 LDC;
- 这样,当 ODP 接到请求时,就可以根据客户端 → ODP → OBServer 的 LDC 关系,来决定最优的路由目标。
简单来说,LDC 就是给机房打的标签,ODP 通过标签来做“就近访问”。
二、LDC 路由的核心目标
目标 | 说明 |
---|---|
![]() |
优先将请求路由到与 ODP 属于相同 LDC 的 OBServer 节点 |
![]() |
避免跨机房(跨地域)的网络访问延迟 |
![]() |
当本地 LDC 宕机时,自动切换到其他 LDC |
![]() |
实现“本地读、本地写”或“本地读、异地容灾”的组合策略 |
三、LDC 路由的工作机制
ODP 路由请求时,除了考虑分区信息,还会在候选节点中:
- 优先选择与自己同 LDC 的节点(同机房);
- 如果本地 LDC 没有对应分区的 Leader/Follower → 再回退到其他 LDC;
- 在多副本场景下,还会结合主从、副本优先级、负载情况来最终选择目标。
举个例子
假设:
- OB 集群在 北京(LDC=A) 和 上海(LDC=B) 各部署一套 OBServer;
- 北京有一个 ODP,属于 LDC=A;
- 某分区的 Leader 节点在北京,Follower 节点在上海。
应用在北京连接 ODP 发送查询时:
- ODP 检查路由 → 发现 LDC=A 中有 Leader → 直接路由到北京 Leader 节点
- 若北京节点宕机 → ODP 会自动 fallback 到 LDC=B 的节点,保证服务不中断。
四、LDC 配置方式(简要)
给 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';
配置 ODP 的 LDC
ODP 侧也要在配置文件中指定它所属的 LDC,例如:
obproxy_config {
proxy_idc_name = "LDC_A"
}
确保租户副本分布覆盖多个 LDC
租户在 LDC_A 和 LDC_B 都有副本(Leader/Follower),以便 ODP 能有路由选择。
五、LDC 路由与普通 ODP 路由的关系
项目 | 普通 ODP 路由 | LDC 路由 |
---|---|---|
场景 | 单机房 / 简单集群 | 多机房 / 双活 / 异地容灾 |
主要依据 | SQL 分区键、副本位置、读写类型 | 分区键 + LDC 本地优先策略 |
目标 | 正确找到分区所在节点 | 优先访问本地机房,降低延迟 |
容灾 | 节点失效切换 | 本地优先 + 自动跨 LDC 容灾 |
4 个赞
看着有点难,慢慢消化一下
4 个赞
不难