Share via


Betrouwbaarheid in virtuele machines

Dit artikel bevat specifieke aanbevelingen voor betrouwbaarheid voor virtuele machines, evenals gedetailleerde informatie over regionale tolerantie van vm's met beschikbaarheidszones en herstel na noodgevallen in meerdere regio's en bedrijfscontinuïteit.

Zie Azure-betrouwbaarheid voor een architectuuroverzicht van betrouwbaarheid in Azure.

Aanbevelingen voor betrouwbaarheid

Deze sectie bevat aanbevelingen voor het bereiken van tolerantie en beschikbaarheid. Elke aanbeveling valt in een van de volgende twee categorieën:

  • Statusitems hebben betrekking op gebieden zoals configuratie-items en de juiste functie van de belangrijkste onderdelen waaruit uw Azure-workload bestaat, zoals azure-resourceconfiguratie-instellingen, afhankelijkheden van andere services, enzovoort.

  • Risico-items hebben betrekking op gebieden zoals beschikbaarheids- en herstelvereisten, testen, bewaken, implementeren en andere items die, indien onopgeloste, de kans op problemen in de omgeving vergroten.

Prioriteitsmatrix voor aanbevelingen voor betrouwbaarheid

Elke aanbeveling wordt gemarkeerd in overeenstemming met de volgende prioriteitsmatrix:

Afbeelding Prioriteit Beschrijving
Hoog Onmiddellijke oplossing nodig.
Gemiddeld Herstel binnen 3-6 maanden.
Beperkt Moet worden gecontroleerd.

Samenvatting van aanbevelingen voor betrouwbaarheid

Categorie Prioriteit Aanbeveling
Hoge beschikbaarheid Productieworkloads uitvoeren op twee of meer VM's met azure Virtual Machine Scale Sets Flex
VM's implementeren in beschikbaarheidszones of Virtual Machine Scale Sets Flex gebruiken met zones
VM's migreren met behulp van beschikbaarheidssets naar Virtual Machine Scale Sets Flex
Beheerde schijven gebruiken voor VM-schijven
Herstel na noodgevallen VM's repliceren met Behulp van Azure Site Recovery
Een back-up maken van gegevens op uw VM's met de Azure Backup-service
Prestaties Toepassings- en databasegegevens hosten op een gegevensschijf
Productie-VM's moeten SSD-schijven gebruiken
Versneld netwerken inschakelen (AccelNet)
Wanneer AccelNet is ingeschakeld, moet u het NIC-station guestOS handmatig bijwerken
Beheer VM-9: Controleren op VM's met de status Gestopt
Onderhoudsconfiguraties gebruiken voor de VM
Beveiliging VVM's mogen niet rechtstreeks aan een openbaar IP-adres zijn gekoppeld
Aan virtuele netwerkinterfaces is een NSG gekoppeld
Doorsturen via IP mag alleen zijn ingeschakeld voor virtuele netwerkapparaten
Netwerktoegang tot de VM-schijf moet zijn ingesteld op 'Openbare toegang uitschakelen en privétoegang inschakelen'
Schijfversleuteling en data-at-rest-versleuteling standaard inschakelen
Netwerken DNS-servers van de klant moeten worden geconfigureerd op het niveau van het virtuele netwerk
Storage Gedeelde schijven mogen alleen worden ingeschakeld op geclusterde servers
Naleving Zorg ervoor dat uw VM's compatibel zijn met Azure-beleid
Bewaking VM-inzichten inschakelen
Diagnostische instellingen configureren voor alle Azure-resources

Hoge beschikbaarheid

Productieworkloads uitvoeren op twee of meer VM's met behulp van Virtual Machine Scale Sets Flex

Als u toepassingsworkloads wilt beschermen tegen downtime vanwege de tijdelijke niet-beschikbaarheid van een schijf of VM, is het raadzaam om productieworkloads uit te voeren op twee of meer VM's met behulp van Virtual Machine Scale Sets Flex.

Als u productieworkloads wilt uitvoeren, kunt u het volgende gebruiken:

// Azure Resource Graph Query
// Find all VMs that are not associated with a VMSS Flex instance
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(properties.virtualMachineScaleSet.id)
| project recommendationId="vm-1", name, id, tags

VM's implementeren in beschikbaarheidszones of Virtual Machine Scale Sets Flex gebruiken met zones*

Wanneer u uw VM's maakt, gebruikt u beschikbaarheidszones om uw toepassingen en gegevens te beschermen tegen onwaarschijnlijke datacenterfouten. Zie ondersteuning voor beschikbaarheidszones voor VM's in dit document voor meer informatie over beschikbaarheidszones voor VM's.

Zie ondersteuning voor beschikbaarheidszones maken voor informatie over het inschakelen van ondersteuning voor beschikbaarheidszones wanneer u uw VIRTUELE machine maakt.

Zie Migreren naar ondersteuning voor beschikbaarheidszones voor informatie over het migreren van uw bestaande VM's naar ondersteuning voor beschikbaarheidszones.

// Azure Resource Graph Query
// Find all VMs that are not assigned to a Zone
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(zones)
| project recommendationId="vm-2", name, id, tags, param1="No Zone"

VM's migreren met behulp van beschikbaarheidssets naar Virtual Machine Scale Sets Flex

Moderniseer uw workloads door ze te migreren van VM's naar Virtual Machine Scale Sets Flex.

Met Virtual Machine Scale Sets Flex kunt u uw VM's op twee manieren implementeren:

  • Tussen zones
  • In dezelfde zone, maar tussen foutdomeinen (FD's) en updatedomeinen (UD) automatisch.

In een N-tier-toepassing wordt aanbevolen dat u elke toepassingslaag in een eigen flex van virtuele-machineschaalsets plaatst.

// Azure Resource Graph Query
// Find all VMs using Availability Sets
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.availabilitySet)
| project recommendationId = "vm-3", name, id, tags, param1=strcat("availabilitySet: ",properties.availabilitySet.id)

