我一直在研究MySQL JDBC驱动程序,并了解它可以使用此URL(“ jdbc:mysql:loadbalance://”)进行负载平衡。
我查看了文档,似乎只有随机和最佳响应时间的方法用于负载平衡(链接:http://dev.mysql.com/doc/refman/5.0/es/connector-j-reference-configuration-properties.html语法为loadBalanceStrategy)。
问题
引自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。“
引自https://dba.stackexchange.com/questions/11789/load-balanced-mysql-cluster-without-load-balancer-“生产服务器上的复制延迟可能长达一秒钟-我已经在远程托管和我们的数据中心中对此进行了测试,并且有99%的时间是0,但有时是mysql如图1所示。在大量流量下,由于客户端应用程序发出两个请求导致两个查询(插入和选择),我遇到了很多冲突。在某些情况下,该行还不存在,因此我们使用了userID的哈希值并修复了问题“
为了回应霍华德的答复,这些是我在发布此问题之前已做的一些事情-我试图将roundRobinLoadBalance用作JDBC连接字符串(URL)的一部分,但发生错误,指出它不受支持。互联网上的搜索还显示,其他人在尝试使用roundRobinLoadBalance时也会遇到问题。因此,我试图查看是否还有另一种方法。
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
我认为您可以尝试自行实现com.mysql.jdbc.BalanceStrategy。