OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)是 OceanBase 专用的代理服务。ODP 自身就有高可用设计。
ODP 部署模式
合并部署
以 OCP 方式启动
可以访问多个集群。
若 OCP 挂掉后,已访问过的集群可以正常访问,未访问过的集群不可访问。
以 RSList 方式启动(只可以访问单集群,IP 为 127.0.0.1)
固定访问某个集群,不依赖 OCP。本机有问题后,SLB 探测并切流,无需 ODP 额外动作。
可处理部分机器故障场景。
独立部署
以 OCP 方式启动
可以访问多个集群。
若 OCP 挂掉后,已访问过的集群可以正常访问,未访问过的集群不可访问。
以 RSList 方式启动
- 固定访问某个集群,不依赖 OCP。RS List 如果有问题,可能导致集群不可访问。
ODP 容灾能力
发现故障
定时任务,刷新 OBServer、Zone、主备集群状态。
- 方案限制:依赖 OBServer 的状态更新。可能存在 OBServer 出问题(如:磁盘 hang 住),但是没有 inactive 或者 stop server,这个时候状态不会变化。
Server 连接保持 与 KeepAlive 探活机制,探测 OBProxy 与 后端 OBServer 的连接状况,如果空闲连接异常断开,OBProxy 可以及时发现,剔除并新建。
Client KeepAlive 探活机制,探测 OBProxy 与 Client 的连接状况,同时可以避免 SLB 等负载均衡的空闲超时。
处理故障
处理进行中的请求
异步中止机制,当检测到机器故障后,及时中止,避免长时间等待,业务连接池被打爆
处理新请求
黑名单机制,避免新请求发送到故障机器。
- OBServer 多次访问失败会加入黑名单。在加入黑名单一段时间后,会发起探测请求,探测该机器是否可访问。
方案限制:如果客户端先超时断开连接,不会加入黑名单。
- OBServer 状态变更为非 active,也会加入黑名单。
方案限制:RTO 依赖 【发现故障-定时任务】 的周期(目前是 20s,可配置) 和 OBServer 的探测时间
异步刷新 table location cache 机制,检测副本是否切换,如果机器故障后发生了副本切换,可以及时路由到新的副本上
方案限制:依赖 OBServer 告诉 ODP 路由有问题,如果 OBServer 有问题,一直没返回,table location cache 不会刷新
两中心主备库场景,有主备库切换机制,如果主集群发生了切换,可以快速切换到新的主集群
方案限制:RTO 依赖 【发现故障-定时任务】 的周期(目前是 20s,可配置) 和 OBServer 的切换时间