Beheerde schijven gebruiken voor VM-schijven*

Gebruik beheerde schijven om een betere betrouwbaarheid te bieden voor VM's in een beschikbaarheidsset. Beheerde schijven zijn voldoende geïsoleerd van elkaar om single points of failure te voorkomen. Beheerde schijven zijn ook niet onderworpen aan de IOPS-limieten van VHD's die zijn gemaakt in een opslagaccount.

// Azure Resource Graph Query
// Find all VMs that are not using Managed Disks
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(properties.storageProfile.osDisk.managedDisk)
| project recommendationId = "vm-5", name, id, tags

Herstel na noodgeval

VM's repliceren met Behulp van Azure Site Recovery

Wanneer u Virtuele Azure-machines repliceert met Behulp van Site Recovery, worden alle VM-schijven continu asynchroon gerepliceerd naar de doelregio. De herstelpunten worden om de paar minuten gemaakt, waardoor u een RPO (Recovery Point Objective) in de volgorde van minuten krijgt. U kunt noodherstelanalyses zo vaak uitvoeren als u wilt, zonder dat dit van invloed is op de productietoepassing of de doorlopende replicatie.

Zie Een testfailover uitvoeren voor meer informatie over het uitvoeren van een noodherstelanalyse.

// Azure Resource Graph Query
// Find all VMs that do NOT have replication with ASR enabled
// Run query to see results.
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, id, tags
| join kind=leftouter (
    recoveryservicesresources
    | where type =~ 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems'
    | where properties.providerSpecificDetails.dataSourceInfo.datasourceType =~ 'AzureVm'
    | project id=properties.providerSpecificDetails.dataSourceInfo.resourceId
    | extend name=strcat_array(array_slice(split(id, '/'), 8, -1), '/')
) on name
| where isnull(id1)
| project-away id1
| project-away name1
| project recommendationId = "vm-4", name, id, tags
| order by id asc

Een back-up maken van gegevens op uw VM's met de Azure Backup-service

De Azure Backup-service biedt eenvoudige, beveiligde en kosteneffectieve oplossingen om een back-up te maken van uw gegevens en die te herstellen vanuit Microsoft Azure-cloud. Zie Wat is de Azure Backup-service voor meer informatie.

// Azure Resource Graph Query
// Find all VMs that do NOT have Backup enabled
// Run query to see results.
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, id, tags
| join kind=leftouter (
    recoveryservicesresources
    | where type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'
    | where properties.dataSourceInfo.datasourceType =~ 'Microsoft.Compute/virtualMachines'
    | project idBackupEnabled=properties.sourceResourceId
    | extend name=strcat_array(array_slice(split(idBackupEnabled, '/'), 8, -1), '/')
) on name
| where isnull(idBackupEnabled)
| project-away idBackupEnabled
| project-away name1
| project recommendationId = "vm-7", name, id, tags
| order by id asc

Prestaties

Toepassings- en databasegegevens hosten op een gegevensschijf

Een gegevensschijf is een beheerde schijf die is gekoppeld aan een virtuele machine. Gebruik de gegevensschijf om toepassingsgegevens of andere gegevens op te slaan die u moet bewaren. Gegevensschijven worden geregistreerd als SCSI-station en zijn voorzien van een door u gekozen letter. Door uw gegevens op een gegevensschijf te hosten, kunt u eenvoudig een back-up van uw gegevens maken of herstellen. U kunt de schijf ook migreren zonder dat u de hele virtuele machine en het besturingssysteem hoeft te verplaatsen. U kunt ook een andere schijf-SKU selecteren, met verschillende typen, grootte en prestaties die voldoen aan uw vereisten. Zie Gegevensschijven voor meer informatie over gegevensschijven.

// Azure Resource Graph Query
// Find all VMs that only have OS Disk
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where array_length(properties.storageProfile.dataDisks) < 1
| project recommendationId = "vm-6", name, id, tags

Productie-VM's moeten SSD-schijven gebruiken

Premium SSD-schijven bieden schijfondersteuning met hoge prestaties en lage latentie voor I/O-intensieve toepassingen en productieworkloads. Standard SSD-schijven zijn een rendabele opslagoptie die is geoptimaliseerd voor workloads die consistente prestaties nodig hebben op lagere IOPS-niveaus.

U wordt aangeraden het volgende te doen:

  • Gebruik Standard HDD-schijven voor Dev/Test-scenario's en minder kritieke workloads tegen laagste kosten.
  • Gebruik Premium SSD-schijven in plaats van Standard HDD-schijven met uw premium-compatibele VM's. Voor elke VM met één exemplaar die premium-opslag gebruikt voor alle besturingssysteemschijven en gegevensschijven, garandeert Azure een VM-connectiviteit van ten minste 99,9%.

Als u een upgrade wilt uitvoeren van Standard HDD naar Premium SSD-schijven, kunt u de volgende problemen overwegen:

  • Voor het upgraden is het opnieuw opstarten van de VIRTUELE machine vereist. Dit proces duurt 3-5 minuten.
  • Als VM's bedrijfskritieke productie-VM's zijn, evalueert u de verbeterde beschikbaarheid ten opzichte van de kosten van Premium-schijven.

Zie Azure Managed Disk Types voor meer informatie over door Azure beheerde schijven en schijftypen.

// Azure Resource Graph Query
// Find all disks with StandardHDD sku attached to VMs
Resources
| where type =~ 'Microsoft.Compute/disks'
| where sku.name == 'Standard_LRS' and sku.tier == 'Standard'
| where managedBy != ""
| project recommendationId = "vm-8", name, id, tags, param1=strcat("managedBy: ", managedBy)

Versneld netwerken inschakelen (AccelNet)

