AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 124274
Accepted
ChickenMilkBomb
ChickenMilkBomb
Asked: 2010-03-20 06:15:58 +0800 CST2010-03-20 06:15:58 +0800 CST 2010-03-20 06:15:58 +0800 CST

IIS 中的零停机上传/回滚

  • 772

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

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

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

1.) 超出 Proc 会话 - 已处理
2.) 超出 Proc 缓存 - 已处理

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

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

这在理论上似乎是合理的,但我不确定机制。有任何想法吗?

iis asp.net rollback
  • 2 2 个回答
  • 4882 Views

2 个回答

  • Voted
  1. Best Answer
    MattB
    2010-03-26T11:52:23+08:002010-03-26T11:52:23+08:00

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

    要进行设置,您将需要:

    • 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 获得你的网站,但如果有其他网站,那将是完全无缝的。

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

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

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

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

    • 29
  2. Scott Forsyth
    2010-03-26T13:22:22+08:002010-03-26T13:22:22+08:00

    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。踉踉跄跄到对面。

    您可以随时部署到登台、测试、预启动、让其他人测试等。白天做,没关系。每次部署到同一个 FTP 帐户。非常适合构建服务器。

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

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

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

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

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

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

    • 10

相关问题

  • 2003 Server企业版不能运行ASP.NET应用程序?

  • 启用集成 Windows 身份验证时,ASP(经典)在哪个帐户下运行?

  • 是否有一种简单的方法可以生成有关 IIS 中“死”文件的报告?

  • IIS 7 中的 URL 重写

  • 对于 ASP.Net 应用程序,Windows 64 位相对于 32 位的主要优势是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve