当我进行部署槽交换时,为啥 azure 会重新启动网站?

Posted

技术标签:

【中文标题】当我进行部署槽交换时,为啥 azure 会重新启动网站?【英文标题】:Why would azure be restarting website when i do a deployment slot swap?当我进行部署槽交换时,为什么 azure 会重新启动网站? 【发布时间】:2015-05-21 17:30:27 【问题描述】:

我有一个在 Azure 网站上运行的 .net 4.5 网站。我已经设置了暂存部署。我预热了两个站点,然后运行交换过程(来自 azure 门户和 Azure powershell)。无论我尝试什么,交换过程都会重新启动我的网站(两者),并且它们需要大约 3 分钟才能启动。

我的印象是部署交换应该让网站保持“温暖”并且没有停机时间?我的网站在大约 3 分钟内无法使用!

据我所知,生产槽和暂存槽具有相同的应用程序设置等。

任何建议或指示将不胜感激。

【问题讨论】:

您找到解决方法了吗? 【参考方案1】:

杰夫是对的。当为插槽定义了粘性应用设置或连接字符串时,网站的工作进程将在交换期间重新启动。在这种情况下发生的动作顺序是这样的:

    将生产槽中的粘性设置应用到当前处于暂存槽中的站点工作进程。这会导致工作进程重启; 通过在站点应该运行的每个 VM 实例上向其根 URL 发出 http 请求来预热站点的工作进程; 在插槽之间交换工作进程。现在预热的工作进程处于生产槽并正在接受生产流量; 将暂存槽中的粘性设置应用到当前位于暂存槽中的工作进程。此时这是“用于生产”的工作进程。此配置更改会导致该工作进程重新启动,但此时它不会占用任何生产流量。

【讨论】:

系统在第 2 步和第 3 步之间让站点预热多长时间?它是等待根 URL 上的 200 响应,还是直接点击它然后立即进行交换?或者有具体的持续时间? 它等待根 URL 上的 200 响应。此外,如果您在 web.config 文件中添加一组热身页面,它将等到所有这些页面都被命中。更多信息:github.com/projectkudu/kudu/wiki/Understanding-site-swaps 太棒了,感谢您的链接。这清除了一切。我注意到该文件只存在了两天,这就解释了它。 这对我不起作用 - 尽管 Web.config 中有 InitializationPage,但两个站点在交换操作期间都非常缓慢。如果我能真正看到交换期间发生的事情,那将非常有用。现在,当我失去平台上的用户时,它永远挂在那里,因为每个请求都需要 50 秒。现在尝试不设置插槽以希望解决此问题....【参考方案2】:

我在使用粘性应用设置选项时遇到了这个问题。我的假设是它会进行交换,但随后必须将设置更改为粘性值,因此就像您在 web.config 中进行更改或自己更改门户中的值一样,需要重新启动应用程序。

我还没有找到任何官方文档,但如果您设置了粘性插槽,我相信这是罪魁祸首。如果是这样的话,我不确定是否有什么可以做的。

【讨论】:

以上是关于当我进行部署槽交换时,为啥 azure 会重新启动网站?的主要内容,如果未能解决你的问题,请参考以下文章

交换 Azure Web App 部署槽会注销 ASP.NET Core RC2 中的所有用户

Azure 应用服务插槽配置并在交换期间重新启动

Azure 部署槽 - 交换和保留连接字符串

Azure Devops 中的交换服务结构

Azure Web 应用程序随机重启 - 任何人都可以扩展此建议吗?

如何处理 Azure 部署槽中的数据库回滚?