在多容器Docker环境中运行Django迁移

8

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

场景描述

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

分布式Django应用程序图表

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


我对这个问题的答案有两个假设。

  1. 是的,很安全。由于数据库级别锁定,迁移无法冲突,最终将运行一个迁移脚本,而另一个报告没有迁移要应用。
  2. 不,这不安全。两个迁移可能会互相冲突,因为它们试图修改数据库。
1个回答

6
不,同时在所有容器中运行迁移是不安全的,因为您可能会多次应用相同的迁移。有两种可能情况:第一种情况是多次应用迁移(例如添加表列)会违反数据库约束,因此仅第一个运行迁移的容器能够成功完成迁移。在这种情况下,其他容器将停止运行,尽管您的编排系统可能会重新启动它们。第二种情况是多次应用迁移不会违反任何约束,因此可以多次应用。在这种情况下,您可能会出现重复数据。无论如何,您应该尝试同时只有一个容器应用迁移。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接