Rolinstantie wordt opnieuw opgestart vanwege upgrades van het Azure VM-besturingssysteem
In dit artikel worden de effecten besproken van upgrades van het besturingssysteem (Virtual Machine) van Microsoft Azure (VM) bij het opnieuw opstarten van rolinstanties. Het bevat details over upgradeschema's voor het besturingssysteem en gastagent, service-effecten en vereisten, meldingen, detectie en het oplossen van veelvoorkomende problemen.
Upgradeschema's
Op ongeveer maandelijkse basis brengt Microsoft een nieuwe versie van het gastbesturingssystemen uit voor PaaS-VM's (Platform as a Service). De exacte planning varieert en de historische trend is te zien in de releases van het Azure-gastbesturingssystemen en de SDK-compatibiliteitsmatrix. Tijdens deze implementatie voert de Azure Fabric Controller twee passes uit (een host os pass en een gast os pass) door alle datacenters. Een periodieke update van de Azure-gastagent wordt ook uitgevoerd binnen uw VIRTUELE machine.
In de volgende secties vindt u meer informatie over de twee upgradepassen en de upgrade van de gastagent.
Doorgeven 1: Host-besturingssysteem
Met de eerste pas wordt het host-besturingssysteem bijgewerkt. Het host-besturingssysteem start rolinstanties opnieuw op en de infrastructuurcontroller zorgt ervoor dat alleen exemplaren van één upgradedomein tegelijk opnieuw worden opgestart. Tijdens deze herstart doorlopen uw rolinstanties het standaardproces voor afsluiten. Vervolgens wordt de RoleEnvironment.OnStop
gebeurtenis uitgevoerd om u een kans te geven om het exemplaar correct af te sluiten.
Het kan enkele dagen duren voordat de infrastructuur de upgrades voor alle verschillende gehoste services en upgradedomeinen binnen een datacenter coördineert. Normaal gesproken worden verschillende exemplaren van uw implementatie enkele uren na elkaar bijgewerkt.
Zie de Azure-hostupdates voor meer informatie over het upgradeproces van het hostbesturingssystemen: Waarom, wanneer en hoe Azure-blogartikel.
Pass 2: Gastbesturingssystemen
Nadat het host-besturingssysteem is bijgewerkt in het datacenter, wordt het gastbesturingssystemen bijgewerkt voor services die zijn geconfigureerd voor het gebruik van automatische gastbesturingssystemen. Deze upgrade wordt voortgezet met behulp van standaard-upgradedomeinregels voor uw service. Uw virtuele machine wordt opnieuw opgestart en de Windows-partitie (het D-station) wordt opnieuw geinstallatiekopied met behulp van het bijgewerkte besturingssysteem.
Het updateproces voor gastbesturingssystemen is veel sneller dan de update van het host-besturingssysteem. Dit komt doordat de infrastructuur alleen de update binnen uw gehoste service en uw upgradedomeinen moet coördineren. De duur van het updateproces voor gastbesturingssystemen voor uw service is grotendeels afhankelijk van de volgende factoren:
- Het aantal rolinstanties
- Het aantal upgradedomeinen
- Hoeveel tijd uw service kost om af te sluiten (
Stopping
enOnStop
gebeurtenissen) - Hoeveel tijd uw service nodig heeft om te starten (opstarttaken en de
OnStart
gebeurtenis)
Gastagent
De Azure-gastagent wordt maandelijks bijgewerkt. Wanneer de gastagent wordt bijgewerkt, worden de volgende acties uitgevoerd:
- Het hostproces waarmee uw rol wordt uitgevoerd (meestal WaWorkerHost of WaWebHost) wordt correct afgesloten.
- De gastagent werkt zichzelf bij.
- Het hostproces wordt opnieuw gestart.
Zie De werkstroom van de klassieke VM-architectuur van Windows Azure voor meer informatie over het proces van de gastagent en hoe deze communiceert met uw service.
Gevolgen en vereisten van de service
In de volgende lijst worden de gevolgen voor en vereisten voor uw cloudservice beschreven:
Als een van uw rollen slechts één exemplaar heeft, kan uw service downtime ondervinden. U moet ten minste twee exemplaren van elke rol hebben, omdat de SLA (Service Level Agreement) een uptime van 99,95 procent vereist.
Verwacht dat uw rolinstanties ongeveer één keer per maand opnieuw worden opgestart voor het hostbesturingssystemen. Als u automatische updates voor het gastbesturingssystemen hebt, verwacht u dat uw exemplaren opnieuw worden opgestart. Normaal gesproken liggen de herstarts enkele uren uit elkaar. Dit tijdsbestek kan echter veranderen, afhankelijk van de make-up van de verschillende services die aanwezig zijn in een datacenter.
Uw rol moet voldoen aan de regels die updates van hostbesturingssystemen regelen. Met name rolinstanties moeten binnen 30 minuten na het starten van de opstarttaken de
Ready
status bereiken. Zie Hoe een upgrade verloopt voor meer informatie over deze beperking.De upgrade van het host-besturingssysteem veroorzaakt een herstart van uw rolinstantie en de upgrade van het gastbesturingssystemen veroorzaakt het equivalent van een installatiekopie van uw exemplaar. Vanwege deze gebeurtenissen moeten uw rolinstanties de volgende procedures kunnen afhandelen:
- Opnieuw starten
- Installatiekopie terugzetten
- Recycleren
Melding
Op dit moment biedt het Azure-platform geen proactieve meldingen wanneer er een upgrade van het besturingssysteem plaatsvindt. Uw rolinstanties ontvangen een RoleEnvironment.Stopping
gebeurtenis voordat ze worden afgesloten. U kunt deze gebeurtenis gebruiken om alle werkzaamheden die door het rolexemplaren worden uitgevoerd, op de juiste manier te beëindigen of om een beheerder te informeren dat een exemplaar wordt afgesloten.
U kunt zich abonneren op de RSS-feed van Azure OS Updates. Deze feed moet worden bijgewerkt op dezelfde dag dat de updates van het besturingssysteem worden geïmplementeerd in het datacenter. De feed geeft doorgaans geen geavanceerde proactieve melding, maar helpt u te identificeren wanneer de updates plaatsvinden. Het updateproces kan enkele dagen duren. Daarom moet u mogelijk een of meer dagen wachten tussen het moment waarop de RSS-feed wordt bijgewerkt en de gehoste service wordt bijgewerkt.
De releaselijst van azure-gastbesturingssystemen en de lijst met besturingssysteemversies die beschikbaar zijn voor selectie in Azure Portal, worden meestal bijgewerkt nadat de implementatie van het gastbesturingssystemen is voltooid. Gebruik de meest recente vermelding in deze lijsten niet als indicatie wanneer de updates van het besturingssysteem worden uitgevoerd.
Detection
Er is momenteel geen directe manier om een upgrade van het host-besturingssysteem te detecteren. U kunt echter het bewijs zien van het opnieuw opstarten in de logboeken op de VIRTUELE machine. Voer hiertoe een van de volgende handelingen uit:
Zoek in de Logboeken-app in de gebeurtenislogboeken van het systeem naar gebeurtenisbron USER32, gebeurtenis-id 1074. Deze gebeurtenis bevat het volgende bericht:
Het proces D:\Packages\GuestAgent\WaAppAgent.exe (RD00155D50206D ) heeft het afsluiten van de computer gestart RD00155D50206D namens gebruiker NT AUTHORITY\SYSTEM om de volgende reden: Verouderde API afsluiten
Dit bericht geeft aan dat de Gastagent van De Azure-infrastructuur (WaAppAgent.exe) een afsluiting van de VIRTUELE machine heeft gestart.
Zoek in een teksteditor in een oud runtimelogboekbestand van de app-agent (AppAgentRuntime.log.old) naar een
_Context_Start
bericht waarin hetContext
bestand gelijk is aanStopContainer()
. Zie Scenario 6 voor het oplossen van problemen met rolrecycling na enige tijd in het Azure-blogarchief voor meer informatie over het onderzoeken van contextvermeldingen in het runtimelogboek van de app-agent.
Bekende problemen en oplossingen
In de volgende secties worden enkele veelvoorkomende problemen besproken die betrekking hebben op het opnieuw opstarten van het rolexemplaren en hoe u deze kunt oplossen. Zie De werkstroom van de klassieke VM-architectuur van Windows Azure voor meer informatie over de processen die worden uitgevoerd en de locatie van logboekbestanden die u kunt gebruiken voor probleemoplossing.
Probleem 1: opstarttaken of code kan de tweede keer niet worden uitgevoerd nadat het besturingssysteem opnieuw is opgestart
Opstarttaken of de code in de OnStart
of Run
functie kunnen de tweede keer mislukken nadat het besturingssysteem opnieuw is opgestart. De herstart moet uw opstarttaken aanroepen om opnieuw te worden uitgevoerd. Deze fout voorkomt dat het rolexemplaren de Ready
status bereiken.
Wat gebeurt er als u iets in een opstarttaak uitvoert en vervolgens een opdracht uitvoert die een fout retourneert nadat deze de tweede keer is uitgevoerd? In dit geval mislukt uw opstarttaak en wordt uw rolinstantie gestart met recyclen. Als u bijvoorbeeld de configuratieopdracht APPCMD set gebruikt om een configuratiesectie toe te voegen in Internet Information Services (IIS), mislukt de opdracht tijdens de tweede uitvoering. Met de opdracht wordt het foutbericht 'Nieuw add-object ontbrekende vereiste kenmerken gegenereerd. Kan geen dubbele verzamelingsvermelding van het type toevoegen... Vervolgens begint de rolinstantie te recyclen.
Oplossing 1: Maak verbinding met de VM en foutopsporing bij het opstarten of codefout op afstand
Als u dit soort fouten wilt oplossen, gebruikt u Remote Desktop Protocol (RDP) om extern verbinding te maken met de virtuele machine. Bekijk de gebeurtenislogboeken op fouten en controleer het WaHostBootstrapper.log bestand op opstarttaakfouten. Tijdens uw typische ontwikkelings- en testproces moet u proactief een herstart van uw rolinstanties starten vanuit Azure Portal. Met deze stap kunt u uw service testen om ervoor te zorgen dat deze correct werkt in dit scenario.
Een veelvoorkomende oplossing voor opstarttaakfouten is het toevoegen van een exit /b 0
opdracht aan het einde van het opstarttaakscript. Met deze afsluitopdracht wordt het script beëindigd met behulp van een afsluitcode die aangeeft dat het is gelukt. Zie Opstarttaken configureren en uitvoeren voor een Azure Cloud Service (klassiek) voor meer informatie over waarom deze opdracht nodig is.
Probleem 2: opstarttaak of code wordt niet uitgevoerd nadat de Windows-partitie opnieuw is hersteld
De Windows-partitie (D-station) is meestal waar programma-installaties en registerwijzigingen worden opgeslagen. Tijdens het gedeelte van het gastbesturingssystem van een update wordt de Windows-partitie opnieuw geinstallatiekopied. Dit kan ertoe leiden dat deze installaties en wijzigingen verloren gaan. Als de opstartcode per ongeluk ervan uitgaat dat bepaalde registerwijzigingen nog steeds bestaan nadat de Windows-partitie opnieuw is ingesteld, werkt het rolexemplaren mogelijk niet correct. Deze fout voorkomt dat het rolexemplaren de Ready
status bereiken.
De opstarttaak kan bijvoorbeeld een registerwijziging aanbrengen. Vervolgens wordt een record van die wijziging opgeslagen op het C- of E-station om ervoor te zorgen dat de registerwijziging niet een tweede keer wordt uitgevoerd. De registerwijziging op het D-station gaat echter verloren vanwege het opnieuw voltooien en de opstarttaak herstelt die registerwijziging niet omdat de taak niet denkt dat het nodig is. De ontbrekende registerwijziging kan er uiteindelijk toe leiden dat de rest van de opstarttaak mislukt.
Oplossing 2: Het opnieuw voltooien van rolinstanties testen vanuit Azure Portal
Tijdens uw typische ontwikkelings- en testproces moet u proactief een nieuwe installatiekopie van uw rolinstanties starten vanuit Azure Portal. Met deze stap kunt u uw service testen en ervoor zorgen dat deze correct werkt in dit scenario.
Probleem 3: het duurt meer dan 30 minuten om de opstartcode te voltooien
Als het langer dan 30 minuten duurt voordat uw opstartcode is voltooid, hebt u mogelijk meer dan één rolinstantie die niet beschikbaar is op hetzelfde moment. Dit scenario treedt meestal op wanneer een opstarttaak een van deze acties uitvoert:
- Een programma of functie installeren
- Cachegegevens downloaden
- Websitegegevens downloaden
Oplossing 3: De gevolgen en vereisten van de service controleren
Bekijk de sectie Service-effecten en vereisten om te weten wat u kunt verwachten en hoe u opstartvertragingen kunt voorkomen of beperken.
Probleem 4: Azure start de host of het gastbesturingssystemen niet opnieuw op na een update
In zeldzame gevallen start Azure de host of het gastbesturingssystemen mogelijk niet opnieuw op na een update. In dit scenario ziet u waarschijnlijk een bericht 'Wachten op host' in de portal die na 30 minuten of langer niet wordt gewijzigd.
Oplossing 4a: De opstartcode herstellen
Als u het Remote Desktop Protocol (RDP) kunt gebruiken om verbinding te maken met het rolexemplaren, kan er een fout optreden in de opstartcode die u kunt oplossen. Zie oplossing 1 voor meer informatie over het oplossen van de opstartcode: Verbinding maken met de VIRTUELE machine en foutopsporing voor het opstarten of codefout op afstand opsporen.
Oplossing 4b: de implementatie verwijderen
Als u RDP niet kunt gebruiken om verbinding te maken met het rolexemplaren, is waarschijnlijk de enige manier om het exemplaar te herstellen door de implementatie te verwijderen.
Probleem 5: een of meer rolinstanties zijn niet beschikbaar tijdens de upgrade van het besturingssysteem
Als er rolinstanties niet beschikbaar zijn tijdens de upgrade van het besturingssysteem, kan dit leiden tot een vermindering van de servicecapaciteit. Stel dat u twee exemplaren van een webrol hebt en dat beide exemplaren doorgaans worden uitgevoerd met een CPU-gebruik van 75 procent. Als één exemplaar opnieuw wordt opgestart tijdens de upgrade, wordt verkeer omgeleid naar het resterende exemplaar. Deze instantie kan de extra belasting niet verwerken. Dit veroorzaakt een vermindering van de beschikbaarheid van de service.
Oplossing 5: Voldoende overtollige capaciteit in uw service behouden
Zorg ervoor dat uw service voldoende overtollige capaciteit heeft om een bepaald percentage rolinstanties te absorberen dat niet beschikbaar is. Als u de hoeveelheid overtollige capaciteit wilt berekenen die u beschikbaar moet maken, deelt u het getal één door het aantal upgradedomeinen. Als u bijvoorbeeld twee upgradedomeinen hebt, hebt u 1/2 = 50 procent overtollige capaciteit nodig om een upgradedomein te verwerken dat niet beschikbaar is. Als u vijf upgradedomeinen hebt, hebt u 1/5 = 20 procent overtollige capaciteit nodig om het verlies van beschikbaarheid in een van de vijf upgradedomeinen af te handelen.
Probleem 6: Clients ondervinden storingen of time-outs omdat het te lang duurt om uw website op te warmen
Duurt het enkele minuten voordat uw website is opgewarmd? (Het opwarmen van websites kan bijvoorbeeld bestaan uit standaard IIS of ASP.NET voorcompilatie en het laden van modules, of het kan een cache of andere app-specifieke taken opwarmen.) In dit geval kunnen uw klanten te maken hebben met een storing of willekeurige time-outs.
Nadat een rolinstantie opnieuw is opgestart en de uitvoering van de OnStart
code is voltooid, wordt uw rolinstantie teruggezet naar de load balancer-rotatie. Het rolexemplaren ontvangen vervolgens binnenkomende aanvragen. Als uw website nog steeds opwarmt, worden al die binnenkomende aanvragen in de wachtrij geplaatst en treedt er een time-out op. Stel dat u slechts twee exemplaren van uw webrol hebt. In dit geval ontvangt het IN_0
exemplaar 100 procent van de binnenkomende aanvragen terwijl het IN_1
exemplaar opnieuw wordt opgestart voor de update van het gastbesturingssysteem. Het IN_0
exemplaar wordt echter nog steeds opgewarmd. Dit scenario kan leiden tot een volledige storing van uw service totdat uw website klaar is met opwarmen op beide exemplaren.
Oplossing 6: Voorkomen dat een rolinstantie binnenkomende aanvragen ontvangt totdat het opwarmen is voltooid
Het is raadzaam dat u de code voor het OnStart
afhandelen van gebeurtenissen voor uw rolinstantie niet afwerkt totdat de website de opwarming heeft voltooid. Als u dit gebeurtenisproces wilt implementeren, kunt u de volgende voorbeeldcode gebruiken:
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://learn.microsoft.com/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 ();
}
}
Meer informatie
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.