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 | |
| 2019-08-01 | Allmän tillgänglighet | Alla | |
| 2019-04-01 | Allmän tillgänglighet | Alla | |
| 2019-01-01 | Allmän tillgänglighet | Alla | |
| 2017-11-01 | Allmän tillgänglighet | Alla | |
| 2017-08-01 | Allmän tillgänglighet | Alla | |
| 2017-03-01 | Förhandsgranskning | Alla |
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:
|
| Eventtype | Det påverkar den här händelsen. Värden:
|
| ResourceType | Typ av resurs som den här händelsen påverkar. Värden:
|
| 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:
|
| EventStatus | Status för den här händelsen. Värden:
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:
|
| Description | Beskrivning av den här händelsen. Exempel:
|
| EventSource | Initierare av händelsen. Exempel:
|
| DurationInSeconds | Den förväntade varaktigheten för avbrottet som orsakas av händelsen. Exempel:
|
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
- Titta Schemalagda händelser på Azure Friday för att se en demonstration.
- Granska kodexempel Schemalagda händelser Azure Instance Metadata på lagringsplatsen Schemalagda händelser GitHub Azure Instance Metadata.
- Läs mer om de API:er som är tillgängliga i Instance Metadata Service.
- Lär dig mer om planerat underhåll för virtuella Linux-datorer i Azure.