在多容器 Docker 设置中运行 Django 迁移

Gun*_*her 5 django infrastructure docker

允许 Django 应用程序的多个实例同时运行相同的数据库迁移是否安全?

场景描述

这是一个 Django 应用程序的多个实例在负载均衡器后面运行的设置。当 Docker 容器的更新版本可用时,每个旧的 Docker 映像都将替换为新版本。

分布式Django应用图

如果存在新的 Django 迁移,则需要运行它们。这让我想到了一个问题:允许多个容器同时运行迁移 ( python manage.py migrate)是否安全?


关于这个问题的答案可能是什么,我有两个假设。

  1. 是的,它是安全的。由于数据库级锁定,迁移不会发生冲突,最终,一个迁移脚本将运行,而另一个报告没有要应用的迁移。
  2. 不,这不安全。这两个迁移在尝试修改数据库时可能会相互冲突。

duk*_*ody 5

不,同时在所有容器中运行迁移是不安全的,因为您最终可能会两次应用相同的迁移。

有两种可能的情况:

  1. 两次应用迁移(例如添加一个表列)违反了数据库约束,因此只有运行迁移的第一个容器设法完成迁移。在这种情况下,其他容器将死亡,尽管您的编排系统可能会重新启动它们。

  2. 两次应用迁移不会违反任何约束,因此可以多次应用。在这种情况下,您最终可能会得到重复的数据。

在任何情况下,您都应该尝试只让一个容器同时应用迁移。