【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】ODP
【 使用版本 】最新版
【问题描述】ODP如何实现负载均衡,开发环境中用OCP部署一个3副本的OB集群,也用OCP部署了ODP集群3个ODP。然后客户端连接某一台ODP连接,但是发现ODP只会去连接一个同一个OBserver,并不会均衡的往3个集群节点发送SQL请求。请问这个是什么原因,有什么解决方法
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
用户问题总结:ODP 在负载均衡时仅连接到一个 OBServer,未将 SQL 请求均衡分发至三个 OB 集群节点。
推荐使用 obdiag 工具进行日志采集,以便我们分析为什么 SQL 请求没有被均衡分发。
日志采集场景: 集群基础信息
日志采集命令: obdiag gather scene run --scene=observer.base
为了更好地帮助您解决问题,请您按照上述命令采集日志并提供给我们。同时,请您回答以下问题以便进一步诊断:
- 您的 OceanBase 集群当前有多少个 OBServer 节点?是否所有节点都处于正常状态?
- ODP 的配置中是否有指定特定的 OBServer 进行连接?如果有,请提供相关配置。
- 您是否对 ODP 或 OceanBase 集群进行了任何最近的配置更改或升级操作?
- 您能否提供一些具体的 SQL 请求示例,这些请求未能被均衡分发?
- 您是否观察到任何与负载均衡相关的错误日志或警告信息?如果有,请提供具体内容。
附上敏捷诊断工具 obdiag 使用帮助链接
皇甫侯
#4
ODP本身是无状态的服务,没有负载均衡的能力,他只会把SQL发送到对应的OBserver节点上,所以需要检查下租户的primary_zone设置,是否集中在一个zone
其次再查下dba_ob_table_location看看你执行SQL的表leader是否刚好也在同一台上
zone优先级改了,之前是有高到低。
那怎么样让ODP能够均衡的往各个节点发SQL命令呢。
论坛小助手
#6
根据文档库中的信息,ODP 的负载均衡与 OceanBase 集群的配置密切相关,尤其是 Zone 和 Primary Zone 的设置。以下是针对您的问题的具体解答和建议:
1. Zone 和 Primary Zone 的作用
-
Zone 是 OceanBase 数据库中用于描述地理位置或机房的概念。
-
Primary Zone 决定了 Leader 副本(主副本)的分布偏好位置。Leader 副本承担了强一致性场景下的读写请求,因此 Primary Zone 的设置直接影响流量在各个节点上的分布。
文档依据:
-
片段标题: OceanBase 数据库性能的影响因素 → 资源分配 → Primary Zone
-
内容: Leader 分布通过 Primary Zone 来控制,Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量。
2. 为什么 ODP 只连接一个 OBServer?
ODP 的 SQL 路由策略会根据以下因素决定请求分发到哪个 OBServer:
-
数据副本的位置:ODP 会优先将请求路由到包含所需数据副本的 OBServer。
-
Primary Zone 的设置:如果 Primary Zone 设置为某个特定 Zone,则大部分流量会被路由到该 Zone 的 OBServer。
-
负载均衡状态:OceanBase 集群内部的负载均衡模块会尝试将分区 Leader 和日志流(LS)均衡分布在各个 Zone 上。
如果您修改了 Zone 的优先级(从高到低),但发现 ODP 仍然只连接一个 OBServer,可能是因为:
-
Leader 副本未重新分布:即使修改了 Primary Zone,OceanBase 集群需要时间调整 Leader 副本的分布。
-
LS 均衡未完成:V4.x 版本中,负载均衡模块首先对 LS 进行均衡,然后再进行分区均衡。如果 LS 均衡未完成,可能导致流量集中在一个 OBServer 上。
文档依据:
-
片段标题: 租户内均衡 → LS 均衡 → LS Leader 均衡
-
内容: 当 Primary Zone 发生变更时,OceanBase 集群会动态调整 LS Leader 的分布,以保证流量均匀分布在指定的 Zone 上。
3. 如何让 ODP 均衡地往各个节点发送 SQL 请求?
方法 1: 确保 Primary Zone 设置合理
方法 2: 等待 LS 均衡完成
方法 3: 检查 ODP 的路由策略
- ODP 的路由策略会影响 SQL 请求的分发。确保 ODP 的配置中没有强制指定某个 OBServer 或 Zone。
- 您可以通过以下方式检查 ODP 的路由行为:
- 查看 ODP 的日志文件,确认是否有异常或警告信息。
- 使用 OCP 的监控功能,观察 ODP 的请求分发情况。
方法 4: 手动调整资源分布
文档依据:
-
片段标题: 资源单元迁移
-
内容: 使用
ALTER SYSTEM MIGRATE UNIT
语句可以调整租户使用的资源分布,以便集群资源使用均衡。
4. 总结
为了让 ODP 均衡地往各个节点发送 SQL 请求,请按照以下步骤操作:
- 确保 Primary Zone 设置合理,避免流量集中在一个 Zone 上。
- 等待 LS 均衡完成,或者手动触发均衡操作。
- 检查 ODP 的路由策略,确保没有强制指定某个 OBServer 或 Zone。
- 如果资源分布不均衡,可以手动调整资源单元的分布。
如果问题仍未解决,建议采集诊断日志并联系 OceanBase 技术支持团队进一步分析。
日志采集命令:
obdiag gather scene run --scene=observer.base
希望以上信息对您有所帮助!
详情请参考:
- 使用命令行进行运维
- SQL 路由
- ODP 性能分析
- 资源单元迁移
- 租户内均衡
- 负载均衡
- 代理层高可用
- ODP SQL 路由原理
- OceanBase 数据库性能的影响因素
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
皇甫侯
#7
现在primary_zone已经是打散到3个zone上了请求还是发到一台上,你查到是单表么?
具体的测试场景描述下