我在 IIS7 上有一个 Web 应用程序,以 SQL Server 2008 作为 RDBMS。
未来升级 ASP.NET 代码和 DB 架构时也需要实现 0 停机时间。我需要为此找到正确的方案。
我有 2 台 Web 服务器和 2 台 SQL 服务器以及一个 http 负载均衡器,允许切换 Web 后端服务器以处理 Web 请求。
主要目标是使第一个 Web 服务器和 DB 服务器启动并运行,更新第二个服务器上的代码和 DB 模式,然后将所有请求切换到第二个服务器,然后主要问题 - 如何从第一个数据库复制数据到第二个数据库(在升级期间发生了更改)。
答案1
这有点取决于您对“零停机时间”的定义——通过在两个 SQL 服务器之间设置复制,可以非常轻松地实现拆分->升级->故障转移->恢复方案,这也为您带来了冗余的好处。
这与您上面描述的非常相似:当您进行升级时,您会拆分复制对并升级其中一个(以及一些应用服务器),将负载切换到升级后的一组机器,然后升级其他机器并重新建立复制。需要注意的是,您可能仍需要停止接受变化(插入/更新)在升级窗口期间(至少直到升级后的服务器运行),否则您将面临裂脑情况,即“旧”系统上的更改将在“新”系统中丢失。
根据您所讨论的模式更改类型以及应用程序的编写水平,您可能能够在不停机的情况下进行一些更改(添加新表/视图、添加列等通常可以在不停机的情况下完成,只要您的应用程序在表中的列数发生变化时不会出现问题)。
我的建议是,坚持为所有更改/升级留出足够的维护时间,必要时包括停机时间。很少有系统需要真正做到 24x7x365,如果您遇到了意外问题,最好让系统离线,以便您有足够的时间修复问题或恢复更改,而不是匆忙修复,而愤怒的用户会因为没有预料到停机而对您施加压力...