0

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

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

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

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

4

1 回答 1

0

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

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

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

于 2016-01-17T18:22:02.410 回答