我有一个非常具体的用例,因为我对数据库复制不太熟悉,所以我很乐意提供有关如何完成遵循最佳方式:数据库复制:具有本地数据库的多个地理位置,一个主远程数据库
Web应用程序+数据库正在远程服务器上运行。让我们把这个设置R称为远程。
现在假设有3个独立的地理位置需要对数据库进行读写访问。我会将这些位置称为L1,L2和L3。
的主要问题:远程服务器可能不可用或位置可能并不总是有效,使远程应用程序不可用的一个互联网连接;但我们希望应用程序能够作为高可用性解决方案(现场)工作,即使在远程服务器关闭或互联网连接出现问题时也是如此。
部分解决方案:所以我想为每个地理位置提供一个本地的Web应用程序副本服务器。 Web应用程序本身可以在需要时从版本控制系统自动更新(例如使用git钩子)。
到目前为止好......(至少我这么认为?)
但对于我们的数据?真的很棘手的部分似乎是数据库复制。我们假设没有DNS或IP故障转移,并假设用户首先尝试直接访问远程服务器,如果这不起作用,用户仍可以使用本地服务器而不是现场服务器。这一切都发生在网络浏览器(或类似的客户端)内。
一种可能(但不令人满意)的解决方案是使用从R(主站)到L1,L2和L3(从站)的主从复制。当这样做异步这应该是相当快?我认为当主服务器损坏或无法访问时,这是临时本地只读数据库访问的可行解决方案。
但是......读写支持怎么样?我想在这种情况下我们需要多主复制,但恐怕使用像MySQL Cluster或Galera之类的东西进行同步复制会减慢速度,尤其是因为L1,L2和L3使用较低的带宽连接。他们通过广域网连接。 (另外,L1,L2或L3可能并不总是在线。)
真正的问题:您将如何解决这个特定的用例?目前我倾向于多主复制,如果它不会减慢太多事情。应用程序本身将主要由现场员工使用,但也由一些外部人员通过WAN使用。多主复制能够很好地工作吗?如果例如L1下降24小时并突然回到在线状态呢?如果R无法访问,该怎么办?
附加:不是我的主要问题,但我也需要通过SSL安全地发送同步数据,如果可能的话,请考虑到您的答案。
也许我还忘记了一些必要的细节;如果是这样,请回复一些反馈,我会尽力相应地更新我的问题。
请注意,我还没有确定数据库,数据库模式将从头开始开发,因此也欢迎使用其他数据库或数据库引擎的想法。 (目前我对MySQL和PostgreSQL有最丰富的经验)