IIS 中的零停机上传/回滚

Chi*_*omb 17 iis asp.net rollback

我不确定这是否是问这个问题的正确方式,但基本上我想做的是:

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

所以,我知道有一些事情必须发生:

1.) 进程外会话 - 已处理
2.) 进程缓存外 - 已处理

所以剩下的问题是:
1.) 我如何避免打扰用户?如果我只是将文件上传到 bin,应用程序会回收并需要 10 多秒才能重新上线
2.) 我如何轻松回滚?

我在想一个可能的解决方案是在 IIS 中设置两个站点,一个公共站点和一个私有站点。上传进入私人并得到热身。热身后,交换站点。回滚只需要交换到私有而不上传。

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

Mat*_*ttB 29

这是我将如何解决这个问题 - 请记住,我以前没有这样做过,这只是我在我的开发环境中稍微测试过的概念。您应该能够使用这个和一些您选择的语言的脚本来设置一个非常强大的框架。基本上,我们将设置一个 ghetto 负载平衡环境,并使用它在新站点和旧站点之间切换。

要进行设置,您将需要:

安装 ARR 开始。

在 IIS 中设置 3 个网站:

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

安装 ARR 后,IIS 管理器中将有一个名为“服务器场”的新类别 - 右键单击​​并创建一个新场。

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

至此,您已了解我们完成您的请求所需的基本信息。如果你去,http://192.168.1.1/你会从网站 1 或网站 2 获得你的网站,但有其他网站将是完全无缝的。

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

  • Drainstop 1 服务器场中的服务器(在服务器场工具中,转到“监视和管理”,选择一个服务器并选择“使服务器正常不可用”)
  • 将站点的新版本部署到离线系统
  • 使用备用 IP/端口预热离线站点
  • 使该站点再次可供农场使用
  • 对另一台服务器重复该过程

当您谈到想要编写所有这些脚本时,Web 部署工具就派上用场了。它使为您的应用程序创建包并从命令行部署它变得非常容易。如果出现问题,您还可以轻松回滚该包。ARR 也可以使用Microsoft.Web.Administrationdll编写脚本

另一件事 - 如果您实际上使用的是 Windows 2008 R2(即 IIS 7.5),请查看应用程序预热模块 - 它也应该使您的预热部分更容易。


Sco*_*MVP 10

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

我有一个与他描述的类似的设置,而且效果很好。ARR 是可行的方法,即使在单个服务器上也是如此。

但是,我要补充几件事。

按照马特的建议创建 2 个站点。将它们命名为 yoursite.com01 和 yoursite.com02。

创建 2 个 URL 重写规则。一个用于 www.yourdomain.com,另一个用于 staging.yourdomain.com。对于生产,使用值为 (^www.yourdomain.com$)|(yourIP) 的 {HTTP_HOST}。(或任何您喜欢的绑定)对于暂存,使用值为 (^staging.yourdomain.com$) 的 {HTTP_HOST}。调用规则 yoursite.com 和 staging.yoursite.com。

将 Rule=yoursite.com 绑定到 site=yoursite.com01,将 rule=staging.yoursite.com 绑定到 site=yoursite.com02。

在 staging.yoursite.com 上设置 FTP。

生产流量现在将流向 Rule=staging.yoursite.com 和 Site=yoursite.com01。向相反的方向倾斜。

您可以在任何时候部署到登台、测试、预启动、让其他人进行测试等。白天做,没关系。每次都部署到同一个 FTP 帐户。适用于构建服务器。

然后,当您准备好上线时,只需进行 3 项更改: - 将 FTP 绑定从 yoursite.com02 移动到 yoursite.com01 - 将 URL 重写规则 yoursite.com 更改为指向 yoursite.com02 - 更改 URL 重写规则暂存。 yoursite.com 指向 yoursite.com01

现在您拥有零停机时间、即时切换和即时回滚功能!

您唯一需要考虑的问题是您的进程外会话状态。确保您的状态服务器接受两个站点 ID,这样您就不会在交换期间丢失会话状态。

另请注意,这仅是网络而不是数据库。

对于脚本,请使用配置编辑器。进行所需的更改,然后单击“生成脚本”。它将为您提供 C#、appcmd 或 AHAdmin 代码。

我已经使用网页前端来交换实例几个月了,而且我从不回头。与传统部署相比,它使部署如此令人耳目一新。