我想在一台物理机器上托管同一个站点的两个副本尽量减少升级期间的停机时间。
我认为我可以在机器前面放置一个负载均衡器,为该机器分配两个 IP,并在负载均衡器中设置 IP。
问题是当我需要更新网站(其代码而不是基础设施)时。我认为我可以通过取出网站的一个“实例”、对其进行升级然后将其重新联机并对另一个进行相同操作来最大限度地减少停机时间。
这可行吗?
这值得吗?
答案1
当然,这就是我们所做的。我们有两台 Web 服务器,A 和 B。我们在它们前面安装了 haproxy,尽职尽责地平衡它们之间的请求。和您一样,我们不会以请求的方式存储会话数据必须返回其原始服务器。
当我们想要升级时,我们会将服务器 A 从池中取出。我们执行升级并在内部测试站点。然后,我们将服务器 A 放入池中,同时将服务器 B 从池中取出。然后我们升级服务器 B,并将其放回池中。
优点:网站升级时无需停机。
缺点:升级期间没有负载平衡或冗余。要解决这个问题,您必须将更多服务器加入其中。
至于是否值得,只有您才能回答。我们的软件非常复杂,部署可能需要 5 分钟以上(这是在完全自动化的情况下),而且几乎 24/7 全天候使用。所以对我们来说,这是一件轻而易举的事。
如果您的网站在一天中只是偶尔获得流量,或者主要是在工作时间,并且您没有突破单个 Web 服务器的处理能力,那么这可能不值得这么麻烦。在svn export
运行时显示 10 秒钟的维护横幅可能是一个更合适的解决方案。
答案2
看看 WebFarmFramework 和 ARR。WFF 将为您自动部署代码以及 IIS 设置。此外,如果您使用它的负载平衡器,它将在升级时将节点脱机。
我实际上正在研究同样的问题,所以我不能保证在生产中会出现这种情况,只是另一个需要考虑的想法。