Azure Metadata Service: Schemalagda händelser för virtuella Linux-datorer

Gäller för: ✔️ Virtuella Linux-datorer:heavy_check_mark: Flexibla skalningsuppsättningar:heavy_check_mark: Enhetliga skalningsuppsättningar

Schemalagda händelser är en Azure Metadata Service som ger ditt program tid att förbereda för underhåll av virtuella datorer. Den innehåller information om kommande underhållshändelser (till exempel omstart) så att ditt program kan förbereda sig för dem och begränsa avbrott. Den är tillgänglig för alla Typer av Azure-Virtual Machines, inklusive PaaS och IaaS på både Windows och Linux.

Information om hur Schemalagda händelser på Windows finns i Schemalagda händelser för Windows virtuella datorer.

Anteckning

Schemalagda händelser är allmänt tillgänglig i alla Azure-regioner. Se Versions- och regionstillgänglighet för den senaste versionsinformationen.

Varför använda Schemalagda händelser?

Många program kan dra nytta av det då och då för att förbereda för underhåll av virtuella datorer. Tiden kan användas för att utföra programspecifika uppgifter som förbättrar tillgänglighet, tillförlitlighet och service, inklusive:

  • Kontrollpunkt och återställning.
  • Anslutningstömning.
  • Redundans för primär replik.
  • Borttagning från en lastbalanseringspool.
  • Händelseloggning.
  • En bra avstängning.

Med Schemalagda händelser kan programmet identifiera när underhåll sker och utlösa aktiviteter för att begränsa dess påverkan.

Schemalagda händelser händelser i följande användningsfall:

  • Plattformsinitierad underhåll (till exempel omstart av virtuell dator, direktmigrering eller minnesbevarande uppdateringar för värden)
  • Den virtuella datorn körs på degraderad värdmaskinvara som förväntas misslyckas snart
  • Användarinitierat underhåll (till exempel om en användare startar om eller omdistribuerar en virtuell dator)
  • Avlägsning av vm-instanser för VM med vm för VM för VM med vm för VM med spotskalning.

Grunderna

Metadata Service tillgänglig information om att köra virtuella datorer med hjälp av en REST-slutpunkt som är tillgänglig från den virtuella datorn. Informationen är tillgänglig via en ip-adress som inte kan konfigureras så att den inte exponeras utanför den virtuella datorn.

Omfång

Schemalagda händelser levereras till:

  • Fristående Virtual Machines.
  • Alla virtuella datorer i en molntjänst.
  • Alla virtuella datorer i en tillgänglighetsuppsättning.
  • Alla virtuella datorer i en tillgänglighetszon.
  • Alla virtuella datorer i en skalningsuppsättningsplaceringsgrupp.

Anteckning

De schemalagda händelserna är specifika för virtuella datorer i en tillgänglighetszon och går till enskilda virtuella datorer i en zon. Om du till exempel har 100 virtuella datorer i en tillgänglighetsuppsättning och det finns en uppdatering av en av dem, kommer den schemalagda händelsen att gå till alla 100, medan om det finns 100 enskilda virtuella datorer i en zon så går händelsen bara till den virtuella dator som påverkas.

Därför kontrollerar du fältet i Resources händelsen för att identifiera vilka virtuella datorer som påverkas.

Slutpunktsidentifiering

För VNET-aktiverade virtuella datorer Metadata Service tillgänglig från en statisk icke-routerbar IP-adress, 169.254.169.254 . Den fullständiga slutpunkten för den senaste versionen Schemalagda händelser är:

http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01

Om den virtuella datorn inte skapas i en Virtual Network, standardfallen för molntjänster och klassiska virtuella datorer, krävs ytterligare logik för att identifiera ip-adressen som ska användas. Information om hur du identifierar värdslutpunkten finnsi det här exemplet.

Tillgänglighet för version och region

Tjänsten Schemalagda händelser version. Versioner är obligatoriska. den aktuella versionen är 2020-07-01 .

