2

我在 Azure 中使用 4 个工作实例运行一项服务。当我扩展到 5 个工作实例时,已启动的第一个实例进入“忙碌”状态。这是为什么?放大期间会发生什么?天蓝色是否重新运行所有启动任务?我很困惑,似乎找不到任何关于此的文档。

在扩展到 5 个实例后,第一个实例将其状态更改为:

Busy (Waiting for role to start... Application startup tasks are running. [2014-08-12T18:36:52Z])

并且在那里运行的 java 进程停止。为什么会出现这种情况?!

任何帮助,将不胜感激。

启动.cmd

REM   Log the startup date and time.
ECHO Startup.cmd: >> "%TEMP%\StartupLog.txt" 2>&1
ECHO Current date and time: >> "%TEMP%\StartupLog.txt" 2>&1
DATE /T >> "%TEMP%\StartupLog.txt" 2>&1
TIME /T >> "%TEMP%\StartupLog.txt" 2>&1

REM enable ICMP
netsh advfirewall firewall add rule name="ICMPv6 echo" dir=in action=allow enable=yes protocol=icmpv6:128,any

ECHO Starting WebService >> "%TEMP%\StartupLog.txt" 2>&1
tasklist /FI "IMAGENAME eq java.exe" 2>NUL | find /I /N "java.exe" >NUL 2>&1
if "%ERRORLEVEL%"=="0" GOTO running

SET %ERRORLEVEL% = 0
START /B java -jar WEB-SERVICE-1_0--SNAPSHOT.jar app.properties >> "%TEMP%\StartupLog.txt" 2>&1

:running
SET %ERRORLEVEL% = 0
4

2 回答 2

5

在规模操作期间,Azure 将通过更改事件向所有现有实例发送 RoleEnvironmentTopologyChange。这允许这些实例发现新的角色实例,以便允许实例之间的通信。请注意,仅当您定义了内部端点时才会发生这种情况(如果您打开 RDP,那么您将隐式获取内部端点)。

默认情况下,这些拓扑更改不会影响正在运行的实例。但是,如果您订阅了更改事件并进行了设置,e.Cancel=True那么角色实例将重新循环并再次运行您的启动任务。

有关拓扑更改的详细信息,请参阅http://azure.microsoft.com/blog/2011/01/04/responding-to-role-topology-changes/

所以这里有两个问题:

  1. 为什么您的角色无法从循环中恢复?这是一个重大问题,您必须解决这个问题才能获得可靠的服务。您可以从http://blogs.msdn.com/b/kwill/archive/2013/08/09/windows-azure-paas-compute-diagnostics-data.aspx中的故障排除工作流开始,特别是在场景 3 http://blogs.msdn.com/b/kwill/archive/2013/09/06/troubleshooting-scenario-3-role-stuck-in-busy.aspx
  2. 为什么要回收角色实例以响应拓扑更改?检查您的更改事件处理程序并确保您没有设置e.Cancel=true.
于 2014-08-12T23:09:32.720 回答
0

这对于评论来说太长了,只是增加了 kwill 已经告诉过的内容:

我的 ASP.NET Web 角色没有e.Cancel = true任何位置,但在横向扩展后仍然重新启动(或者更确切地说:回收,甚至在调用 10 分钟之前完全重新初始化的环境OnStart(),就像在新部署之后一样)。所以我继续添加了一个事件处理程序,它应该设置已经是默认值:

public class WebRole : RoleEntryPoint
{
    public override bool OnStart()
    {
        RoleEnvironment.Changing += (sender, e) =>
        {
            if (e.Changes.Any(change => change is RoleEnvironmentTopologyChange))
            {
                e.Cancel = false;
            }
        };
    }
}

这有帮助!角色仍然很忙,但只是几秒钟而不是 15-20 分钟。似乎只有角色中的网站重新启动(或者可能整个 IIS),但角色没有重新启动,整个环境也没有重新初始化。

于 2017-01-29T17:50:56.513 回答