Hibernate 如何为热/热备用Postgresql server配置c3p0?
我正在考虑使用创建一个postgresql设置,这样我的应用程序就不会受到数据库服务器宕机的影响,并且可以快速备份主服务器 我认为检测主机的最简单解决方案是更改DNS:Hibernate 如何为热/热备用Postgresql server配置c3p0?,hibernate,postgresql,jdbc,c3p0,Hibernate,Postgresql,Jdbc,C3p0,我正在考虑使用创建一个postgresql设置,这样我的应用程序就不会受到数据库服务器宕机的影响,并且可以快速备份主服务器 我认为检测主机的最简单解决方案是更改DNS: 应用程序连接到jdbc:postgresql://database.example.com/testdb database.example.com指向master的IP 如果主机停止响应,DNS会将database.example.com更改为指向备份服务器1。同时,备份被触发成为主备份 我有几个问题: c3p0可以配置为非
- 应用程序连接到jdbc:postgresql://database.example.com/testdb
- database.example.com指向master的IP
- 如果主机停止响应,DNS会将database.example.com更改为指向备份服务器1。同时,备份被触发成为主备份
最后,对于在主服务器不可用时进行主/从服务器切换的不同建议,我也持开放态度。如果您按照建议将服务器切换隐藏在DNS后面,并且如果该方案在没有池的情况下工作,c3p0应该没有问题。c3p0可以处理JDBC驱动程序可以处理的任何URL。通常(当然对于postgresql)不要求数据库地址是硬IP,DNS名称很好而且非常常见 要使您的方案工作,只需确保您已经配置了某种合理的。c3p0对您的DNS交换机一无所知。它只会获取并提供连接。但是,当主服务器关闭时,c3p0将检测到这些连接已断开并使其失效。它将用新的连接来代替它们,这些连接将悄悄地从辅助DBMS进行
我主要关心的是缓存。您必须小心地将DNS配置为根本不缓存正在切换的名称,并且Postgres JDBC驱动程序可能只执行一次DNS查找并在内部缓存。这可能很难解决。谢谢史蒂夫的意见。虽然我还没有尝试过(如果我错了,有人会纠正我),但我认为DNS缓存是通过名称服务器配置中的名称TTL来解决的-如果将其设置得足够低(例如,1/2分钟),这意味着服务将在该时间内关闭,直到缓存过期和服务(在本例中为JDBC驱动程序)被迫从名称服务器获取ip地址。(是的,我认为非常短的TTL应该限制DNS缓存。您只需尝试查看它的工作情况!)