【问题标题】:Multi-master database replication with Django webapp and MySQL使用 Django webapp 和 MySQL 进行多主数据库复制
【发布时间】:2016-03-31 19:09:21
【问题描述】:

我正在努力扩展 web 应用程序并提供一些数据库冗余以防止出现故障并在需要更新时保持服务器正常运行。该应用程序仍在开发中,因此我选择了一个简单的多主机冗余和两个独立的数据库服务器来尝试实现这一点。每个服务器都有 Django 代码并托管自己的数据库,并且数据库应尽可能紧密地镜像(在几秒钟内更新)。

我正在尝试弄清楚如何使用 Django 和 MySQL 在数据库之间设置多主(主-主)复制。有很多关于仅使用 MySQL 进行设置的文档(使用各种配置),但我找不到任何可以从 Django 方面进行这项工作的文档。

据我了解,我需要通过在 Django 设置中添加两个数据库条目(每个主服务器一个)来解决此问题,然后编写一个数据库路由器,该路由器将指定从哪个数据库读取和从哪个数据库写入。在这种情况下,两个数据库都应该接受读取和写入,并且写入/更新应该被镜像到另一个数据库。路由器中的逻辑可以简单地使用循环技术来决定使用哪个数据库。从那里开始,应该通过 MySQL 配置来进行进一步的配置来设置实际的复制。

这种方法听起来是否正确,有没有人有过让它发挥作用的经验?

【问题讨论】:

    标签: python mysql django multi-master-replication


    【解决方案1】:

    您对路由器的想法很棒!我要补充一点,您需要自动检测数据库是否[慢] 下来。您可以通过响应时间和连接/读/写错误来检测。如果发生这种情况,您会暂时将此数据库从循环列表中排除,并尝试不时连接回它以检测数据库是否处于活动状态。

    换句话说,循环列表根据您的数据库机器的健康状况动态地增长和收缩。

    另一个重要的通知是,幸运的是,您不需要维护所有 Web 服务器通用的循环列表。每个 Web 服务器都可以将它自己的循环列表副本以及它自己包含和排除数据库的状态存储到该列表中。这只是因为本地网络问题,可以从一个 Web 服务器看到一个数据库服务器,而不能从另一个 Web 服务器看到。

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2014-01-05
      • 1970-01-01
      • 2012-06-29
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2012-07-10
      相关资源
      最近更新 更多