通过MySQL JDBC驱动程序(Connector / J)进行负载平衡

问题描述 投票:2回答:2

我一直在研究MySQL JDBC驱动程序,并了解它可以使用此URL(“ jdbc:mysql:loadbalance://”)进行负载平衡。

我查看了文档,似乎只有随机和最佳响应时间的方法用于负载平衡(链接:http://dev.mysql.com/doc/refman/5.0/es/connector-j-reference-configuration-properties.html语法为loadBalanceStrategy)。

问题

  1. 是否可以将轮循机制配置为JDBC驱动程序的负载平衡策略?我了解其他负载平衡方法可能会更好,但我尝试在实验中使用轮询方法。
  2. 为MySQL ndb集群(带同步复制的多主数据库)实现负载平衡(对任何一种负载平衡策略都持开放态度是一个好主意吗?顺便说一下,我只有2台计算机充当主服务器,并且都能够接收写入和读取。尽管MySQL提到将JDBC驱动程序与ndb群集一起使用(请参阅下面的引用1),但我想知道是否对多主ndb群集使用负载平衡是否会实际上使性能恶化(请参阅引用2)?
  1. 引自https://dev.mysql.com/doc/refman/5.1/en/mysql-cluster-basics.html-“可以修改使用MySQL群集作为数据源的MySQL客户端,以利用与多个MySQL服务器连接的能力来实现负载平衡和故障转移。例如,使用Connector / J 5.0.6和更高版本的Java客户端可以使用jdbc :mysql:loadbalance:// URL(在Connector / J 5.1.7中进行了改进)以透明地实现负载平衡;有关在MySQL Cluster中使用Connector / J的更多信息,请参见在MySQL Cluster中使用Connector / J。“

  2. 引自https://dba.stackexchange.com/questions/11789/load-balanced-mysql-cluster-without-load-balancer-“生产服务器上的复制延迟可能长达一秒钟-我已经在远程托管和我们的数据中心中对此进行了测试,并且有99%的时间是0,但有时是mysql如图1所示。在大量流量下,由于客户端应用程序发出两个请求导致两个查询(插入和选择),我遇到了很多冲突。在某些情况下,该行还不存在,因此我们使用了userID的哈希值并修复了问题“

为了回应霍华德的答复,这些是我在发布此问题之前已做的一些事情-我试图将roundRobinLoadBalance用作JDBC连接字符串(URL)的一部分,但发生错误,指出它不受支持。互联网上的搜索还显示,其他人在尝试使用roundRobinLoadBalance时也会遇到问题。因此,我试图查看是否还有另一种方法。

java jdbc load-balancing mysql-connector mysql-cluster
2个回答
1
投票

Q1)是否可以将循环调度配置为负载平衡策略?

Round-Roubin's负载平衡算法为每个服务器提供相等的负载。如果所有服务器的性能都相同,则可以使用它。

另一方面,

Weighted round-robin允许为每个服务器进行负载平衡配置。当您拥有性能不同的服务器时,这才有意义。

例如对于Glassfish,读取为:Weighted Round Robin

Q2)为MySQL ndb集群(多主机)实现负载平衡(我愿意接受任何一种负载平衡策略)是否是一个好主意?与同步复制)?顺便说一下,我只有两台机器充当主机,并且都能够接收写入和读取。尽管MySQL提到将JDBC驱动程序与ndb集群一起使用(请参阅下面的引用1),我想知道是否对多主NDB群集实际上会降低性能(请参阅引用2)?

如果两台服务器的性能相同,则无需配置负载平衡。它将平均分配给每个节点的负载。

在轮询中,负载平衡将平均利用每个服务器。

如果一台服务器比另一台服务器更快且功能更强大,则可能需要使用加权轮询来在更快的服务器上配置更多负载。

参考

http://docs.oracle.com/cd/E26576_01/doc.312/e24934/http-load-balancing.htmhttp://msdn.microsoft.com/en-us/library/ff648960.aspx


0
投票

我认为您可以尝试自行实现com.mysql.jdbc.BalanceStrategy。

© www.soinside.com 2019 - 2024. All rights reserved.