如何为热/暖备用Postgresql服务器配置c3p0?

时间:2015-01-20 19:53:20

标签: hibernate postgresql jdbc c3p0

我正在考虑使用hot/warm standby instance创建postgresql设置,以便我的应用程序不受数据库服务器停机时间的影响,并且还可以快速备份主服务器。

我认为检测主服务器的最简单方法是更改​​DNS:

  • 应用程序连接到jdbc:postgresql://database.example.com/testdb
  • database.example.com指向主人的IP
  • 如果主服务器停止响应,则DNS会将database.example.com更改为指向备份服务器1.同时,将触发备份以成为主服务器

我有几个问题:

  1. c3p0可以配置非IP网址吗?
  2. 这是否适用于c3p0 / jdbc连接?与master的连接将中断,我不确定连接池在这种情况下如何工作。它是否只是清除连接池,一段时间后重新尝试连接并从备份转为主要时获取连接?
  3. 这对休眠有什么影响(例如会话缓存),还是完全不知道下面的内容?
  4. 最后,当主设备不可用时,我也会在主/从切换方面提出不同的建议。

1 个答案:

答案 0 :(得分:1)

如果您按照建议隐藏DNS后面的服务器切换,并且如果该方案在没有池的情况下工作,那么c3p0应该没有问题。 c3p0可以处理JDBC驱动程序可以处理的任何URL。通常(当然对于postgresql),不要求数据库地址是硬IP,DNS名称很好并且很常见。

要使您的计划有效,只需确保您已配置了一些合理的connection testing种类。 c3p0对你的DNS交换机一无所知。它只会获取并提供连接。但是当主服务器关闭时,c3p0将检测到这些连接已断开并退出它们。它将用新的Connections替换它们,这些将安静地来自辅助DBMS。

我对你的建议主要关注的是缓存。您必须小心配置DNS不要缓存您正在切换的名称,Postgres JDBC驱动程序可能只执行一次DNS查找并在内部缓存。这可能很难解决。