AccelNet maakt I/O-virtualisatie met één hoofdmap (SR-IOV) mogelijk voor een VIRTUELE machine, waardoor de netwerkprestaties aanzienlijk worden verbeterd. Dit pad met hoge prestaties omzeilt de host van het gegevenspad, waardoor latentie, jitter en CPU-gebruik worden verminderd voor de meest veeleisende netwerkworkloads op ondersteunde VM-typen.

Zie Versneld netwerken voor meer informatie over versneld netwerken

// Azure Resource Graph Query
// Find all VM NICs that do not have Accelerated Networking enabled
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| mv-expand nic = properties.networkProfile.networkInterfaces
| project name, id, tags, lowerCaseNicId = tolower(nic.id), vmSize = tostring(properties.hardwareProfile.vmSize)
| join kind = inner (
    resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where properties.enableAcceleratedNetworking == false
    | project nicName = split(id, "/")[8], lowerCaseNicId = tolower(id)
    )
    on lowerCaseNicId
| summarize nicNames = make_set(nicName) by name, id, tostring(tags), vmSize
| extend param1 = strcat("NicName: ", strcat_array(nicNames, ", ")), param2 = strcat("VMSize: ", vmSize)
| project recommendationId = "vm-10", name, id, tags, param1, param2
| order by id asc

Wanneer AccelNet is ingeschakeld, moet u het NIC-stuurprogramma van GuestOS handmatig bijwerken

Wanneer AccelNet is ingeschakeld, wordt de standaardinterface van Azure Virtual Network in GuestOS vervangen door een Mellanox-interface. Als gevolg hiervan wordt het GuestOS NIC-stuurprogramma geleverd door Mellanox, een externe leverancier. Hoewel Marketplace-installatiekopieën die door Microsoft worden onderhouden, worden aangeboden met de nieuwste versie van Mellanox-stuurprogramma's, moet u, zodra de VM is geïmplementeerd, elke zes maanden handmatig het GuestOS NIC-stuurprogramma bijwerken.

// cannot-be-validated-with-arg

Beheer

Vm's met de status Gestopt controleren

VM-exemplaren doorlopen verschillende statussen, waaronder inrichting en energiestatussen. Als een VIRTUELE machine de status Gestopt heeft, kan de VIRTUELE machine een probleem ondervinden of niet meer nodig is en kan worden verwijderd om de kosten te verlagen.

// Azure Resource Graph Query
// Find all VMs that are NOT running
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where properties.extended.instanceView.powerState.displayStatus != 'VM running'
| project recommendationId = "vm-9", name, id, tags

Onderhoudsconfiguraties gebruiken voor de VM

Gebruik onderhoudsconfiguratie-instellingen om ervoor te zorgen dat VM-updates/onderbrekingen in een gepland tijdsbestek worden uitgevoerd om updates te plannen en te beheren. Zie VM-updates beheren met onderhoudsconfiguraties voor meer informatie over het beheren van VM-updates met onderhoudsconfiguraties.

// Azure Resource Graph Query
// Find VMS that do not have maintenance configuration assigned
Resources
| extend resourceId = tolower(id)
| project name, location, type, id, tags, resourceId, properties
| where type =~ 'Microsoft.Compute/virtualMachines'
| join kind=leftouter (
maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| project planName = name, type, maintenanceProps = properties
| extend resourceId = tostring(maintenanceProps.resourceId)
) on resourceId
| where isnull(maintenanceProps)
| project recommendationId = "vm-22",name, id, tags
| order by id asc

Beveiliging

VM's mogen niet rechtstreeks aan een openbaar IP-adres zijn gekoppeld

Als voor een virtuele machine uitgaande internetverbinding is vereist, wordt u aangeraden NAT Gateway of Azure Firewall te gebruiken. NAT Gateway of Azure Firewall helpen de beveiliging en tolerantie van de service te verbeteren, omdat beide services een hogere beschikbaarheid hebben en SNAT-poorten (Source Network Address Translation). Voor inkomende internetverbinding is het raadzaam om een oplossing voor taakverdeling te gebruiken, zoals Azure Load Balancer en Application Gateway.

// Azure Resource Graph Query
// Find all VMs with PublicIPs directly associated with them
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where isnotnull(properties.ipConfigurations)
    | mv-expand ipconfig=properties.ipConfigurations
    | extend publicIp = tostring(ipconfig.properties.publicIPAddress.id)
    | where publicIp != ""
    | project name, nicId = tostring(id), publicIp
) on nicId
| project recommendationId = "vm-12", name, id, tags
| order by id asc

Aan VM-netwerkinterfaces is een netwerkbeveiligingsgroep (NSG) gekoppeld*

Het is raadzaam om een NSG aan een subnet of een netwerkinterface te koppelen, maar niet aan beide. Omdat regels in een NSG die aan een subnet zijn gekoppeld, kunnen conflicteren met regels in een NSG die is gekoppeld aan een netwerkinterface, kunt u onverwachte communicatieproblemen hebben waarvoor probleemoplossing is vereist. Zie Intra-Subnet-verkeer voor meer informatie.

// Azure Resource Graph Query
// Provides a list of virtual machines and associated NICs that do have an NSG associated to them and also an NSG associated to the subnet.
Resources
| where type =~ 'Microsoft.Network/networkInterfaces'
| where isnotnull(properties.networkSecurityGroup)
| mv-expand ipConfigurations = properties.ipConfigurations, nsg = properties.networkSecurityGroup
| project nicId = tostring(id), subnetId = tostring(ipConfigurations.properties.subnet.id), nsgName=split(nsg.id, '/')[8]
| parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet
    | join kind=inner (
        Resources
        | where type =~ 'Microsoft.Network/NetworkSecurityGroups' and isnotnull(properties.subnets)
        | project name, resourceGroup, subnet=properties.subnets
        | mv-expand subnet
        | project subnetId=tostring(subnet.id)
    ) on subnetId
    | project nicId
