2010-12-08 20 views
3

我正试图找到最佳的服务器体系结构解决方案,以将每月更新部署到Asp.net外部公众面向的网站。我正在寻找的方法是发布网站的新版本,而对用户的影响最小。除了部署标准方式(即停止IIS,在现有网站上复制新网站,启动IIS),部署哪些“更好”的解决方案?如果他们保持会话并且在更新期间不必看到“正在维护的网站”消息,那将会很好。如何将网站部署到生产中而对用户影响最小

我的服务器配置

我们有2台IIS Web服务器(2003年),并试图找出利用他们部署的最佳途径。我的第一个想法是用最新版本更新非活动Web服务器。然后优雅地将Web流量指向该服务器,而对用户的影响最小(最好的情况是,用户不会丢失会话)。你将如何去“重新分配”从服务器1到服务器2的网络流量?改变防火墙NAT?更改DNS记录?其他一些方式?我们需要能够在我们发布新变更(杜)后立即测试现场。

顺便说一句,我们正在使用nant和巡航控制来自动化构建以及将构建部署到生产的自定义Web服务。因此,只需点击一下按钮即可实现自动化。

使用第三台服务器可以获得更好的解决方案吗?如果是这样如何?

回答

2

我们这样做的方式是

我们有来自的NetScaler负载平衡器,

需要一个Web服务器负载平衡器出来的,难道所有部署,做一个IISRESET和负载平衡器放回。

对server2做同样的事情。

最后使loadbalancer缓存失效。

+0

只是想知道 - 你确保没有用户的网络服务器之前,他们的会话处于活动状态,然后再将其从负载平衡器中取出 - 如果是这样的话?还是仅仅使用像Database这样的内存不足会话来确保用户不会丢失现有会话? – InSane 2010-12-08 02:02:36

2

嗯,有几件事情在这里:

  • 首先,可以考虑使用负载均衡解决方案。 Windows 2003服务器附带Windows负载平衡(WLBS),虽然它不是最棒的产品。但它是免费的。这样,您可以将所有流量指向一台服务器,进行更新,然后执行相反的操作。

  • 其次,你可能要考虑看​​看你如何使用会话。 HTTP是无状态的,这意味着只要你可以在任何页面重建用户的会话,你应该没问题。实现此目标的一个理想步骤是使用ASP.NET窗体身份验证 - 它编写的cookie不绑定到ASP.NET会话。当然,这种方法会带来更大的风险 - 如果用户在复制文件时遇到了某些问题,用户可能会遇到错误屏幕。然后在应用池刷新时会有延迟。

总的来说,你更好的选择是负载平衡。尽管如此,考虑尝试第二种选择 - 如果用户未能粘贴到池中的某个服务器,那么会话可以重新生成。

+0

谢谢约翰。这证实了负载平衡器可能是最好的解决方案。 – 2011-01-18 23:46:03

1

只是为了简洁而添加。在我以前的工作中,我们通过以下设置实现无缝部署:

ASP.NET webserver seamless deployment

负载均衡将指向生产ASP.NET Web服务器(在你的情况下,两个,但是我们有三个),和Web服务器会将其会话设置从专门用于托管OutOfProc ASP.NET会话的第三台服务器中提取。

要部署一个站点,我们需要将其中一台服务器从负载平衡器中取出,更新这些文件,将其备份并重新放回负载平衡器池中。重复其余的网络服务器。

由于每个网络服务器都从一台中央服务器获取会话数据,因此只取出一台网络服务器,并没有注销该服务器上的用户。

如果我们有与现有会话数据不兼容的代码更改,我们将等待直至部署预定的维护时段。否则,具有该会话数据的用户将在登出之前发生错误。

此外,由于此设置依赖于Web服务器启动,如果您想提高可靠性,可以将OutOfProc更改为基于SQL的会话服务器。您需要几台复制相同会话数据库的服务器,并将Web服务器指向它们。更复杂,但会减少站点的停机时间。