Grails支持来处理数据源失败

问题描述:

我正在寻找一个在grails应用程序中自动数据库故障转移的解决方案。我有两个数据库驻留在通过WAN连接的两个不同站点上。在站点A上,我们有数据库01,它是数据库驻留在同一站点上的应用程序的主数据库,它是应用程序1,而它将作为应用程序2的其他站点上的应用程序的辅助数据库处理,反之亦然。Grails支持来处理数据源失败

请参考下面的图片了解更多详情:

Desired Database Replication and Failover Design

因此,根据上述设计:部署在站点A

  • 申请应在站点A主要使用数据库
  • 如果以某种方式无法访问站点A的数据库,则在站点A部署的应用程序应该使用站点B的数据库(作为辅助数据库)
  • 一旦在网站数据库中出现,部署在站点A的应用程序应该重新开始使用数据库的站点A(作为主数据库)

以同样的方式,它应该在站点B应用工作。对于站点B的应用程序,站点B的数据库应主要(作为主数据库)和站点B的数据库(作为辅助数据库)使用。

注意:当相应站点上的数据库出现时,该站点(在其上部署该站点)的应用程序应该再次使用数据库以避免在WAN上进行不必要的通信。

Grails是否提供了这样的支持,我们可以指定两个数据源之一作为主数据源,另一个数据源作为辅助数据源(只在primary不可访问的情况下使用)。

并且如果没有这样的机制,那么我们需要不断检查主数据源是否运行正常,否则请切换到次要数据源,这看起来不合适,而且不想要这个选项。

真正的答案是不让你的代码处理这个问题,而是实现一个负载平衡器,它将相应地路由流量。尽管您可以在自己的代码中(理论上)执行此操作,但无论您提出什么解决方案,都远远达不到实际负载均衡器能够处理故障转移的能力。

要回答你的问题,Grails没有任何解决这个问题的方法。应该在应用程序之外解决这个问题,而不是您的网络/基础架构拓扑设计/实现的一部分。