| join kind=leftouter (
    Resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | where isnotnull(properties.networkProfile.networkInterfaces)
    | mv-expand nic=properties.networkProfile.networkInterfaces
    | project vmName = name, vmId = id, tags, nicId = nic.id, nicName=split(nic.id, '/')[8]
    | extend nicId = tostring(nicId)
) on nicId
| project recommendationId = "vm-13", name=vmName, id = vmId, tags, param1 = strcat("nic-name=", nicName)

Doorsturen via IP mag alleen zijn ingeschakeld voor virtuele netwerkapparaten

Doorsturen via IP zorgt ervoor dat de netwerkinterface van de virtuele machine het volgende kan doen:

  • Ontvang netwerkverkeer dat niet is bestemd voor een van de IP-adressen die zijn toegewezen aan een van de IP-configuraties die zijn toegewezen aan de netwerkinterface.

  • Netwerkverkeer verzenden met een ander bron-IP-adres dan het adres dat is toegewezen aan een van de IP-configuraties van een netwerkinterface.

De instelling voor doorsturen via IP moet zijn ingeschakeld voor elke netwerkinterface die is gekoppeld aan de VM die verkeer ontvangt dat moet worden doorgestuurd. Een VIRTUELE machine kan verkeer doorsturen, ongeacht of deze meerdere netwerkinterfaces heeft of één netwerkinterface eraan is gekoppeld. Hoewel doorsturen via IP een Azure-instelling is, moet de VM ook een toepassing uitvoeren die het verkeer kan doorsturen, zoals firewall, WAN-optimalisatie en taakverdelingstoepassingen.

Zie Doorsturen via IP in- of uitschakelen voor meer informatie over het in- of uitschakelen van doorsturen via IP.

// Azure Resource Graph Query
// Find all VM NICs that have IPForwarding enabled. This feature is usually only required for Network Virtual Appliances
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where properties.enableIPForwarding == true
    | project nicId = tostring(id)
) on nicId
| project recommendationId = "vm-14", name, id, tags
| order by id asc

Netwerktoegang tot de VM-schijf moet zijn ingesteld op 'Openbare toegang uitschakelen en privétoegang inschakelen'

Het is raadzaam om netwerktoegang tot VM-schijven in te stellen op 'Openbare toegang uitschakelen en privétoegang inschakelen' en een privé-eindpunt te maken. Zie Een privé-eindpunt maken voor meer informatie over het maken van een privé-eindpunt.

// Azure Resource Graph Query
// Find all Disks with "Enable public access from all networks" enabled
resources
| where type =~ 'Microsoft.Compute/disks'
| where properties.publicNetworkAccess == "Enabled"
| project id, name, tags, lowerCaseDiskId = tolower(id)
| join kind = leftouter (
    resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
    | join kind = fullouter (
        resources
        | where type =~ 'Microsoft.Compute/virtualMachines'
        | mv-expand dataDisks = properties.storageProfile.dataDisks
        | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
        )
        on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
    | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
    )
    on lowerCaseDiskId
| summarize vmNames = make_set(vmName) by name, id, tostring(tags)
| extend param1 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
| project recommendationId = "vm-17", name, id, tags, param1
| order by id asc

Schijfversleuteling en data-at-rest-versleuteling standaard inschakelen

Er zijn verschillende typen versleuteling beschikbaar voor uw beheerde schijven, waaronder Azure Disk Encryption (ADE), Server-Side Encryption (SSE) en versleuteling op de host.

  • Azure Disk Encryption helpt om uw gegevens te beschermen en te beveiligen, zodat u aan de beveiligings- en nalevingsafspraken van uw organisatie voldoet.
  • Versleuteling aan de serverzijde van Azure Disk Storage (ook wel versleuteling-at-rest of Azure Storage-versleuteling genoemd) versleutelt automatisch gegevens die zijn opgeslagen op door Azure beheerde schijven (besturingssysteem- en gegevensschijven) wanneer ze op de opslagclusters worden bewaard.
  • Versleuteling op de host zorgt ervoor dat gegevens die zijn opgeslagen op de VM-host die als host fungeert voor uw VIRTUELE machine, in rust worden versleuteld en dat stromen worden versleuteld naar de opslagclusters.
  • Vertrouwelijke schijfversleuteling verbindt schijfversleutelingssleutels met de TPM van de VIRTUELE machine en maakt de beveiligde schijfinhoud alleen toegankelijk voor de VIRTUELE machine.

Zie Overzicht van opties voor beheerde schijfversleuteling voor meer informatie over opties voor beheerde schijfversleuteling.

// under-development

Netwerken

DNS-servers moeten worden geconfigureerd op het niveau van het virtuele netwerk

Configureer de DNS-server in het virtuele netwerk om inconsistentie van naamomzetting in de omgeving te voorkomen. Zie Naamomzetting voor VM's en cloudservices voor meer informatie over naamomzetting voor resources in virtuele Azure-netwerken.

// Azure Resource Graph Query
// Find all VM NICs that have DNS Server settings configured in any of the NICs
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | project name, id, dnsServers = properties.dnsSettings.dnsServers
    | extend hasDns = array_length(dnsServers) >= 1
    | where hasDns != 0
    | project name, nicId = tostring(id)
) on nicId
| project recommendationId = "vm-15", name, id, tags
| order by id asc

Storage

Gedeelde schijven mogen alleen worden ingeschakeld op geclusterde servers

Gedeelde Azure-schijven is een functie van door Azure beheerde schijven waarmee u een beheerde schijf tegelijk aan meerdere VM's kunt koppelen. Wanneer u een beheerde schijf koppelt aan meerdere VM's, kunt u nieuwe of bestaande geclusterde toepassingen implementeren naar Azure. Gedeelde schijven mogen alleen worden gebruikt in situaties waarin de schijf is toegewezen aan meer dan één VM-lid van een cluster.

