我不确定这是否是提出这个问题的正确方式,但这基本上是我想要做的:
1.) 将变更集推送到 IIS 中的站点。2
.) 不要打扰用户。3
.) 能够毫不费力地回滚。
所以,我知道有几件事必须要发生:
1.) 超出 Proc 会话 - 已处理
2.) 超出 Proc 缓存 - 已处理
所以剩下的问题是:
1.) 我如何避免打扰用户? 如果我只是将文件上传到 bin,应用程序会回收并需要 10 多秒才能重新上线
2.) 我如何轻松回滚?
我认为一个可能的解决方案是在 IIS 中设置两个站点,一个是公共站点,一个是私人站点。上传会转到私人站点并进行预热。预热后,站点会进行交换。回滚仅涉及交换到私人站点,而无需上传。
理论上这似乎可行,但我不确定其机制。有什么想法吗?
答案1
以下是我解决这个问题的方法 - 请记住我以前没有这样做过,这只是我在开发环境中测试过的概念。您应该能够使用此框架和您选择的语言中的一些脚本来设置一个非常强大的框架。基本上,我们将设置一个贫民窟负载平衡环境,并使用它来在新站点和旧站点之间切换。
为了进行设置,您需要:
- IIS 应用程序请求路由(ARR)模块
- IIS Web 部署工具 (msdeploy)
- 3 个不同的 IIS 网站(具有 3 个不同的 IP 地址 - 仅使用端口或主机头可能不起作用)
首先安装 ARR。
在 IIS 中设置 3 个网站:
- 网站 1 将成为您的用户实际连接的网站,比如说
http://192.168.1.1/
。这也是 ARR 网站。只需设置一个空目录供其指向,并将其放入自己的应用程序池中。根据设置应用程序池不超时这些说明。 - 网站 2 和 3 将是实际托管您内容的网站。这些网站需要有自己的 IP,并且由于 ARR 的工作方式,它们位于与网站 1 不同的端口上。假设它们是
http://192.168.1.2:8080
和http://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 获取您的网站,但其他网站将完全无缝衔接。
现在,当您想要部署应用程序的新版本时,您可以执行以下操作:
- 停止服务器场中 1 台服务器的运行(在服务器场工具中,转到“监控和管理”,选择一个服务器,然后选择“正常使服务器不可用”)
- 将新版本的网站部署到离线系统中
- 使用备用 IP/端口对离线站点进行预热
- 使该地点再次可供农场使用
- 对另一台服务器重复此过程
当您想要编写所有这些脚本时,Web 部署工具就会派上用场。它使您能够非常轻松地为您的应用程序创建一个包并从命令行进行部署。如果出现问题,您还可以轻松回滚该包。ARR 也可编写脚本使用Microsoft.Web.Administration
dll。
还有一件事 - 如果你实际上是在 Windows 2008 R2(即 IIS 7.5)上,请查看应用程序预热模块——它也应该使你的热身部分变得更容易。
答案2
MattB 把它打出了水面。+1 我会回复更多细节,但我并不想接受他的观点。我会补充他所说的内容。
我有一个与他描述的类似的设置,效果很好。即使在单台服务器上,ARR 也是可行的方法。
不过,我想补充几点。
按照 Matt 的建议创建 2 个网站。将它们命名为 yoursite.com01 和 yoursite.com02。
创建 2 条 URL 重写规则。一条用于 www.yourdomain.com,另一条用于 staging.yourdomain.com。对于生产,使用 {HTTP_HOST},值为 (^www.yourdomain.com$)|(yourIP)。(或您喜欢的任何绑定)对于暂存,使用 {HTTP_HOST},值为 (^staging.yourdomain.com$)。将规则命名为 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。Stagging 则相反。
您可以随时部署到暂存区、测试、预启动、让其他人测试等。白天执行这些操作都没关系。每次都部署到同一个 FTP 帐户。与构建服务器配合使用效果很好。
然后,当您准备上线时,只需进行 3 项更改: - 将 FTP 绑定从 yoursite.com02 移动到 yoursite.com01 - 更改 URL 重写规则 yoursite.com 以指向 yoursite.com02 - 更改 URL 重写规则 staging.yoursite.com 以指向 yoursite.com01
现在您可以拥有零停机时间、即时切换和立即回滚功能!
您唯一需要考虑的问题是进程外会话状态。确保您的状态服务器接受两个站点 ID,这样您就不会在交换期间丢失会话状态。
还请注意,这仅适用于网络,而不适用于数据库。
对于脚本,请使用配置编辑器。进行所需的更改,然后单击“生成脚本”。它将为您提供 C#、appcmd 或 AHAdmin 代码。
我已经使用这个工具几个月了,使用网页前端来交换实例,我从未后悔过。与传统部署相比,它使部署变得如此新颖。