我开发了一个 Java Web 应用程序,使用 Hibernate 3.3.2 作为持久性框架,使用 Apache Tomcat 7.0.27 作为服务器。
该应用程序已成功设置为使用 MySQL 5.5 复制服务器:1 个主服务器,1 个从服务器。只读查询在后者上进行,其他查询在主实例上进行。
问题来了:我想测试数据库故障转移,即在某个时候停止从属 MySQL 实例,并查看应用程序在只读查询时仍然运行良好。据我从下面的文章中了解到使用 Connector/J 进行 MySQL 故障转移 http://dev.mysql.com/doc/connector-j/en/connector-j-usagenotes-j2ee-concepts-load-balancing-failover.html,这应该可以在不更改代码的情况下实现。首先,我对第二种情况感兴趣:通信异常(以“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&loadBalanceBlacklistTimeout=7000&autoReconnect=true&failOverReadOnly=false&roundRobinLoadBalance=true</property>
在查看 MySQL 连接器文档时,我尝试了许多属性配置,但无法弄清楚如何获得可靠的故障转移。
对我来说同样的问题:https://dba.stackexchange.com/questions/19453/jboss-dont-fail-over-mysql-slave-using-datasource https://dba.stackexchange.com/questions/19453/jboss-dont-fail-over-mysql-slave-using-datasource.
它应该可以正常工作...但我不知道如何...
似乎许多人使用一些外部代理或负载平衡器:
- MySQL JDBC 连接上的故障转移? https://stackoverflow.com/questions/6711301/failover-on-mysql-jdbc-connections
- 如何在休眠中使用数据库作为备份/故障转移? https://stackoverflow.com/questions/4001780/how-to-use-database-as-backup-failover-in-hibernate
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)