分布式服务器应用程序的一致性升级

特定

我运行多个运行在负载均衡器后面的应用程序服务器。 应用程序服务器共享一个SQL Db。 相当传统的设置,我认为。

想象一下,sw升级包可用于应用程序。 升级包括对应用程序和Db架构的更改。

问题

pipe理员开始在第一个应用程序服务器上安装升级。 这导致应用程序服务器和Db模式更新为新版本。

一旦Db更新正在运行,剩下的应用程序服务器应该以某种方式被通知他们应该停止使用Db,直到他们收到升级。 我不知道有没有已知的解决scheme?

技术在使用

  • 应用程序服务器:在Ubuntu 16上运行在lighttpd-1.4.35后面的Linux守护进程
  • Db:在Ubuntu 16之上的MySQL-5.7
  • 负载平衡器:还没决定(build议欢迎)

这不能以一般的方式回答。 这取决于应用程序本身以及您正在进行的更改的types。 例如,某些数据库更改不应该影响正在运行的应用程序(如果正确完成),例如将新列添加到现有表或添加新表。 其他人可能会影响像删除现有的列或重命名。

当然,最安全的解决scheme是完全停止应用程序,对应用程序和数据库执行所需的更改,然后再次启动应用程序。 根据您的要求,这可能也可能不可行。

如果不需要或停机时间最短,则必须同时提供两个运行的独立副本。 在保持用户访问第二个副本的同时,在一个副本(应用程序+ DB +任何其他依赖项)上进行升级。 启动第一个副本并将用户redirect到第一个升级后的副本后升级第二个副本。