我的应用程序基于hibernate从MySQL服务器获取数据。这个mysql服务器被复制到另一个mysql服务器实例。今天,由于主数据库服务器在没有任何通知的情况下停机,我得到了停机时间。为了避免将来出现意外问题,我打算添加一项功能,以便系统在发现主服务器失败时连接到辅助数据库。如何在休眠时使用数据库作为备份/故障转移?
是否存在一种方法,我可以利用hibernate库来启用此功能?
我的应用程序基于hibernate从MySQL服务器获取数据。这个mysql服务器被复制到另一个mysql服务器实例。今天,由于主数据库服务器在没有任何通知的情况下停机,我得到了停机时间。为了避免将来出现意外问题,我打算添加一项功能,以便系统在发现主服务器失败时连接到辅助数据库。如何在休眠时使用数据库作为备份/故障转移?
是否存在一种方法,我可以利用hibernate库来启用此功能?
我已经创建了以下课程后得到一个想法形式this thread 它似乎运作良好。我不知道这是否是一个好方法。
package com.vsd.server.hibernate;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.hibernate.HibernateException;
import org.hibernate.connection.C3P0ConnectionProvider;
public class FailoverConnectionProvider extends C3P0ConnectionProvider {
String password;
String username;
String connectionString;
String failover_connstring;
@Override
public Connection getConnection() throws SQLException {
Connection conn = null;
try {
conn = DriverManager.getConnection(connectionString, username, password);
} catch (Exception ex) {
conn = DriverManager.getConnection(failover_connstring, username, password);
}
if(conn == null){
throw new IllegalStateException("Database connection was not initialized");
}
return conn;
}
@Override
public void configure(Properties properties) throws HibernateException {
failover_connstring = properties.getProperty("hibernate.connection.failover.url");
if (StringUtils.isBlank(connectionString)
&& StringUtils.isBlank(failover_connstring)
&& StringUtils.isBlank(username)
&& StringUtils.isBlank(password)) {
throw new IllegalStateException("Unable to initialize connection provider for hibernate");
}
}
}
今天,我得到了停机时间作为主数据库服务器已经走了下来,恕不另行通知。
那么,这是你应该修复的第一件事(通过适当的监测)。
(...)是否存在一种方式,我可以利用hibernate库来启用此功能?
据我所知,Hibernate并没有真正为此提供任何设施。就我个人而言,我将研究MySQL及其JDBC驱动程序的故障切换支持。我不能提供一个非常具体的答案,因为我还没有实现这个与MySQL,但这里有一些指点:
,截至提到上面最新链接的底部(也在this comment):
您可能还想调查负载平衡JDBC池(lbpol)工具,该工具提供标准JDBC驱动程序的包装,并使您能够使用数据库连接池,其中包括检查系统故障和不均匀的负载分布。有关更多信息,请参见Load Balancing JDBC Pool (lbpool)。
您如何看待我已添加到应用程序中的程序? – 2010-10-23 01:40:00
你可以建议一些监测过程,以进行适当的监测 – 2010-10-23 02:00:20
@Vijay这里有一些:[Zenoss](http://community.zenoss.org/index.jspa),[Centreon](http://www.centreon.com /),[Opsview](http://www.opsview.com/downloads/download-opsview-community) – 2010-10-23 02:13:57
您可以尝试添加故障转移功能dataSource级别(任何类型的数据库)。这方面很少有图书馆。例如:
请在这里添加细节。只是提供链接作为答案令人不悦。 – slm 2013-02-03 23:49:36
此链接可能是另一种方式。但是,您目前的实施非常基础(无连接池),并且IMO不适合用于生产。 – 2010-10-23 01:39:26