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

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

鉴于

我运行多个可选在负载平衡器后面运行的应用服务器。应用服务器共享一个 SQL Db。我认为这是非常传统的设置。

假设应用程序有一个可用的 sw 升级包。升级包括对应用程序和数据库架构的更改。

问题

管理员开始在第一个应用服务器上安装升级。这会导致应用服务器和数据库架构更新到新版本。

一旦 Db 更新开始运行,其余的应用服务器应该以某种方式收到通知,它们应该停止使用 Db,直到它们收到升级为止。我想知道是否有已知的解决方案?

正在使用的技术

  • 应用服务器:Ubuntu 16 上 lighttpd-1.4.35 后面运行的 Linux 守护进程
  • Db:Ubuntu 16 上的 MySQL-5.7
  • 负载均衡器:尚未决定(欢迎提出建议)

答案1

这个问题无法笼统地回答。这取决于应用程序本身以及您正在进行的更改类型。例如,某些数据库更改不应影响正在运行的应用程序(如果操作得当),例如向现有表添加新列或添加新表。其他更改可能会产生影响,例如删除现有列或重命名现有列。

当然,最安全的解决方案是完全停止应用程序,对应用程序和数据库进行必要的更改,然后重新启动应用程序。根据您的要求,这可能是可行的,也可能不可行。

如果希望停机时间不长或尽量缩短,则必须同时提供两个正在运行的独立副本。在一个副本(应用程序 + 数据库 + 任何其他依赖项)上进行升级,同时保持用户对第二个副本的访问。在启动第一个副本并将用户重定向到第一个升级副本后,升级第二个副本。

相关内容