有一个多节点ODP集群,独立部署,应用通过ODP访问数据库;
应用和ODP之间未使用F5或其他负载均衡组件。
请问此种情况下应用到ODP的服务请求如何能较为均衡在分配在多个ODP节点上?
OceanBase Connector/J 支持LoadBalance 功能,通过URL 或配置文件的方式,用户可指定以随机、加权或轮询方式,达到负载均衡建
生产建议F5或其他负载均衡组件。其他方式虽然能提供轮询或者分发请求都有一的局限,参考如下:
1、应用侧
OceanBase 兼容 MySQL 协议,因此可使用 MySQL JDBC 驱动的 load balance 或 failover 特性。适合代码使用java的应用
2、 使用 DNS 轮询
将多个 ODP 节点绑定到同一个域名下,DNS Round Robin 返回多个 A 记录,实现客户端 IP 的分散。实现简单,应用不用大改。
缺点还有有的:普通DNS的话无法健康检查,故障 ODP 仍会被返回,客户端可能缓存 DNS 结果,导致不均衡。
3、部署开源负载均衡组件
若无法使用 F5/SLB,应用规模不大,成本考虑,可部署开源负载均衡组件,如:
- Nginx(支持 TCP 转发)
- HAProxy
- LVS
缺点:需额外部署和维护一个组件。
学习一下!
如使用此张方式,会出现随着ODP集群节点的增加或者删除,应用配置的ODP节点与实际ODP节点不一致问题,还需要重新配置ODP的节点信息,且可能涉及更改相关配置后是否需要重启生效问题!
感谢提供思路!
你既然用了 ODP 集群,那就是考虑到数据流量的问题,在此场景下综合ODP本身的特性,我觉得ODP应该归属应用端的服务。每个项目应该部署一个ODP服务,项目流量走自己的ODP服务。这种情况是不需要对ODP进行集群负载的,如果做集群也只是考虑到容灾的可能性。所以这样反而更好点。
如果单个项目的ODP负载,那直接通过 Oceanbase Connector/J 来配置就可以了。如果你是独立的一个ODP集群那反而不好。个人看法~
很好的方式!
ob的驱动支持软负载,在连接串里写多个ip就可以了,但是生产上最好还是硬件负载比较好。
考虑中间再加一层F5
在您的场景下,由于应用和ODP之间没有使用F5或其他负载均衡组件,您可以考虑在两者之间添加一层负载均衡器(如F5、LVS、SLB等)来确保服务请求能够均匀地分配到多个ODP节点上。这种方案不仅可以平衡负载,还能在ODP节点增减时自动调整,避免手动重新配置ODP节点信息的问题。
如果暂时不方便添加额外的负载均衡器,您也可以通过以下方式进行初步的负载均衡:
- 客户端轮询:在应用侧实现简单的轮询机制,每次请求时从ODP节点列表中选择一个节点进行访问。
- DNS轮询:使用DNS轮询技术,将多个ODP节点的IP地址配置到同一个域名下,通过DNS解析实现负载均衡。
- 智能DNS:使用智能DNS服务,可以根据客户端的地理位置、网络状况等因素动态选择最优的ODP节点。
无论采取哪种方式,都需要确保在ODP节点增减时,能够及时更新应用侧的配置,并在必要时重启应用以使配置生效。
检索到的文档如下:
学习了
只需要连接F5就可以啊