Zie Gedeelde schijf inschakelen voor meer informatie over het inschakelen van gedeelde schijven voor beheerde schijven.

// Azure Resource Graph Query
// Find all Disks configured to be Shared. This is not an indication of an issue, but if a disk with this configuration is assigned to two or more VMs without a proper disk control mechanism (like a WSFC) it can lead to data loss
resources
| where type =~ 'Microsoft.Compute/disks'
| where isnotnull(properties.maxShares)
| project id, name, tags, lowerCaseDiskId = tolower(id), diskState = tostring(properties.diskState)
| join kind = leftouter (
    resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
    | join kind = fullouter (
        resources
        | where type =~ 'Microsoft.Compute/virtualMachines'
        | mv-expand dataDisks = properties.storageProfile.dataDisks
        | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
        )
        on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
    | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
    )
    on lowerCaseDiskId
| summarize vmNames = make_set(vmName) by name, id, tostring(tags), diskState
| extend param1 = strcat("DiskState: ", diskState), param2 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
| project recommendationId = "vm-16", name, id, tags, param1, param2
| order by id asc

Naleving

Zorg ervoor dat uw VM's compatibel zijn met Azure-beleid

Het is belangrijk om uw virtuele machine (VM) veilig te houden voor de toepassingen die u uitvoert. Het beveiligen van uw VM's kan een of meer Azure-services en -functies bevatten die betrekking hebben op beveiligde toegang tot uw VM's en beveiligde opslag van uw gegevens. Zie de besturingselementen voor naleving van Azure Policy-regelgeving voor virtuele Azure-machines voor meer informatie over het beveiligen van uw VM en toepassingen.

// Azure Resource Graph Query
// Find all VMs in "NonCompliant" state with Azure Policies
PolicyResources
| where type =~ "Microsoft.PolicyInsights/policyStates" and properties.resourceType =~ "Microsoft.Compute/virtualMachines" and properties.complianceState =~ "NonCompliant"
| project
    policyAssignmentName = properties.policyAssignmentName,
    policyDefinitionName = properties.policyDefinitionName,
    lowerCasePolicyDefinitionIdOfPolicyState = tolower(properties.policyDefinitionId),
    lowerCaseVmIdOfPolicyState = tolower(properties.resourceId)
| join kind = leftouter (
    PolicyResources
    | where type =~ "Microsoft.Authorization/policyDefinitions"
    | project lowerCasePolicyDefinitionId = tolower(id), policyDefinitionDisplayName = properties.displayName
    )
    on $left.lowerCasePolicyDefinitionIdOfPolicyState == $right.lowerCasePolicyDefinitionId
| project policyAssignmentName, policyDefinitionName, policyDefinitionDisplayName, lowerCaseVmIdOfPolicyState
| join kind = leftouter (
    Resources
    | where type =~ "Microsoft.Compute/virtualMachines"
    | project vmName = name, vmId = id, vmTags = tags, lowerCaseVmId = tolower(id)
    )
    on $left.lowerCaseVmIdOfPolicyState == $right.lowerCaseVmId
| extend
    param1 = strcat("AssignmentName: ", policyAssignmentName),
    param2 = strcat("DefinitionName: ", policyDefinitionDisplayName),  // Align to Azure portal's term.
    param3 = strcat("DefinitionID: ", policyDefinitionName)            // Align to Azure portal's term.
| project recommendationId = "vm-18", name = vmName, id = vmId, tags = vmTags, param1, param2, param3

Controleren

VM-inzichten inschakelen

Schakel VM-inzichten in om meer inzicht te krijgen in de status en prestaties van uw virtuele machine. VM Insights geeft u informatie over de prestaties en status van uw VM's en virtuele-machineschaalsets door de actieve processen en afhankelijkheden van andere resources te bewaken. VM Insights kan helpen voorspelbare prestaties en beschikbaarheid van essentiële toepassingen te leveren door prestatieknelpunten en netwerkproblemen te identificeren. Inzichten kunnen u ook helpen begrijpen of een probleem is gerelateerd aan andere afhankelijkheden.

// Azure Resource Graph Query
// Check for VMs without Azure Monitoring Agent extension installed, missing Data Collection Rule or Data Collection Rule without performance enabled.
Resources
| where type == 'microsoft.compute/virtualmachines'
| project idVm = tolower(id), name, tags
| join kind=leftouter (
    InsightsResources
    | where type =~ "Microsoft.Insights/dataCollectionRuleAssociations" and id has "Microsoft.Compute/virtualMachines"
    | project idDcr = tolower(properties.dataCollectionRuleId), idVmDcr = tolower(substring(id, 0, indexof(id, "/providers/Microsoft.Insights/dataCollectionRuleAssociations/"))))
on $left.idVm == $right.idVmDcr
| join kind=leftouter (
    Resources
    | where type =~ "Microsoft.Insights/dataCollectionRules"
    | extend
        isPerformanceEnabled = iif(properties.dataSources.performanceCounters contains "Microsoft-InsightsMetrics" and properties.dataFlows contains "Microsoft-InsightsMetrics", true, false),
        isMapEnabled = iif(properties.dataSources.extensions contains "Microsoft-ServiceMap" and properties.dataSources.extensions contains "DependencyAgent" and properties.dataFlows contains "Microsoft-ServiceMap", true, false)//,
    | where isPerformanceEnabled or isMapEnabled
    | project dcrName = name, isPerformanceEnabled, isMapEnabled, idDcr = tolower(id))
on $left.idDcr == $right.idDcr
| join kind=leftouter (
    Resources
        | where type == 'microsoft.compute/virtualmachines/extensions' and (name contains 'AzureMonitorWindowsAgent' or name contains 'AzureMonitorLinuxAgent')
        | extend idVmExtension = tolower(substring(id, 0, indexof(id, '/extensions'))), extensionName = name)
