我公司开发的Java Web应用程序,使用Hibernate 3.3.2作为持久性框架和Apache Tomcat 7.0.27作为服务器。 该应用程序已成功建立了使用MySQL 5.5的Replication Server:1个主站,1个从站。 只读查询下去后者和主实例别人。
在这里,问题来了:我想考DB故障切换,即在一段时间内停止从MySQL实例和查看应用程序仍然只读查询工作。 据我从以下文章了解MySQL的故障切换接口/ J ,这应该是可能在不改变代码。 要开始我感兴趣的是第二种情况:一种通信异常(SQL状态开始以“08”)。 不幸的是,这不会发生,如果我不从,有时需要很长的时间来从服务器的响应,有时候没有回来,HTTP连接卡住。 在Tomcat的日志只得到下面一行:
从服务器成功接收最后一个包是n毫秒以前。 成功发送到服务器的最后一个数据包为0毫秒前。
下面是Hibernate配置的一个片段:
<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连接器文档,我已经尝试了许多性能配置,但无法弄清楚如何获得可靠的故障切换。