部署了OBProxy服务能不能对集群做到完全的负载均衡

【 使用环境 】 测试环境
OBProxy, OceanBase数据库
【问题描述】清晰明确描述问题
我部署了一台OBProxy和由三个服务器组成的三节点集群。
OBProxy不是有负载均衡的功能吗,为什么一台占用的cpu,io资源非常高,其他的就比较少。
能不能配置成为平均的负载均衡

三台设备的cpu中有一台非常的高
有没有优化的命令啊,这是为什么主节点cpu那么高
我启动的守护只配置主节点地址这样是可以的嘛

4 个赞

@论坛小助手

OBProxy 负载均衡问题分析

根据您的描述,您部署了一台OBProxy和由三个服务器组成的三节点集群。但是观察到一台服务器的CPU、IO资源使用率非常高,而其他两台则较低,希望了解如何配置为平均负载均衡。

OBProxy 负载均衡功能

OBProxy确实具备负载均衡的功能,它可以根据不同的策略(如随机、轮询等)将客户端请求分发给后端多个OceanBase数据库实例,以实现负载均衡。然而,实际效果受到多种因素的影响,例如:

  • 数据分布情况:如果某些表或分区的数据倾斜,会导致处理这些数据的服务器负载更高。
  • SQL执行计划:复杂查询可能会集中在特定服务器上执行,尤其是当查询涉及大量计算时。
  • 会话保持策略:某些场景下为了保证事务一致性,同一会话的请求可能被路由至相同的服务器。
  • 硬件性能差异:不同物理机之间可能存在性能上的差异,导致即便流量均匀分配,仍可能出现负载不均的情况。

优化建议

  1. 检查并优化SQL语句

    • 使用EXPLAIN命令查看执行计划,确认是否存在全表扫描、大结果集排序等问题,并针对性地添加索引或调整查询逻辑。
    • 尝试利用OBProxy的读写分离特性来减轻主节点的压力,通过设置合适的参数使部分只读查询可以被路由到从节点进行处理。
  2. 调整OBProxy配置

    • 检查OBProxy是否启用了会话保持(session_keepalive_timeout),这可能会导致连接长时间绑定在某个节点上。适当减小该值有利于提高负载均衡效率。
    • 确保没有仅指定了单一主节点作为路由目标;理想情况下应该配置所有活动节点,让OBProxy自主选择最佳路径。
  3. 监控与诊断

    • 利用OCP或其他工具密切关注各节点状态及资源消耗趋势,及时发现潜在瓶颈所在。
    • 查看系统视图如CDB_OB_BALANCE_JOBS来获取有关正在进行的平衡任务信息,评估其对当前负载的影响。
  4. 考虑增加OBProxy实例

    • 单一OBProxy可能成为单点故障,同时其自身也可能成为性能瓶颈。如果条件允许,建议部署多个OBProxy实例并通过负载均衡器对外提供服务,这样不仅提高了可用性也增强了整体系统的吞吐量。

结论

虽然OBProxy提供了基本的负载均衡机制,但要达到理想的均衡状态还需要结合具体情况采取相应措施。希望上述建议能帮助您解决问题。如果仍有疑问或遇到新的挑战,请继续向我们寻求支持。

更多信息请查看:

  1. 删除分区
  2. Transfer Partition

考虑下定期重启。

有大佬帮忙解释一下嘛

理论上是的

看下primary zone怎么设置的?

root@sys 连接执行

-- 1. 查看租户的 primary_zone 设置
SELECT tenant_name, primary_zone FROM oceanbase.DBA_OB_TENANTS;

-- 2. 查看 Leader 在各节点的分布(关键验证)
SELECT svr_ip, role, COUNT(*) 
FROM oceanbase.CDB_OB_TABLE_LOCATIONS 
WHERE role = 'LEADER' 
GROUP BY svr_ip, role;

-- 3. 查看日志流 Leader 分布
SELECT tenant_id, ls_id, svr_ip, role 
FROM oceanbase.GV$OB_LOG_STAT 
WHERE role = 'LEADER';
1 个赞

可能是配置不太合适,需要调整吧