alexk
(Alex)
1
你好!我刚搭建好一套全新的多容器 Discourse 环境,正在思考最佳的升级方法。
文档中写道:
在升级到 Discourse 新版本时,请尽量减少停机时间。您可以在站点运行时引导新的 Web 进程,待新镜像构建完成后,再将其切换上线。
根据我的理解,这是否意味着在另一个容器升级期间,可以安全地让旧版本的 Discourse 继续在线运行?
例如:
假设我在两个独立的虚拟机上运行着两个仅包含 Web 服务的容器,它们位于负载均衡器之后。我将其中一个容器实例从负载均衡器中移除,然后在最新版本上执行引导操作。此时旧版本仍继续提供服务,实现零停机(这样可以吗?)。接着,我将更新后的容器重新加入负载均衡器,并对另一个容器重复上述过程。
这样理解应该没错吧?
pfaffman
(Jay Pfaffman)
2
基本正确。若要实现真正的零停机升级,您需要先用 SKIP_POST_DEPLOYMENT_MIGRATIONS: 1 引导新容器,然后启动它。待旧容器停止运行后,再执行 SKIP_POST_DEPLOYMENT_MIGRATIONS=0 rake db:migrate。否则,引导过程可能会导致数据库进入旧容器无法使用的状态(不过并非每次升级都会发生这种情况)。
alexk
(Alex)
3
太棒了!数据库迁移正是我担心的问题,所以了解如何控制它们非常有帮助!