python - 使用 Django webapp 和 MySQL 进行多主数据库复制

标签 python mysql django multi-master-replication

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

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

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

这种方法听起来正确吗?有人有让这种方法发挥作用的经验吗?

最佳答案

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

换句话说,循环列表会根据数据库计算机的运行状况动态增长和收缩。

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

关于python - 使用 Django webapp 和 MySQL 进行多主数据库复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34468030/

相关文章:

python - 如何替换 bool 列表序列中的值?

python - 删除 python 字符串中第一个字符之后不是字母的所有内容

Python Subprocess.Popen 从一个线程

mysql - SQL:连接具有大量列的表时删除重复列

mysql - Hibernate 异常位置超出声明的序数参数的数量

python - 当搜索和结果位于同一页面时分页

python - 如何在python中将所有参数转换为字典

mysql - 如何根据另一个表中的值设置一个表的字段

python - 使用 unique_together 和保存经过身份验证的用户时出现问题

javascript - 在外部 javascript 文件/django 中使用 DOM 时出现问题