我们有两个具有相同数据的生产数据库,并且tomcat服务器当前将连接到其中一个以提供Web服务.
生产数据库将一次更新(花费相当长的时间).因此,为了最大限度地减少停机时间,我们必须在运行更新时手动切换到其他数据库.这是一个相当繁琐的过程.
所以问题是DataSource层中是否存在任何负载平衡/容错,以允许这种情况自动发生?即,当一个数据库关闭时,另一个数据库自动使用.
我们正在使用Oracle数据库,也想知道它是否可以在数据库连接层中完成.
为了澄清,我们只需要对数据库的读访问权限,因此不涉及任何事务.
最佳答案 我强烈建议不要在
Java实现和数据源之间引入耦合的任何解决方案,并坚持分离关注点的原则.
具体来说,我设置了一个TCP代理(如HAProxy)来对两个Oracle数据库进行负载平衡,并配置Tomcat连接到代理.这样,如果在HAProxy中启用两个数据库,并且需要单独升级它们,您将获得负载平衡,您只需在代理中一次一个地清除它们,而Tomcat不会注意到任何内容.
如果您不需要负载平衡,代理仍可用于指向一个数据库或另一个数据库的连接.
当然,根据您的问题,主 – 主复制也可能值得研究.但是,这不会使用代理失去信誉. HTH
备注:如果您在Tomcat中使用连接池,则需要注意细节.即,配置池以定期执行空闲连接的保持活动ping,并确保频率低于代理的频率.否则,代理可能会在池注意到之前以静默方式销毁连接.那个小伙子,是调试的噩梦.
FWIW,看看这个walkthrough用于设置带有两个MySQL服务器的HAProxy.使用Oracle不应该与它相差甚远.