启动容器化微服务的多个实例时处理数据库架构创建和迁移

F21*_*F21 6 database-migration docker kubernetes microservices

我想在 Docker 容器中部署我的微服务。我希望这些微服务尽可能无状态,仅将状态持久保存到数据库中。

这意味着有以下要求:

  • 这些服务部署为 docker 容器并使用 kubernetes 进行编排。
  • 每个服务都可以部署并扩展到多个实例。
  • 服务的每个实例都是相同的。这意味着它们必须都传递给它相同的环境变量和配置。
  • 每个实例不应该关心或了解另一个实例。
  • 实例应该是无状态的,并且不应选举领导者或具有法定人数。

这导致我在处理模式创建和迁移时遇到问题:

  1. 如果我有一个使用 MySQL 或 Postgres 作为数据存储的服务,如何在首次启动时创建表/模式?我应该只使用CREATE IF NOT EXIST语句并让实例在启动期间“战斗”吗?我无法设置环境变量来要求仅为其中 1 个实例创建表/架构。

  2. 如何处理具有上述约束的架构迁移?有许多操作(例如删除/添加列)无法封装在事务中。

Mar*_*nor 0

您需要使用能够支持数据库迁移的工具。我在 Java 领域推荐的两个是:

这些绝不是此类别的唯一工具。他们所做的就是记录已应用于数据库实例的架构更改,确保架构与版本控制系统中捕获的所需状态相匹配。


例子