Compartilhar via


Reinicializações de instância de função causadas por atualizações do sistema operacional da VM do Azure

Este artigo discute os efeitos das atualizações do sistema operacional (sistema operacional) de máquina virtual do Microsoft Azure sobre a reinicialização de instâncias de função. Ele contém detalhes sobre agendas de atualização do sistema operacional e do agente convidado, impactos e requisitos de serviço, notificação, detecção e como resolver problemas comuns.

Agendamentos de atualização

Aproximadamente mensalmente, a Microsoft lança uma nova versão do sistema operacional convidado para VMs paaS (plataforma como serviço) do Azure. A agenda exata varia e a tendência histórica pode ser vista nas versões do sistema operacional convidado do Azure e na matriz de compatibilidade do SDK. Durante essa distribuição, o Controlador do Azure Fabric faz duas passagens (uma passagem do sistema operacional host e uma passagem de sistema operacional convidado) por todos os datacenters. Uma atualização periódica do agente convidado do Azure também é executada dentro de sua VM.

As seções a seguir fornecem mais detalhes sobre os dois passes de atualização e a atualização do agente convidado.

Passar 1: sistema operacional host

A primeira passagem atualiza o sistema operacional host. O sistema operacional host reinicia instâncias de função e o controlador de malha garante que apenas as instâncias de um domínio de atualização por vez sejam reiniciadas. Durante essa reinicialização, suas instâncias de função passam pelo processo de desligamento padrão. Em seguida, o RoleEnvironment.OnStop evento é executado para dar a você a chance de desligar a instância normalmente.

A atualização do sistema operacional host pode levar vários dias para que o tecido coordene as atualizações em todos os diferentes serviços hospedados e atualize domínios dentro de um datacenter. Normalmente, diferentes instâncias de sua implantação são atualizadas com várias horas de intervalo.

Para obter mais informações sobre o processo de atualização do sistema operacional host, confira as atualizações do host do Azure: Por que, quando e como artigo do blog do Azure.

Passe 2: sistema operacional convidado

Depois que o sistema operacional host terminar de atualizar no datacenter, o sistema operacional convidado será atualizado para serviços configurados para usar versões automáticas do sistema operacional convidado. Essa atualização continua usando regras de domínio de atualização padrão para seu serviço. Sua VM é reiniciada e a partição do Windows (a unidade D) é reimageada usando o sistema operacional atualizado.

O processo de atualização do sistema operacional convidado é muito mais rápido do que a atualização do sistema operacional host. Isso ocorre porque o tecido precisa coordenar apenas a atualização dentro de seu serviço hospedado e seus domínios de atualização. A duração do processo de atualização do sistema operacional convidado para seu serviço depende em grande parte dos seguintes fatores:

  • O número de instâncias de função
  • O número de domínios de atualização
  • Quanto tempo seu serviço leva para desligar (Stopping e OnStop eventos)
  • Quanto tempo seu serviço leva para iniciar (tarefas de inicialização e o OnStart evento)

Agente convidado

O agente convidado do Azure é atualizado mensalmente. Quando o agente convidado é atualizado, as seguintes ações ocorrem:

  • O processo de host que executa sua função (normalmente WaWorkerHost ou WaWebHost) é normalmente encerrado.
  • O agente convidado se atualiza.
  • O processo de host começa novamente.

Para obter mais informações sobre o processo do agente convidado e como ele interage com seu serviço, confira Fluxo de trabalho da arquitetura clássica de VM do Windows Azure.

Impactos e requisitos de serviço

