1

我正在寻找 grails 应用程序中自动数据库故障转移的解决方案。我有两个数据库,它们位于通过 WAN 连接的两个不同站点上。在站点 A 上,我们有数据库 01,它是数据库所在的同一站点上的应用程序的主数据库,即应用程序 1,而它将被视为应用程序 2 的其他站点上的应用程序的辅助数据库,反之亦然。

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

所需的数据库复制和故障转移设计

因此,根据上述设计:

  • 部署在站点 A 上的应用程序应主要使用站点 A 的数据库
  • 如果无法访问站点 A 的数据库,则部署在站点 A 的应用程序应使用站点 B 的数据库(作为辅助数据库)
  • 一旦站点 A 的数据库启动,部署在站点 A 的应用程序应该再次开始使用站点 A 的数据库(作为主数据库)

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

注意:当相应站点的数据库启动时,该站点(部署它的站点)上的应用程序应再次开始使用该数据库,以避免通过 WAN 进行不必要的通信。

grails 是否提供任何这样的支持,我们可以指定两个数据源,一个作为主要数据源,另一个作为次要数据源(仅在无法访问主要数据源的情况下使用。)?

如果没有这样的机制,那么我们需要不断检查主数据源是否启动并运行,否则切换到似乎根本不合适的辅助数据源并且不想选择这个选项。

4

1 回答 1

0

真正的答案不是让你的任何代码处理这个问题,而是实现一个负载均衡器,它会相应地路由流量。虽然您可以在自己的代码中执行此操作(理论上),但您提出的任何解决方案都远远低于实际负载均衡器在故障转移方面的能力。

为了回答您的问题,Grails 没有任何东西可以解决这个问题。这个问题应该在您的应用程序之外解决,而是成为您的网络/基础设施拓扑设计/实施的一部分。

于 2017-02-09T11:13:19.050 回答