on $left.idVm == $right.idVmExtension
| where isPerformanceEnabled != 1 or (extensionName != 'AzureMonitorWindowsAgent' and extensionName != 'AzureMonitorLinuxAgent')
| project recommendationId = "vm-20", name, id = idVm, tags, param1 = strcat('MonitoringExtension:', extensionName), param2 = strcat('DataCollectionRuleId:', idDcr), param3 = strcat('isPerformanceEnabled:', isPerformanceEnabled)

Diagnostische instellingen configureren voor alle Azure-resources

Metrische platformgegevens worden standaard en zonder configuratie automatisch naar Metrische gegevens van Azure Monitor verzonden. Platformlogboeken bieden gedetailleerde diagnostische en controle-informatie voor Azure-resources en het Azure-platform waarvan ze afhankelijk zijn en zijn een van de volgende typen:

  • Resourcelogboeken die pas worden verzameld als ze naar een bestemming worden gerouteerd.
  • Activiteitenlogboeken die zelfstandig bestaan, maar kunnen naar andere locaties worden gerouteerd.

Voor elke Azure-resource is een eigen diagnostische instelling vereist, die de volgende criteria definieert:

  • Bronnen Het type metrische gegevens en logboekgegevens dat moet worden verzonden naar de bestemmingen die in de instelling zijn gedefinieerd. De beschikbare typen variëren per resourcetype.
  • Bestemmingen: een of meer bestemmingen om naar te verzenden.

Eén diagnostische instelling kan niet meer dan één van de bestemmingen definiëren. Als u gegevens wilt verzenden naar meer dan een van een bepaald doeltype (bijvoorbeeld twee verschillende Log Analytics-werkruimten), maakt u meerdere instellingen. Elke resource kan maximaal vijf diagnostische instellingen hebben.

Zie Diagnostische instellingen in Azure Monitor voor meer informatie.

// Azure Resource Graph Query
// Find all Virtual Machines without diagnostic settings enabled/with diagnostic settings enabled but not configured both performance counters and event logs/syslogs.
resources
| where type =~ "microsoft.compute/virtualmachines"
| project name, id, tags, lowerCaseVmId = tolower(id)
| join kind = leftouter (
    resources
    | where type =~ "Microsoft.Compute/virtualMachines/extensions" and properties.publisher =~ "Microsoft.Azure.Diagnostics"
    | project
        lowerCaseVmIdOfExtension = tolower(substring(id, 0, indexof(id, "/extensions/"))),
        extensionType = properties.type,
        provisioningState = properties.provisioningState,
        storageAccount = properties.settings.StorageAccount,
        // Windows
        wadPerfCounters = properties.settings.WadCfg.DiagnosticMonitorConfiguration.PerformanceCounters.PerformanceCounterConfiguration,
        wadEventLogs = properties.settings.WadCfg.DiagnosticMonitorConfiguration.WindowsEventLog,
        // Linux
        ladPerfCounters = properties.settings.ladCfg.diagnosticMonitorConfiguration.performanceCounters.performanceCounterConfiguration,
        ladSyslog = properties.settings.ladCfg.diagnosticMonitorConfiguration.syslogEvents
    | extend
        // Windows
        isWadPerfCountersConfigured = iif(array_length(wadPerfCounters) > 0, true, false),
        isWadEventLogsConfigured = iif(isnotnull(wadEventLogs) and array_length(wadEventLogs.DataSource) > 0, true, false),
        // Linux
        isLadPerfCountersConfigured = iif(array_length(ladPerfCounters) > 0, true, false),
        isLadSyslogConfigured = isnotnull(ladSyslog)
    | project
        lowerCaseVmIdOfExtension,
        extensionType,
        provisioningState,
        storageAccount,
        isPerfCountersConfigured = case(extensionType =~ "IaaSDiagnostics", isWadPerfCountersConfigured, extensionType =~ "LinuxDiagnostic", isLadPerfCountersConfigured, false),
        isEventLogsConfigured = case(extensionType =~ "IaaSDiagnostics", isWadEventLogsConfigured, extensionType =~ "LinuxDiagnostic", isLadSyslogConfigured, false)
    )
    on $left.lowerCaseVmId == $right.lowerCaseVmIdOfExtension
| where isempty(lowerCaseVmIdOfExtension) or provisioningState !~ "Succeeded" or not(isPerfCountersConfigured and isEventLogsConfigured)
| extend
    param1 = strcat("DiagnosticSetting: ", iif(isnotnull(extensionType), strcat("Enabled, partially configured (", extensionType, ")"), "Not enabled")),
    param2 = strcat("ProvisioningState: ", iif(isnotnull(provisioningState), provisioningState, "n/a")),
    param3 = strcat("storageAccount: ", iif(isnotnull(storageAccount), storageAccount, "n/a")),
    param4 = strcat("PerformanceCounters: ", case(isnull(isPerfCountersConfigured), "n/a", isPerfCountersConfigured, "Configured", "Not configured")),
    param5 = strcat("EventLogs/Syslogs: ", case(isnull(isEventLogsConfigured), "n/a", isEventLogsConfigured, "Configured", "Not configured"))
| project recommendationId = "vm-21", name, id, tags, param1, param2, param3, param4, param5

Ondersteuning voor beschikbaarheidszone

Azure-beschikbaarheidszones zijn ten minste drie fysiek afzonderlijke groepen datacenters binnen elke Azure-regio. Datacenters binnen elke zone zijn uitgerust met onafhankelijke energie-, koelings- en netwerkinfrastructuur. In het geval van een storing in een lokale zone worden beschikbaarheidszones zodanig ontworpen dat als de ene zone wordt beïnvloed, regionale services, capaciteit en hoge beschikbaarheid worden ondersteund door de resterende twee zones.

