3

我开发了一个 Java Web 应用程序,使用 Hibernate 3.3.2 作为持久性框架,使用 Apache Tomcat 7.0.27 作为服务器。此应用程序已成功设置为使用 MySQL 5.5 Replication Server:1 个主服务器,1 个从属服务器。只读查询在后者上进行,其他在主实例上进行。

问题来了:我想测试数据库故障转移,即在某个时间停止从属 MySQL 实例,并查看应用程序在只读查询下仍然可以正常工作。据我从以下文章MySQL Failover with Connector/J中了解到,这应该可以在不更改代码的情况下实现。首先,我对第二种情况感兴趣:通信异常(以“08”开头的 SQL 状态)。不幸的是,这不会发生,如果我停止从服务器,有时需要很长时间才能从服务器获得响应,有时没有任何响应并且 HTTP 连接卡住了。在 Tomcat 日志中,只需获取以下行:

从服务器成功接收到的最后一个数据包是在 N 毫秒前。最后一个成功发送到服务器的数据包是 0 毫秒前。

这是休眠配置的片段:

<property name="hibernate.connection.driver_class">com.mysql.jdbc.ReplicationDriver</property>
<property name="hibernate.connection.url">jdbc:mysql://masterIP,slaveIP/mydb?loadBalancePingTimeout=1500&amp;loadBalanceBlacklistTimeout=7000&amp;autoReconnect=true&amp;failOverReadOnly=false&amp;roundRobinLoadBalance=true</property>

在查看 MySQL 连接器文档时,我尝试了许多属性配置,但无法弄清楚如何获得可靠的故障转移。

4

1 回答 1

0

对我来说同样的问题:https ://dba.stackexchange.com/questions/19453/jboss-dont-fail-over-mysql-slave-using-datasource 。

它应该可以正常工作...但我不知道如何...

似乎许多人使用一些外部代理或负载平衡器:

于 2012-09-20T12:49:54.743 回答