在IIS中零停机上传/回滚

我不知道这是否是正确的方式来问这个问题,但这里基本上是我想要做的:

1.)将更改集推送到IIS中的站点。
2.)不要打断用户。
3.)能够毫不费力地回滚。

所以,我知道有几件事情必须发生:

1.)超出Proc会话 – 处理
2.)超出Proccaching – 处理

所以问题依然存在:
1.)我如何防止中断用户? 如果我只是上传文件到垃圾箱,应用程序回收,并需要10多秒才能回来上网
2.)我如何毫不费力地回滚?

我在想一个可能的解决scheme是在IIS中build立两个站点,一个是公共的,一个是私人的。 上传到私人并得到预热。 热身后,网站被交换。 回滚只需要交换到私人没有上传。

这在理论上听起来很合理,但我不确定这个机制。 有任何想法吗?

下面是我将如何处理这个问题 – 请记住,我以前没有这样做,这只是我在开发环境中testing一些概念。 你应该能够使用你的语言select一个脚本来设置一个非常健壮的框架。 基本上我们要设置一个贫民窟负载平衡环境,并使用它在新网站和旧网站之间切换。

要build立它,你将需要:

  • IIS应用程序请求路由 (ARR)模块
  • IIS Web部署工具(msdeploy)
  • 3个不同的IIS网站(有3个不同的IP地址 – 只是使用端口或主机头可能无法在这里工作)

安装ARR开始。

在IIS中设置3个网站:

  • 网站1将是您的用户实际连接到的网站,可以说http://192.168.1.1/ 。 这也是ARR网站。 只需设置一个空目录来指向它,然后将其放置在自己的应用程序池中。 根据这些说明将应用程序池设置为不超时。
  • 网站2和3将是实际托pipe您的内容的网站。 这些需要在他们自己的IP上,并且由于ARR的工作方式,在不同于网站1的端口上。假设它们是http://192.168.1.2:8080http://192.168.1.3:8080 。 他们也应该在自己的应用程序池中,并指向文件系统上的不同目录(但是这两个目录通常具有相同的内容)

安装ARR之后,在IISpipe理器中会出现一个名为“Server Farms”的新类别 – 右键单击​​它并创build一个新的服务器场。

  • 给它一个对你有意义的名字
  • 添加Webserver 2和Webserver 3作为服务器 – 确保点击“高级设置”button,打开“applicationRequestRouting”类别并将每个服务器的httpPort更改为8080
  • 完成向导 – 将询问您是否要创buildURL重写规则 – 单击是
  • 您现在有一个服务器场 – 完成configuration,转到服务器场,然后单击“代理configuration”button – 打开“响应头中的反向重写主机”并应用更改
  • 在IISpipe理器中,转至根级别服务器类别,然后单击“URL重写”button,将为您的服务器场创build一条规则
    • 双击规则进入设置
    • 打开条件框
    • {SERVER_PORT}添加一个新的条件不匹配8080
    • 应用更改

在这一点上,你有我们需要完成你的要求的基础知识。 如果你去http://192.168.1.1/你会从网站1或网站2得到你的网站,但它将是完全无缝的,有其他网站。

现在,当您要部署新版本的应用程序时,您可以执行的操作是:

  • 您的服务器场中的服务器的漏斗1(在服务器场工具中,转到“监视和pipe理”,select一个服务器并select“使服务器不能正常工作”)
  • 将您的新版本的站点部署到脱机的系统
  • 使用备用IP /端口热身离线的站点
  • 使该网站再次可用于农场
  • 重复其他服务器的过程

Web部署工具在您想要编写所有脚本时发挥作用。 这使得为​​应用程序创build一个包并从命令行部署它变得非常容易。 如果有问题,您也可以轻松地回滚该软件包。 ARR也可以使用Microsoft.Web.Administration DLL 编写脚本 。

另一件事 – 如果你实际上是在Windows 2008 R2(这是IIS 7.5),看看应用程序预热模块 – 它应该使你的这个预热部分更容易。

MattB把它从水里打了出来。 +1我会回复更多的细节,但我不想看看他的观点。 我会补充他所说的。

我有一个类似的设置,他所描述的,它很好。 即使在一台服务器上,ARR也是如此。

不过,我会补充一些东西。

创build2个网站,如马特推荐。 叫他们像yoursite.com01和yoursite.com02。

创build2个URL重写规则。 一个用于www.yourdomain.com,另外一个用于staging.yourdomain.com。 对于生产,请使用{HTTP_HOST},值为(^ http://www.yourdomain.com $)|(yourIP)。 (或任何你喜欢的绑定)对于分段,请使用{HTTP_HOST},值为(^ staging.yourdomain.com $)。 调用yoursite.com和staging.yoursite.com的规则。

绑定规则= yoursite.com到网站= yoursite.com01和规则= staging.yoursite.com到网站= yoursite.com02。

在staging.yoursite.com上设置FTP。

生产stream量现在将规则= staging.yoursite.com和Site = yoursite.com01。 St to到相反。

你可以在任何时候部署到升级,testing,预先spinup,有其他人testing等。在白天做,没关系。 每次部署到相同的FTP帐户。 与构build服务器很好地协作。

然后,当您准备上线时,只需进行3个更改: – 将FTP绑定从yoursite.com02移动到yoursite.com01 – 更改URL重写规则yoursite.com指向yoursite.com02 – 更改URL重写规则分段。 yoursite.com指向yoursite.com01

现在,您有零宕机时间,即时切换,即时回滚function!

你唯一需要考虑的是你的进程会话状态。 确保您的状态服务器接受两个站点ID,以便在交换过程中不会丢失会话状态。

另请注意,这只是networking而不是数据库。

对于脚本,使用configuration编辑器。 进行所需的更改,然后单击“生成脚本”。 它会给你C#,appcmd或AHAdmin的代码。

我已经有了一个网页前端几个月的地方交换实例,我永远不会回头看。 与传统部署相比,它使部署更加清爽。