A lista a seguir descreve os impactos e os requisitos para seu serviço de nuvem:

  • Se qualquer uma de suas funções tiver apenas uma instância, seu serviço poderá ter tempo de inatividade. Você deve ter pelo menos duas instâncias de cada função porque o contrato de nível de serviço (SLA) requer um tempo de atividade de 99,95%.

  • Espere que suas instâncias de função reiniciem para a atualização do sistema operacional host aproximadamente uma vez por mês. Se você tiver atualizações automáticas do sistema operacional convidado, espere que suas instâncias sejam reiniciadas novamente. Normalmente, as reinicializações têm várias horas de diferença. No entanto, esse período pode ser alterado dependendo da composição dos diferentes serviços existentes em um datacenter.

  • Sua função precisa seguir as regras que regem as atualizações do sistema operacional host. Em particular, as instâncias de função devem atingir o Ready estado dentro de 30 minutos após iniciar as tarefas de inicialização. Para obter mais informações sobre essa limitação, consulte Como uma atualização prossegue.

  • A atualização do sistema operacional host causa uma reinicialização da instância de função e a atualização do sistema operacional convidado causa o equivalente a uma nova imagem de sua instância. Devido a esses eventos, suas instâncias de função devem ser capazes de lidar com os seguintes procedimentos:

    • Reiniciar
    • Recriar
    • Reciclar

Notificação

Atualmente, a plataforma do Azure não oferece notificações proativas quando uma atualização do sistema operacional está ocorrendo. Suas instâncias de função receberão um RoleEnvironment.Stopping evento antes de serem desligadas. Você pode usar esse evento para encerrar graciosamente qualquer trabalho que a instância de função esteja fazendo ou para notificar um administrador de que uma instância está sendo desligada.

Você pode assinar o sistema operacional do Azure Atualizações feed do RSS. Esse feed deve ser atualizado no mesmo dia em que as atualizações do sistema operacional começam a ser distribuídas para o datacenter. O feed normalmente não fornece notificação proativa avançada, mas ajuda você a identificar quando as atualizações estão ocorrendo. O processo de atualização pode levar vários dias para ser concluído. Portanto, talvez seja necessário aguardar um ou mais dias entre quando o feed do RSS for atualizado e o serviço hospedado começar a ser atualizado.

A lista de lançamentos do sistema operacional convidado do Azure e a lista de versões do sistema operacional disponíveis para seleção no portal do Azure são normalmente atualizadas após a conclusão da distribuição do sistema operacional convidado. Você não deve usar a entrada mais recente nessas listas como uma indicação de quando as atualizações do sistema operacional estão em andamento.

Detecção

Atualmente, não há nenhuma maneira direta de detectar uma atualização do sistema operacional host. No entanto, você pode ver a evidência da reinicialização nos logs na VM. Para fazer isso, siga um destes procedimentos:

  • No aplicativo Visualizador de Eventos, pesquise os logs de eventos do Sistema para obter a origem do evento USER32, ID do evento 1074. Este evento contém a seguinte mensagem:

    O processo D:\Packages\GuestAgent\WaAppAgent.exe (RD00155D50206D) iniciou o desligamento do computador RD00155D50206D em nome do usuário NT AUTHORITY\SYSTEM pelo seguinte motivo: desligamento da API herdada

    Esta mensagem indica que o agente convidado do Azure Fabric (WaAppAgent.exe) iniciou um desligamento da VM.

  • Em um editor de texto, pesquise um arquivo de log de runtime do agente de aplicativo antigo (AppAgentRuntime.log.old) para obter uma _Context_Start mensagem na qual o Context é igual a .StopContainer() Para obter mais informações sobre como examinar entradas de contexto no log de runtime do agente de aplicativo, confira Solução de problemas do cenário 6 – Reciclagem de função após a execução por algum tempo no arquivo de blog do Azure.

Problemas e soluções comuns

As seções a seguir discutem alguns problemas comuns que envolvem reinicializações de instância de função e como você pode resolve-los. Para obter mais informações sobre os processos que estão em execução e o local dos arquivos de log que você pode usar para solução de problemas, confira Fluxo de trabalho da arquitetura de VM clássica do Windows Azure.

Problema 1: tarefas de inicialização ou código falha ao executar a segunda vez após a reinicialização do sistema operacional host

Tarefas de inicialização ou o código na OnStart função ou Run podem falhar na segunda vez após a reinicialização do sistema operacional host. A reinicialização deve invocar suas tarefas de inicialização para serem executadas novamente. Essa falha impede que a instância de função atinja o Ready estado.