Fouten kunnen variëren van software- en hardwarefouten tot gebeurtenissen zoals aardbevingen, overstromingen en brand. Tolerantie voor fouten wordt bereikt met redundantie en logische isolatie van Azure-services. Zie Regio's en beschikbaarheidszones voor meer informatie over beschikbaarheidszones in Azure.

Services met azure-beschikbaarheidszones zijn ontworpen om het juiste niveau van betrouwbaarheid en flexibiliteit te bieden. Ze kunnen op twee manieren worden geconfigureerd. Ze kunnen zone-redundant zijn, met automatische replicatie tussen zones of zonegebonden, waarbij exemplaren zijn vastgemaakt aan een specifieke zone. U kunt deze benaderingen ook combineren. Zie Aanbevelingen voor het gebruik van beschikbaarheidszones en regio's voor meer informatie over zone-redundante architectuur en zone-redundante architectuur.

Virtuele machines ondersteunen beschikbaarheidszones met drie beschikbaarheidszones per ondersteunde Azure-regio en zijn ook zone-redundant en zonegebonden. Zie ondersteuning voor beschikbaarheidszones voor meer informatie. De klant is verantwoordelijk voor het configureren en migreren van hun virtuele machines voor beschikbaarheid.

Zie voor meer informatie over gereedheidsopties voor beschikbaarheidszones:

Vereisten

  • De SKU's van uw virtuele machine moeten beschikbaar zijn in de zones voor uw regio. Als u wilt controleren welke regio's beschikbaarheidszones ondersteunen, raadpleegt u de lijst met ondersteunde regio's.

  • Uw VM-SKU's moeten beschikbaar zijn in de zones in uw regio. Gebruik een van de volgende methoden om te controleren op beschikbaarheid van VM-SKU's:

SLA-verbeteringen

Omdat beschikbaarheidszones fysiek gescheiden zijn en afzonderlijke energiebron, netwerk en koeling bieden, nemen SLA's (serviceovereenkomsten) toe. Zie de SLA voor virtuele machines voor meer informatie.

Een resource maken waarvoor beschikbaarheidszones zijn ingeschakeld

Ga aan de slag door een virtuele machine (VM) te maken waarvoor de beschikbaarheidszone is ingeschakeld via de volgende implementatieopties hieronder:

Ondersteuning voor zonegebonden failover

U kunt virtuele machines instellen voor een failover naar een andere zone met behulp van de Site Recovery-service. Zie Site Recovery voor meer informatie.

Fouttolerantie

Virtuele machines kunnen een failover naar een andere server in een cluster uitvoeren, waarbij het besturingssysteem van de virtuele machine opnieuw wordt opgestart op de nieuwe server. Raadpleeg het failoverproces voor herstel na noodgevallen, het verzamelen van virtuele machines in herstelplanning en het uitvoeren van noodherstelanalyses om ervoor te zorgen dat de fouttolerantieoplossing is geslaagd.

Zie de siteherstelprocessen voor meer informatie.

Zone-down-ervaring

Tijdens een storing in de hele zone verwacht u een korte verslechtering van de prestaties totdat de self-healing van de virtuele machineservice de onderliggende capaciteit herverdeelt om zich aan te passen aan gezonde zones. Zelfherstel is niet afhankelijk van zoneherstel; Naar verwachting compenseert de door Microsoft beheerde service zelfherstelstatus voor een verloren zone, met behulp van capaciteit van andere zones.

U moet zich ook voorbereiden op de mogelijkheid dat er een storing optreedt in een hele regio. Als er een serviceonderbreking is voor een hele regio, zijn de lokaal redundante kopieën van uw gegevens tijdelijk niet beschikbaar. Als geo-replicatie is ingeschakeld, worden drie andere kopieën van uw Azure Storage-blobs en tabellen opgeslagen in een andere regio. Wanneer er sprake is van een volledige regionale storing of een noodgeval waarbij de primaire regio niet kan worden hersteld, wijst Azure alle DNS-vermeldingen opnieuw toe aan de geografisch gerepliceerde regio.

Voorbereiding en herstel van zonestoring

De volgende richtlijnen worden gegeven voor virtuele Azure-machines tijdens een serviceonderbreking van de hele regio waar uw azure-toepassing voor virtuele machines wordt geïmplementeerd:

Ontwerp met lage latentie

Cross Region (secundaire regio), Cross Subscription (preview) en Cross Zoneal (preview) zijn beschikbare opties om rekening mee te houden bij het ontwerpen van een virtuele-machineoplossing met lage latentie. Zie de ondersteunde herstelmethoden voor meer informatie over deze opties.

Belangrijk

Door geen zonebewuste implementatie uit te schakelen, moet u geen bescherming bieden tegen isolatie van onderliggende fouten. Het gebruik van SKU's die geen ondersteuning bieden voor beschikbaarheidszones of die zich afmelden voor de configuratie van beschikbaarheidszones, dwingt af op resources die niet voldoen aan de plaatsing en scheiding van zones (inclusief onderliggende afhankelijkheden van deze resources). Deze resources moeten niet worden verwacht om scenario's met zone-down te overleven. Oplossingen die gebruikmaken van dergelijke resources moeten een strategie voor herstel na noodgevallen definiëren en een herstel van de oplossing in een andere regio configureren.

Veilige implementatietechnieken

Wanneer u kiest voor isolatie van beschikbaarheidszones, moet u veilige implementatietechnieken gebruiken voor toepassingscode en toepassingsupgrades. Naast het configureren van Azure Site Recovery en het implementeren van een van de volgende veilige implementatietechnieken voor VM's:

Omdat Microsoft regelmatig geplande onderhoudsupdates uitvoert, kunnen er zeldzame gevallen zijn wanneer voor deze updates opnieuw moet worden opgestart van uw virtuele machine om de vereiste updates toe te passen op de onderliggende infrastructuur. Zie beschikbaarheidsoverwegingen tijdens gepland onderhoud voor meer informatie.

