【问题标题】:Running Django migrations in a multi-container Docker setup在多容器 Docker 设置中运行 Django 迁移
【发布时间】:2017-11-08 17:20:58
【问题描述】:

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

场景描述

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

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


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

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

【问题讨论】:

    标签: django docker infrastructure


    【解决方案1】:

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

    有两种可能的情况:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 2019-02-26
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      相关资源
      最近更新 更多