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

时间:2014-03-23 09:30:45

标签: java jdbc load-balancing mysql-connector mysql-cluster

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

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

问题

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

    2.   
    3. 引自https://dba.stackexchange.com/questions/11789/load-balanced-mysql-cluster-without-load-balancer - “生产服务器上的复制延迟可能会达到一秒钟 - 我已经在远程主机托管和数据中心测试了这一点,99%的时间它是0但是有时mysql显示1s。在大量流量上我遇到很多冲突,因为客户端应用程序发出两个请求导致两个查询,插入和选择。在某些情况下,行还没有,所以我们使用了userID的哈希它解决了问题“

    4.   

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

1 个答案:

答案 0 :(得分:1)

  

Q1)有没有办法将roundrobin配置为负载均衡策略?

Round-roubin的 负载平衡算法为每台服务器提供相同的负载。当所有服务器的性能相同时,使用它是有意义的。

另一方面,

加权循环 允许每台服务器进行负载均衡配置。当您拥有不同性能的服务器时,这是有道理的。

例如对于Glassfish,请阅读:Weighted Round Robin

  

Q2)为MySQL ndb集群实现负载均衡(我对任何负载均衡策略开放)是个好主意(Multimaster   同步复制)?顺便说一句,我只有2台机器   充当主人并且两者都能够接收写入和读取。   虽然MySQL提到了JDBC驱动程序与ndb集群的使用   (请参阅下面的引文1),我想知道是否使用负载平衡   多主机ndb集群实际上会恶化性能(参考   引用2)?

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

在循环中,负载平衡将平等地利用每个服务器。

如果一台服务器比另一台服务器更快,功能更强大,您可能希望使用加权循环法在更快的服务器上配置更多负载。

<强>参考

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