自托管升级到3.1.0.beta2,典型的多容器安装需要额外的停机时间

我已将我的站点从 3.1.0.beta1 更新到 3.1.0.beta2,并在引导新版本后,但在销毁旧应用程序容器并启动新容器之前,至少有一个站点开始向用户显示通用错误页面。

我没有在我的测试站点或其他运行的站点上注意到它,但它有可能发生而我没有看到。

无论如何,至少在一种情况下,我的“零停机时间”更新过程并未成功。

9 篇帖子已拆分到新主题:自托管升级到 3.x 时出现问题:无法回滚

一个帖子已被合并到现有主题:自托管升级到 3.x 时出现问题:无法回滚

我想重申一下,我没有使用GUI更新器。我有一个多容器安装。我执行了:

git pull
./launcher bootstrap app
./launcher destroy app && ./launcher start app
./launcher cleanup

(即使是多容器安装,我也使用app作为Web应用程序。我知道这不是常规做法。我讨厌输入web_only

bootstrap启动后,以及在destroy应用程序之前的一段时间,运行在新数据库上的旧版本只显示了一个错误屏幕。我不记得具体内容了,而且我没有通过停止截图来延长停机时间,但它只是白屏上的文字,而不是系统维护页面。我以前只见过几次这种情况,当bootstrap在异步“零停机”重建过程中运行db:migrate时,正在运行的旧软件会因为模式不一致而失败。

我看到的是数据库不一致情况下的任何表现。这比盲目地继续操作、破坏数据库要好得多!当我发帖时,是为了警告这种情况,即在应用一次小版本更新(此处是从3.1.0.beta1到3.1.0.beta2)时,在运行3.1.0.beta2的db:migrate后,3.1.0.beta1代码与数据库之间出现了模式不兼容,这种情况在多容器部署的正常低停机时间更新中很少发生,但偶尔会发生。

我的经历与GUI更新器中报告的Ruby错误不同。这是一个完全不相关的问题。我认识到我的帖子已从公告中移至通用的“问题”主题,但我想明确一点,我将其发布在公告中是为了警告像我一样的其他自托管用户,当他们看到公告时,此特定更新可能会产生这种影响。

我的帖子不是抱怨bug,甚至不是抱怨问题。它只是为了通知大家,这是与此特定版本相关的一个正常但罕见的案例,并且在发行说明中没有特别指出。

关于docker管理器未能识别其无法在镜像内部进行更新的抱怨,与我试图为其他自托管管理员提供有用的通知完全无关。

将这些不相关的问题分离到独立的线程中会更有意义。 EDIT by @supermathie: 已完成

1 个赞

您是否正在使用 Introducing Post Deployment Migration 进行分阶段迁移?

如果您正在进行蓝绿部署等操作,并且需要旧版本继续运行,那么这种模式至关重要。

1 个赞

我认为这回答了这个问题。launcher 脚本不支持 SKIP_POST_DEPLOYMENT_MIGRATIONS

同样,我没有报告错误。 我只是想警告那些使用标准多容器安装并遵循正常文档流程使用 launcher 进行多容器安装的人,这次的体验与他们通常的体验不同。

真的,真的,老实说,我的意思是,这不是错误报告!

如果我想使用 launcher 进行蓝/绿部署,我应该为 launcher 提供一个 PR 来实现它。:smiling_face:

1 个赞

主题标题中的“问题”不是我提出的;那是在我的评论被移出公告主题时产生的。我现在已经修改了标题,希望能够清楚地表明我并不是在抱怨一个问题。 :smiling_face:

1 个赞

一切顺利!

我怀疑有极少数用户在使用多容器蓝绿部署,但我们欢迎有关如何实现这一目标的建议。

另外,如何找到我链接的主题;我怀疑如果用户不知道它存在,就很难找到它。

2 个赞

我看到了 SKIP_POST_DEPLOYMENT_MIGRATIONS 文档。我真正错过了的是这篇展示如何使用 launcher 进行零停机部署的帖子:

现在我必须考虑这一点,因为我知道它是可行的。如果我这样做,我会更新 MKJ's Opinionated Discourse Deployment Configuration

当我为我业余时间免费运行的服务提供四九,有时四个半九的可用性时,我一直很难对此感到兴奋。这证明了 Discourse 开发的质量,我可以在通过所有测试的策略下做到这一点,包括像这次看到的一分钟左右的停机时间,以及有时为了安全更新而重启主机。

3 个赞

dashboard.literatecomputing.com 使用的 Ansible 脚本会在新容器启动后运行一个 rake 任务来执行部署后迁移。它依赖于 web_only.yml 中设置了 SKIP_POST_DEPLOYMENT_MIGRATIONS。我只在我知道会被我的脚本管理的站点上这样做,因为如果你不了解它的工作原理,它可能会变成一个定时炸弹。

请注意,对于许多升级,引导新容器不会破坏正在运行的容器,但对于某些升级则会。升级迁移导致旧容器无法使用数据库(如果不使用 SKIP_POST_DEPLOYMENT_MIGRATIONS)并非不常见。

2 个赞