当前IBM Bluemix中的DB2onCloud具有HA计划,以便应用程序在计划维护期间无缝连接到数据库,或者如果有故障转移,我们可以在应用程序方面做到吗?在使用DB2onCloud(aka dashDB for Transactions)时启用自动客户端重新路由以实现可用性HA计划
回答
为了提高安全性,建议在连接到云数据库上的Db2时使用SSL。例如,要通过JDBC连接字符串应该是这样的:
"jdbc:db2://<Db2OnCloudServer>:50001/BLUDB:sslConnection=true;user=bluadmin;password=<Password>;enableSeamlessFailover=true;"
你可以在“服务凭据”这个字符串和凭据从云服务实例的DB2。如果您还没有在那里看到凭据,请点击“新凭据”,它们就会出现。 使用SSL的另一个好处还在于,如果出现故障转移并且您正在使用上述连接字符串,则它将无缝地重新连接,因为服务器和客户端交换备用服务器信息。
当您不使用SSL连接时,您将需要为应用程序指定其他参数以重新连接,因为从服务器发送的备用服务器信息仅用于SSL连接。要做到这一点,你可以使用一个连接字符串,如下所示:
"jdbc:db2://<DB2OnCloudServer>:50000/BLUDB:user=bluadmin;password=<Password>;enableClientAffinitiesList=1;maxRetriesForClientReroute=10;retryIntervalForClientReroute=5;clientRerouteAlternateServerName=<Db2OnCloudServer>,<Db2OnCloudServer>;clientRerouteAlternatePortNumber=50000,50000;enableSeamlessFailover=true;"
注意您将指定在同一台服务器字符串中的备用服务器。这是因为当故障转移发生时,服务器的IP将会移动,因此连接总是通过相同的IP完成。通过指定clientRerouteAlternateServerName
和clientRerouteAlternatePortNumber
它将覆盖从服务器返回的值,这意味着它将连接到ssl端口。
上述内容将关注到数据库的实际连接,但是您的应用程序还需要具有适当的重试逻辑。下面是一个显示使用情况的粗略代码示例: import java.sql。*;
public class JDBCSampleEx {
public static void main(String args[]) {
String connectionURL = "jdbc:db2://169.48.134.122:50000/BLUDB:user=bluadmin;password=MmM5OWQ3ZWUyZmNm;enableClientAffinitiesList=1;maxRetriesForClientReroute=10;retryIntervalForClientReroute=5;clientRerouteAlternateServerName=169.48.134.122,169.48.134.122;clientRerouteAlternatePortNumber=50000,50000;enableSeamlessFailover=true;";
Connection con = null;
try {
// Load the JCC Driver class (db2jcc4.jar).
Class.forName("com.ibm.db2.jcc.DB2Driver");
//Create the connection using the static getConnection method
con = DriverManager.getConnection(connectionURL);
Statement stmt = con.createStatement();
ResultSet rs = null;
con.setAutoCommit(false);
try {
rs = stmt.executeQuery("select FIRSTNME, SALARY from EMPLOYEE");
// Print results
while (rs.next()) {
System.out.println("Name= " + rs.getString("FIRSTNME") + " SALARY= " + rs.getString("SALARY"));
}
// do a random update
String sql = "update EMPLOYEE set FIRSTNME = '" + RandomAlphaNum.gen(10) + "'";
stmt.executeUpdate(sql);
con.commit();
} catch (java.sql.SQLException e) {
//Catch return code to do any retry
if (e.getErrorCode() == -30108 || e.getErrorCode() == -4498 || e.getErrorCode() == -4499) {
// Add any logic to reply the current in flight transaction
// if necessary
System.out.println("Replay any transactions if necessary");
} else {
throw e;
}
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (con != null) {
con.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
- 1. 如何启用MySQL客户端自动重新连接MySQLdb?
- 2. 使用路由时,客户端应该可以访问后端服务吗?
- 3. 自动超时Web客户端使用
- 4. 使用下划线在ElasticSearch NEST客户端中自动映射
- 5. 是否可以使用谷歌客户端实现截图?
- 6. 实现用户登录,JDBC Transactions问题
- 7. 我可以在Google客户端使用Gambit-C,Mlton或Chicken计划
- 8. 使用UCMA的Lync客户端实现
- 9. 使用c的telnet客户端,用于自动备份一系列路由器
- 10. 如何重新使用TCP客户端?
- 11. WCF客户端在重新启动后无法重新连接
- 12. 使用PUSH方法实现自动更新服务器和客户端
- 13. 如何在Jedis客户端启用自动重新连接redis连接
- 14. dashDB for Analytics与dashDB之间的区别?
- 15. 路由器客户端端
- 16. 在MySQL客户端中禁用自动重新连接
- 17. 是否可以使用仅客户端的单页应用程序实现SEO?
- 18. 当客户端可以使用Javascript时客户端WCF服务的安全性客户端
- 19. QTcpSocket客户端自动重新连接
- 20. 重新启动远程客户端计算机
- 21. 什么是客户端路由以及它如何使用?
- 22. 客户端启用后自动刷新页面javascript
- 23. dashDB服务没有重新启动?
- 24. 使用Azure移动服务路由客户端
- 25. 在客户端启用CORS
- 26. JMS客户端路由
- 27. SockJS客户端自动重新连接?
- 28. 重新路由请求不发送重定向到客户端
- 29. 如何实现客户端应用程序的自动验证?
- 30. 配置SnakeBite HDFS客户端以使用高可用性模式