【发布时间】:2020-08-06 19:05:09
【问题描述】:
我们支持使用 Spring Boot 以 Java 编写并部署在 OpenShift 中的多个微服务。一些微服务与数据库通信。我们经常在单个部署中的多个 pod 中运行单个微服务。当每个微服务启动时,它会启动 liquibase,它会尝试更新数据库。问题是有时一个 pod 在等待更新日志锁定时失败。 当在我们的生产 OpenShift 集群中发生这种情况时,我们预计其他 pod 在重新启动时会失败,因为与更改日志锁定问题相同。因此,在最坏的情况下,所有 pod 都将等待解除锁定。
我们希望 Liquidbase 在每个 pod 启动时自动准备我们的数据库模式。
把这个逻辑存储在每个微服务中好不好?当出现liquidbase changelog lock问题时,我们如何自动解决问题?我们是否需要将数据库准备逻辑放在单独的部署中?
所以也许我应该解释一下我的问题。就微服务架构而言,运行数据库迁移的最佳方式是什么?也许我们不应该在每个 pod 中使用 db 迁移?也许最好通过单独的部署来完成,或者通过一些根本不在 OpenShift 中的额外 Jenkins 工作来完成?
【问题讨论】:
-
怎么知道liquibase已经成功更新了db?
-
@ChrisBolton 在使用新版本的应用程序启动 pod 后,我们通过 Liquidbase 脚本更改了数据库结构中的某些内容,我们只需查看 postgres 并比较 liquibase 脚本中编写的内容和 postgres 中的内容。这是完全手动的过程。
-
自动化流程。
-
@ChrisBolton,我们真的不知道该怎么做
-
您好,您找到解决方案了吗?我们遇到了同样的问题,这真的很烦人......
标签: database spring-boot kubernetes openshift liquibase