Voordat u de volgende set knooppunten in een andere zone bijwerken, moet u de volgende taken uitvoeren:

Migreren naar ondersteuning voor beschikbaarheidszones

Zie Virtual Machines en Virtual Machine Scale Sets migreren naar ondersteuning voor beschikbaarheidszones voor meer informatie over het migreren van een VM naar ondersteuning voor beschikbaarheidszones.

Herstel na noodgevallen en bedrijfscontinuïteit tussen regio's

Herstel na noodgevallen (DR) gaat over het herstellen van gebeurtenissen met een hoge impact, zoals natuurrampen of mislukte implementaties die downtime en gegevensverlies tot gevolg hebben. Ongeacht de oorzaak is de beste oplossing voor een noodgeval een goed gedefinieerd en getest DR-plan en een toepassingsontwerp dat actief dr ondersteunt. Zie aanbevelingen voor het ontwerpen van een strategie voor herstel na noodgevallen voordat u begint na te denken over het maken van uw plan voor herstel na noodgevallen.

Als het gaat om herstel na noodgevallen, gebruikt Microsoft het model voor gedeelde verantwoordelijkheid. In een model voor gedeelde verantwoordelijkheid zorgt Microsoft ervoor dat de basisinfrastructuur en platformservices beschikbaar zijn. Tegelijkertijd repliceren veel Azure-services niet automatisch gegevens of vallen ze terug van een mislukte regio om kruislings te repliceren naar een andere ingeschakelde regio. Voor deze services bent u verantwoordelijk voor het instellen van een plan voor herstel na noodgevallen dat geschikt is voor uw workload. De meeste services die worden uitgevoerd op PaaS-aanbiedingen (Platform as a Service) van Azure bieden functies en richtlijnen ter ondersteuning van herstel na noodgeval en u kunt servicespecifieke functies gebruiken om snel herstel te ondersteunen om uw DR-plan te ontwikkelen.

U kunt herstel tussen regio's gebruiken om Virtuele Azure-machines te herstellen via gekoppelde regio's. Met herstel tussen regio's kunt u alle Virtuele Azure-machines voor het geselecteerde herstelpunt herstellen als de back-up wordt uitgevoerd in de secundaire regio. Raadpleeg de tabelrijvermelding Meerdere regio's in onze herstelopties voor meer informatie over het herstellen van meerdere regio's.

Herstel na noodgevallen in geografie in meerdere regio's

In het geval van een serviceonderbreking in de hele regio werkt Microsoft zorgvuldig om de service van de virtuele machine te herstellen. U moet echter nog steeds vertrouwen op andere toepassingsspecifieke back-upstrategieën om het hoogste beschikbaarheidsniveau te bereiken. Zie de sectie over gegevensstrategieën voor herstel na noodgevallen voor meer informatie.

Detectie, melding en beheer van storingen

Hardware of fysieke infrastructuur voor de virtuele machine kan onverwacht mislukken. Onverwachte fouten kunnen lokale netwerkfouten, lokale schijffouten of andere storingen op rackniveau omvatten. Wanneer dit wordt gedetecteerd, migreert het Azure-platform uw virtuele machine automatisch (herstelt) naar een gezonde fysieke machine in hetzelfde datacenter. Tijdens deze procedure treedt downtime (opnieuw opstarten) op de virtuele machines op en in sommige gevallen gaat de tijdelijke schijf verloren. Het besturingssysteem en de gegevensschijven die zijn bijgevoegd, blijven altijd behouden.

Zie de richtlijnen voor herstel na noodgevallen voor meer informatie over serviceonderbrekingen van virtuele machines.

Herstel na noodgevallen en detectie van storingen instellen

Wanneer u herstel na noodgevallen instelt voor virtuele machines, begrijpt u wat Azure Site Recovery biedt. Schakel herstel na noodgevallen in voor virtuele machines met de onderstaande methoden:

Herstel na noodgevallen in geografie met één regio

Met het instellen van herstel na noodgevallen worden Virtuele Azure-machines continu gerepliceerd naar een andere doelregio. Als er een storing optreedt, kunt u een failover uitvoeren van VM's naar de secundaire regio en deze daar openen.

Wanneer u Virtuele Azure-machines repliceert met Behulp van Site Recovery, worden alle VM-schijven continu asynchroon gerepliceerd naar de doelregio. De herstelpunten worden om de paar minuten gemaakt, waardoor u in de volgorde van minuten een RPO (Recovery Point Objective) krijgt. U kunt noodherstelanalyses zo vaak uitvoeren als u wilt, zonder dat dit van invloed is op de productietoepassing of de doorlopende replicatie. Zie Een noodherstelanalyse uitvoeren naar Azure voor meer informatie.

Zie architectuuronderdelen en regiokoppeling van Azure-VM's voor meer informatie.

Tolerantie voor capaciteit en proactief herstel na noodgevallen

Microsoft en haar klanten werken onder het Model voor gedeelde verantwoordelijkheid. Gedeelde verantwoordelijkheid betekent dat u voor herstel na noodgeval (klantverantwoordelijke services) herstel na noodgeval moet aanpakken voor elke service die ze implementeren en beheren. Om ervoor te zorgen dat herstel proactief is, moet u altijd vooraf secundaire bestanden implementeren, omdat er geen garantie is voor capaciteit op het moment van impact voor degenen die de toewijzing niet vooraf hebben toegewezen.

Voor het implementeren van virtuele machines kunt u de flexibele indelingsmodus op virtuele-machineschaalsets gebruiken. Alle VM-grootten kunnen worden gebruikt met de flexibele indelingsmodus. Flexibele indelingsmodus biedt ook garanties voor hoge beschikbaarheid (maximaal 1000 VM's) door VM's over foutdomeinen binnen een regio of binnen een beschikbaarheidszone te spreiden.

Volgende stappen