Version Versionstyp Regioner Viktig information
2020-07-01 Allmän tillgänglighet Alla
  • Stöd för händelsevaraktighet har lagts till
  • 2019-08-01 Allmän tillgänglighet Alla
  • Stöd för händelsekälla har lagts till
  • 2019-04-01 Allmän tillgänglighet Alla
  • Stöd för händelsebeskrivning har lagts till
  • 2019-01-01 Allmän tillgänglighet Alla
  • Stöd för VM-skalningsuppsättningar för EventType "Terminate" har lagts till
  • 2017-11-01 Allmän tillgänglighet Alla
  • Stöd har lagts till för Avlägsning av virtuell dator för VM med spot-avlägsning Av EventType "Preempt"
  • 2017-08-01 Allmän tillgänglighet Alla
  • Tog bort det förberedda understrecket från resursnamnen för virtuella IaaS-datorer
  • Krav för metadatahuvud som tillämpas för alla begäranden
  • 2017-03-01 Förhandsgranskning Alla
  • Första utgåvan
  • Anteckning

    Tidigare förhandsversioner av Schemalagda händelser {latest} som API-version. Det här formatet stöds inte längre och kommer att bli inaktuellt i framtiden.

    Aktivera och inaktivera schemalagda händelser

    Schemalagda händelser aktiveras för din tjänst första gången du gör en begäran om händelser. Du bör förvänta dig ett fördröjd svar i ditt första anrop på upp till två minuter.

    Schemalagda händelser inaktiveras för din tjänst om den inte gör en begäran på 24 timmar.

    Användarinitierad underhåll

    Användarinitierat vm-underhåll via Azure Portal, API, CLI eller PowerShell resulterar i en schemalagd händelse. Sedan kan du testa logiken för underhållsförberedelse i programmet och programmet kan förberedas för användarinitierad underhåll.

    Om du startar om en virtuell dator schemaläggs en händelse Reboot med typen . Om du distribuerar om en virtuell dator schemaläggs en händelse Redeploy med typen .

    Använda API:et

    Sidhuvuden

    När du Metadata Service måste du ange -huvudet för att säkerställa att begäran Metadata:true inte oavsiktligt omdirigerades. -huvudet Metadata:true krävs för alla begäranden om schemalagda händelser. Om huvudet inte inkluderas i begäran resulterar det i ett "Felaktig begäran"-svar från Metadata Service.

    Fråga efter händelser

    Du kan fråga efter schemalagda händelser genom att göra följande anrop:

    Bash

    curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Ett svar innehåller en matris med schemalagda händelser. En tom matris innebär att inga händelser schemaläggs för närvarande. Om det finns schemalagda händelser innehåller svaret en matris med händelser.

    {
        "DocumentIncarnation": {IncarnationID},
        "Events": [
            {
                "EventId": {eventID},
                "EventType": "Reboot" | "Redeploy" | "Freeze" | "Preempt" | "Terminate",
                "ResourceType": "VirtualMachine",
                "Resources": [{resourceName}],
                "EventStatus": "Scheduled" | "Started",
                "NotBefore": {timeInUTC},       
                "Description": {eventDescription},
                "EventSource" : "Platform" | "User",
                "DurationInSeconds" : {timeInSeconds},
            }
        ]
    }
    

    Händelseegenskaper

    Egenskap Beskrivning
    EventId Globalt unik identifierare för den här händelsen.

    Exempel:
    • 602d9444-d2cd-49c7-8624-8643e7171297
    Eventtype Det påverkar den här händelsen.

    Värden:
    • Freeze: Den virtuella datorn är schemalagd att pausa i några sekunder. CPU- och nätverksanslutningen kan pausas, men det påverkar inte minnet eller öppna filer.
    • Reboot: Den virtuella datorn är schemalagd för omstart (icke-beständigt minne går förlorat).
    • Redeploy: Den virtuella datorn är schemalagd att flyttas till en annan nod (tillfälliga diskar går förlorade).
    • Preempt: Den virtuella spotdatorn tas bort (tillfälliga diskar går förlorade).
    • Terminate: Den virtuella datorn är schemalagd att tas bort.
    ResourceType Typ av resurs som den här händelsen påverkar.

    Värden:
    • VirtualMachine
    Resurser Lista över resurser som den här händelsen påverkar. Listan innehåller garanterat datorer från högst en uppdateringsdomän,men den innehåller kanske inte alla datorer i UD.

    Exempel:
    • ["FrontEnd_IN_0", "BackEnd_IN_0"]
    EventStatus Status för den här händelsen.

    Värden:
    • Scheduled: Den här händelsen är schemalagd att starta efter den tid som anges i NotBefore egenskapen .
    • Started: Den här händelsen har startat.
    Ingen Completed eller liknande status har någonsin angetts. Händelsen returneras inte längre när händelsen är klar.
    NotBefore Tid efter vilken den här händelsen kan starta.

    Exempel:
    • Mån, 19 sep 2016 18:29:47 GMT
    Description Beskrivning av den här händelsen.

    Exempel:
    • Värdservern genomgår underhåll.
    EventSource Initierare av händelsen.

    Exempel:
    • Platform: Den här händelsen initieras av plattformen.
    • User: Den här händelsen initieras av användaren.
    DurationInSeconds Den förväntade varaktigheten för avbrottet som orsakas av händelsen.

    Exempel:
    • 9: Avbrottet som orsakas av händelsen varar i 9 sekunder.
    • -1: Standardvärdet som används om påverkansvaraktigheten är okänd eller inte tillämplig.

    Schemaläggning av händelser

    Varje händelse schemaläggs en minsta tid i framtiden baserat på händelsetypen. Den här gången återspeglas i en NotBefore händelseegenskap.

    Eventtype Minsta meddelande
    Frysa 15 minuter
    Starta om 15 minuter
    Omdistribuera 10 minuter
    Föregripa 30 sekunder
    Terminate Användaren kan konfigureras:5 till 15 minuter

    Anteckning

    I vissa fall kan Azure förutsäga värdfel på grund av försämrad maskinvara och försöker minimera avbrott i tjänsten genom att schemalägga en migrering. Berörda virtuella datorer får en schemalagd händelse med NotBefore en som vanligtvis är några dagar i framtiden. Den faktiska tiden varierar beroende på riskbedömningen för det förutsagda felet. Azure försöker lämna 7 dagar i förväg när det är möjligt, men den faktiska tiden varierar och kan vara mindre om förutsägelsen är att det finns en hög risk för att maskinvaran inte fungerar som den ska. För att minimera risken för din tjänst om maskinvaran slutar fungera innan den systeminitierade migreringen rekommenderar vi att du själv distribuerar om den virtuella datorn så snart som möjligt.

    Avsökningsfrekvens

    Du kan avssöka slutpunkten efter uppdateringar så ofta eller sällan som du vill. Men ju längre tiden mellan begärandena är, desto längre tid förlorar du eventuellt för att reagera på en kommande händelse. De flesta händelser har 5 till 15 minuters förvarning, även om det i vissa fall kan vara så lite som 30 sekunder. För att säkerställa att du har så mycket tid som möjligt att vidta åtgärder rekommenderar vi att du avsöker tjänsten en gång per sekund.

    Starta en händelse

    När du har lärt dig om en kommande händelse och har avslutat logiken för en bra avstängning kan du godkänna den utestående händelsen genom att göra ett anrop POST till Metadata Service med EventId . Det här anropet anger till Azure att det kan förkorta den minsta meddelandetiden (när det är möjligt).

    Följande JSON-exempel förväntas i POST begärandetexten. Begäran ska innehålla en lista med StartRequests . Varje StartRequest innehåller för den händelse som du vill EventId påskynda:

    {
        "StartRequests" : [
            {
                "EventId": {EventId}
            }
        ]
    }
    

    Bash-exempel

    curl -H Metadata:true -X POST -d '{"StartRequests": [{"EventId": "f020ba2e-3bc0-4c40-a10b-86575a9eabd5"}]}' http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01
    

    Anteckning

    Genom att bekräfta en händelse kan händelsen fortsätta för alla Resources händelser, inte bara den virtuella dator som bekräftar händelsen. Därför kan du välja att välja en ledare för att samordna bekräftelsen, vilket kan vara lika enkelt som den första datorn i Resources fältet.

    Python-exempel

    Följande exempel frågar efter Metadata Service schemalagda händelser och godkänner varje utestående händelse:

    #!/usr/bin/python
    
    import json
    import socket
    import urllib2
    
    metadata_url = "http://169.254.169.254/metadata/scheduledevents?api-version=2020-07-01"
    this_host = socket.gethostname()
    
    
    def get_scheduled_events():
        req = urllib2.Request(metadata_url)
        req.add_header('Metadata', 'true')
        resp = urllib2.urlopen(req)
        data = json.loads(resp.read())
        return data
    
    
    def handle_scheduled_events(data):
        for evt in data['Events']:
            eventid = evt['EventId']
            status = evt['EventStatus']
            resources = evt['Resources']
            eventtype = evt['EventType']
            resourcetype = evt['ResourceType']
            notbefore = evt['NotBefore'].replace(" ", "_")
        description = evt['Description']
        eventSource = evt['EventSource']
            if this_host in resources:
                print("+ Scheduled Event. This host " + this_host +
                    " is scheduled for " + eventtype + 
            " by " + eventSource + 
            " with description " + description +
            " not before " + notbefore)
                # Add logic for handling events here
    
    
    def main():
        data = get_scheduled_events()
        handle_scheduled_events(data)
    
    
    if __name__ == '__main__':
        main()
    

    Nästa steg