E se você estiver fazendo algo em uma tarefa de inicialização e executar um comando que retorna um erro após a execução da segunda vez? Nesse caso, sua tarefa de inicialização falhará e fará com que sua instância de função inicie a reciclagem. Por exemplo, se você usar o comando de configuração de conjunto APPCMD para adicionar uma seção de configuração no IIS (Serviços de Informações da Internet), o comando falhará em sua segunda execução. O comando gera a mensagem de erro: "Novo objeto adicionar atributos necessários ausentes. Não é possível adicionar a entrada de coleção duplicada do tipo..." Em seguida, a instância de função começa a ser reciclada.

Solução 1: conectar-se à VM e depurar a falha de inicialização ou código remotamente

Para solucionar esse tipo de falha, use o RDP (Protocolo de Área de Trabalho Remota) para se conectar à VM remotamente. Examine os logs de eventos em busca de erros e marcar no arquivo WaHostBootstrapper.log para falhas de tarefa de inicialização. Durante o processo típico de desenvolvimento e teste, você deve iniciar proativamente uma reinicialização de suas instâncias de função a partir do portal do Azure. Esta etapa ajuda você a testar seu serviço para garantir que ele funcione corretamente neste cenário.

Uma correção comum para falhas de tarefa de inicialização é adicionar um exit /b 0 comando ao final do script de tarefa de inicialização. Esse comando de saída termina o script usando um código de saída que indica êxito. Para obter mais informações sobre por que esse comando é necessário, consulte Como configurar e executar tarefas de inicialização para um Serviço de Nuvem do Azure (clássico).

Problema 2: a tarefa ou o código de inicialização não é executado depois que a partição do Windows é reimageada

A partição do Windows (unidade D) normalmente é onde as instalações do programa e as alterações de registro são armazenadas. Durante a parte do sistema operacional convidado de uma atualização, a partição do Windows é reimageada. Isso pode fazer com que essas instalações e alterações sejam perdidas. Se o código de inicialização assumir erroneamente que determinadas alterações de registro ainda existem depois que a partição do Windows for reimageada, a instância de função poderá não funcionar corretamente. Essa falha impede que a instância de função atinja o Ready estado.

Por exemplo, a tarefa de inicialização pode fazer uma alteração no registro. Em seguida, ele armazena um registro dessa alteração na unidade C ou E para garantir que a alteração do registro não seja executada uma segunda vez. No entanto, a alteração do registro na unidade D será perdida devido à reimaginação, e a tarefa de inicialização não restaurará essa alteração de registro porque a tarefa não acha necessário. A alteração de registro ausente pode eventualmente fazer com que o restante da tarefa de inicialização falhe.

Solução 2: testar a reimaginação de instâncias de função do portal do Azure

Durante o processo típico de desenvolvimento e teste, você deve iniciar proativamente uma nova imagem de suas instâncias de função a partir do portal do Azure. Esta etapa ajuda você a testar seu serviço e garantir que ele funcione corretamente neste cenário.

Problema 3: o código de inicialização leva mais de 30 minutos para ser concluído

Se o código de inicialização levar mais de 30 minutos para ser concluído, você poderá ter mais de uma instância de função que está fora de serviço ao mesmo tempo. Esse cenário geralmente ocorre quando uma tarefa de inicialização executa uma dessas ações:

  • Instala um programa ou recurso
  • Baixa dados de cache
  • Baixa informações do site

Solução 3: examinar os impactos e os requisitos do serviço

Examine a seção Impactos e requisitos do serviço para saber o que esperar e como você pode evitar ou mitigar quaisquer atrasos de inicialização.

Problema 4: o Azure não reinicia o sistema operacional convidado ou host após uma atualização

Em raras ocasiões, o Azure pode não reiniciar o host ou o sistema operacional convidado após uma atualização. Nesse cenário, você provavelmente verá uma mensagem "Aguardando host" no portal que não é alterada após 30 minutos ou mais.

Solução 4a: corrigir o código de inicialização

