【问题标题】:Azure: Stop a Role without stopping all other Roles in hosted serviceAzure:停止角色而不停止托管服务中的所有其他角色
【发布时间】:2014-07-29 02:00:45
【问题描述】:

例如,我有一个托管服务,它有两个角色,web 和 worker。我想暂时摆脱工人角色。有没有简单的方法来实现这一目标?这看起来应该是微不足道的。

在 azure 门户中,如果我选择其中一个角色并点击 STOP,它将停止托管服务中的所有角色。在 Visual Studio 中,我可以从“角色”文件夹中删除角色并重新发布,但是当我想重新启动该角色时,我必须完成添加角色的整个过程;以及看似不必要的发布。

【问题讨论】:

  • 这可能是一个挑战 - 如果你可以停止 VM(例如通过 RDP),Azure Fabric 控制器会看到它然后执行它应该做的 - 在 VM 上重新启动你的角色其他地方。
  • “摆脱”是指要重新启动角色实例,还是避免为虚拟机付费? (或者别的什么?)
  • 不关心支付/不支付。只是希望它基本上停止工作。

标签: azure


【解决方案1】:

目前,如果不重新发布您的应用程序,您将无法执行此操作。但是在 Visual Studio 中有一种简单的方法来管理它。您可以创建 2 个 Azure 项目,一个带有 WorkerRole,一个没有 WorkerRole(请注意,您需要复制为 WebRole 配置的所有内容,例如证书、服务配置……):

为了让这个部署过程更容易一些,我建议你编写一个 PowerShell 脚本,它执行以下操作(例如):

  • 上传 *.cspkg
  • 部署到暂存
  • VIP交换
  • 删除暂存部署

无论如何,将实例数更改为 0 对您来说是一个完美的解决方案,但目前这是不可能的。产品团队的某个人确认该功能即将推出,但仅在 2012 年秋季之后发布。为该功能投票here

【讨论】:

  • 仅供参考 - 这意味着您将拥有 2 个云服务部署,这将影响成本。如果成本是一个问题,这可能不是一个好的选择。
【解决方案2】:

不,除非重新部署,否则角色是在 ServinceDefinition 中定义的,并且一旦部署服务就无法更改。您可以更改 ServiceConfiguration(例如角色实例的数量,但不能为零)。

正如 Jim 所说,您可以强制实例重启。您甚至可以破坏实例,使它们在重新启动后无法成功启动。

【讨论】:

  • 我发现破坏是最好的解决方案。打破角色的app.config/web.config 会阻止它永远启动。访问文件所需的远程桌面。
【解决方案3】:

这个帖子已经有几年的历史了,但我们仍然遇到我写这个答案时的同样问题。

我发现的一种更简洁的方法是在我的 worker wole 的服务配置中引入一个设置,带有一个布尔字符串。

然后,在我的 WorkerRole.OnRun() 中,我可以利用设置标志通过 if 语句影响代码执行路径。

请注意,这实际上不会停止工作角色实例的运行,它只会添加一个“功能标志”模式,以防止在角色的 OnRun() 的每次循环迭代期间执行实际工作代码路径。

这样做的好处是,如果我从 Azure Mgmt 门户更新设置,它将强制角色重新启动并获取新的设置值。

缺点是,如果您试图关闭辅助角色以最小化成本,这对您没有帮助,因为角色实例将继续运行。

HTH

【讨论】:

    【解决方案4】:

    另一种解决方案是,您可以在一个部署中运行 Web 角色,而在另一个部署中运行辅助角色。只要您的解决方案不需要角色直接相互通信,那么应该没问题。例如,如果实例通过队列与每个实例通信,则两个部署都可以使用相同的存储连接字符串(或服务总线命名空间)。

    通过单独部署,您可以使用脚本在不需要时拆除辅助角色,并在需要时重新部署它。虽然 Sandrino 提供的答案有效,但它需要有 VIP 交换和涉及您不希望受到影响的 Web 角色的全面部署。使用两个单独的部署可以让您将它们分开并仍然获得您想要的结果。

    如果角色确实需要在没有一些共享中介(如队列或数据库)的情况下直接相互通信,那么 Sandrino 的答案看起来是一个不错的选择。另外,请务必为他链接到的功能投票。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-10
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      相关资源
      最近更新 更多