手动重新启动Azure辅助角色“WaWorkerHost.exe”

时间:2016-06-14 10:20:48

标签: c# azure azure-worker-roles

据我了解,Azure应用程序角色在名为 WaWorkerHost.exe 的主机应用程序的帮助下运行,还有另一个名为 WaHostBootstrapper.exe 的应用程序,用于检查 WaWorkerHost .exe 正在运行,如果没有,它将运行 WaWorkerHost.exe

  1. 这种“工人角色状态检查”多久发生一次?
  2. 如何自行快速重启Worker角色?我可以重新启动机器工作者角色正在运行并等待几分钟或选择以下传统方法:

    Taskkill / im / f WaWorkerHost.exe

    等待几分钟让 WaHostBootstrapper.exe 启动,但效率非常低且速度慢。 是否有任何(即时)方法重新启动辅助角色?

  3. 我可以运行类似以下的内容并期望与 WaHostBootstapper.exe 类似的结果,还是有其他考虑因素?

    WaWorkerHost.exe {MyAzureWorkerRole.dll}

2 个答案:

答案 0 :(得分:1)

  1. 引导程序每1秒检查一次WaWorkerHost状态。
    通过查看跟踪间隔,您可以在bootsrapper日志(c:\ resources \ WaHostBootstrapper.txt)中看到它:
  2.   

    "从客户端获取状态WaWorkerHost.exe"

    1. 您可以使用AzureTools这是Azure支持团队使用的实用程序。
    2. 其功能之一是优雅地回收角色实例:

      enter image description here

      或者,您可以以编程方式重新启动实例:

      使用Microsoft Azure Compute Management library

      X509Certificate2 cert = new X509Certificate2("");
      var credentials = new CertificateCloudCredentials("your_subscription_id", cert);
      
      using (var managementClient = new ComputeManagementClient(credentials))
      {
          OperationStatusResponse response =
              await managementClient.Deployments.RebootRoleInstanceByDeploymentSlotAsync(
                  "cloud_service_name",
                  DeploymentSlot.Production, // or staging
                  "instance_name");
      }
      
      1. 不建议这样做,原因有三:左

        1. 靴子每秒检查一次,对于大多数情况来说应该足够了。
        2. 这可能导致奇怪的问题。例如,你杀死了worker,bootstrapper识别出worker已关闭,你手动启动worker,bootstrapper也试图启动worker而失败(会崩溃?会进入僵尸状态吗?)。它可能导致不健康的引导程序,意味着没有任何工作过程。
        3. 当然,这取决于引导程序除了启动工作程序之外的其他功能。但即使它目前除了启动角色之外什么都没做,你无法确定明天的Azure团队是否会决定为它添加更多的职责/行动。

答案 1 :(得分:0)

如果角色本身意识到需要重新启动,则可以调用RoleEnvironment.RequestRecycle以使角色实例重新启动。