Se você conseguir usar o RDP (Protocolo de Área de Trabalho Remota) para se conectar à instância de função, pode haver uma falha no código de inicialização que você pode corrigir. Para obter mais informações sobre como corrigir o código de inicialização, consulte Solução 1: Conecte-se à VM e depure a inicialização ou falha de código remotamente.

Solução 4b: excluir a implantação

Se você não puder usar o RDP para se conectar à instância de função, provavelmente a única maneira de recuperar a instância é excluir a implantação.

Problema 5: uma ou mais instâncias de função não estão disponíveis durante a atualização do sistema operacional

Se as instâncias de função não estiverem disponíveis durante a atualização do sistema operacional, isso poderá causar uma redução na capacidade de serviço. Por exemplo, suponha que você tenha duas instâncias de uma função Web e ambas as instâncias normalmente sejam executadas com 75% de uso da CPU. Se uma instância for reiniciada durante a atualização, o tráfego será redirecionado para a instância restante. Essa instância não pode lidar com a carga extra. Isso causa uma redução na disponibilidade do serviço.

Solução 5: manter o excesso de capacidade suficiente em seu serviço

Certifique-se de que seu serviço tenha capacidade excessiva suficiente para absorver uma determinada porcentagem de instâncias de função que não estão disponíveis. Para calcular a quantidade de capacidade excedente que você precisa disponibilizar, divida o número um pelo número de domínios de atualização. Por exemplo, se você tiver dois domínios de atualização, precisará de 1/2 = 50% de capacidade excedente para lidar com um domínio de atualização ficando indisponível. Se você tiver cinco domínios de atualização, precisará de 1/5 = 20% de excesso de capacidade para lidar com a perda de disponibilidade em um dos cinco domínios de atualização.

Problema 6: os clientes experimentam interrupções ou tempo limite porque seu site leva muito tempo para aquecer

Seu site leva vários minutos para se aquecer? (Por exemplo, o aquecimento do site pode consistir em IIS padrão ou ASP.NET pré-configuração e carregamento de módulos, ou pode estar aquecendo um cache ou outras tarefas específicas do aplicativo.) Nesse caso, seus clientes podem sofrer uma interrupção ou um tempo limite aleatório.

Depois que uma instância de função é reiniciada e seu OnStart código conclui sua execução, sua instância de função é restaurada para a rotação do balanceador de carga. Em seguida, a instância de função começará a receber solicitações de entrada. Se seu site ainda estiver se aquecendo, todas essas solicitações futuras farão fila e tempo limite. Suponha que você tenha apenas duas instâncias de sua função Web. Nesse caso, a IN_0 instância receberá 100% das solicitações de entrada enquanto a IN_1 instância estiver sendo reiniciada para a atualização do sistema operacional convidado. No entanto, a IN_0 instância ainda está se aquecendo. Esse cenário pode causar uma interrupção completa do serviço até que seu site seja concluído aquecendo em ambas as instâncias.

Solução 6: impedir que uma instância de função receba solicitações de entrada até que o aquecimento seja concluído

Recomendamos que você mantenha o OnStart código de tratamento de eventos para sua instância de função de término até que o site conclua seu aquecimento. Para implementar esse processo de evento, você pode usar o seguinte código de exemplo:

public class WebRole : RoleEntryPoint {
    public override bool OnStart () {
        // For information about handling configuration changes, see the article
        // "Customize the Lifecycle of a Web or Worker role in .NET" at
        // https://zcusa.951200.xyz/azure/cloud-services/cloud-services-role-lifecycle-dotnet.
        IPHostEntry ipEntry = Dns.GetHostEntry (Dns.GetHostName ());
        string ip = null;
        foreach (IPAddress ipaddress in ipEntry.AddressList) {
            if (ipaddress.AddressFamily.ToString () == "InterNetwork") {
                ip = ipaddress.ToString ();
            }
        }
        string urlToPing = "https://" + ip;
        HttpWebRequest req = HttpWebRequest.Create (urlToPing) as HttpWebRequest;
        WebResponse resp = req.GetResponse ();
        return base.OnStart ();
    }
}

Mais informações

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.