Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何为热/热备用Postgresql server配置c3p0?_Hibernate_Postgresql_Jdbc_C3p0 - Fatal编程技术网

Hibernate 如何为热/热备用Postgresql server配置c3p0?

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可以配置为非

我正在考虑使用创建一个postgresql设置,这样我的应用程序就不会受到数据库服务器宕机的影响,并且可以快速备份主服务器

我认为检测主机的最简单解决方案是更改DNS:

  • 应用程序连接到jdbc:postgresql://database.example.com/testdb
  • database.example.com指向master的IP
  • 如果主机停止响应,DNS会将database.example.com更改为指向备份服务器1。同时,备份被触发成为主备份
我有几个问题:

  • c3p0可以配置为非IP url吗
  • 这在c3p0/jdbc连接方面是否有效?与主机的连接将中断,我不确定在这种情况下连接池是如何工作的。它是否只是清除连接池,在一段时间后重新尝试连接,然后从备份转为主连接获取连接
  • 这对hibernate(例如会话缓存)有什么影响,还是完全不知道下面是什么

  • 最后,对于在主服务器不可用时进行主/从服务器切换的不同建议,我也持开放态度。

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

    要使您的方案工作,只需确保您已经配置了某种合理的。c3p0对您的DNS交换机一无所知。它只会获取并提供连接。但是,当主服务器关闭时,c3p0将检测到这些连接已断开并使其失效。它将用新的连接来代替它们,这些连接将悄悄地从辅助DBMS进行


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

    谢谢史蒂夫的意见。虽然我还没有尝试过(如果我错了,有人会纠正我),但我认为DNS缓存是通过名称服务器配置中的名称TTL来解决的-如果将其设置得足够低(例如,1/2分钟),这意味着服务将在该时间内关闭,直到缓存过期和服务(在本例中为JDBC驱动程序)被迫从名称服务器获取ip地址。(是的,我认为非常短的TTL应该限制DNS缓存。您只需尝试查看它的工作情况!)