Keandalan di Komputer Virtual

Artikel ini berisi rekomendasi keandalan khusus untuk Komputer Virtual, serta informasi terperinci tentang ketahanan regional VM dengan zona ketersediaan dan pemulihan bencana lintas wilayah dan kelangsungan bisnis.

Untuk gambaran umum arsitektur keandalan di Azure, lihat Keandalan Azure.

Rekomendasi keandalan

Bagian ini berisi rekomendasi untuk mencapai ketahanan dan ketersediaan. Setiap rekomendasi termasuk dalam salah satu dari dua kategori:

  • Item kesehatan mencakup area seperti item konfigurasi dan fungsi yang tepat dari komponen utama yang membentuk Azure Workload Anda, seperti pengaturan konfigurasi Sumber Daya Azure, dependensi pada layanan lain, dan sebagainya.

  • Item risiko mencakup area seperti persyaratan ketersediaan dan pemulihan, pengujian, pemantauan, penyebaran, dan item lain yang, jika dibiarkan tidak terselesaikan, meningkatkan kemungkinan masalah di lingkungan.

Matriks prioritas rekomendasi keandalan

Setiap rekomendasi ditandai sesuai dengan matriks prioritas berikut:

Gambar Prioritas Deskripsi
Sangat Penting Perbaikan langsung diperlukan.
Medium Perbaiki dalam waktu 3-6 bulan.
Kurang Penting Perlu ditinjau.

Ringkasan rekomendasi keandalan

Category Prioritas Rekomendasi
Ketersediaan Tinggi Menjalankan beban kerja produksi pada dua VM atau lebih menggunakan Azure Virtual Machine Scale Sets Flex
Menyebarkan VM di seluruh zona ketersediaan atau menggunakan Virtual Machine Scale Sets Flex dengan zona
Memigrasikan VM menggunakan set ketersediaan ke Virtual Machine Scale Sets Flex
Menggunakan disk terkelola untuk disk VM
Pemulihan Bencana Mereplikasi VM menggunakan Azure Site Recovery
Mencadangkan data di VM Anda dengan layanan Azure Backup
Performa Menghosting aplikasi dan data database pada disk data
VM produksi harus menggunakan disk SSD
Aktifkan Jaringan Terakselerasi (AccelNet)
Saat AccelNet diaktifkan, Anda harus memperbarui drive GuestOS NIC secara manual
Manajemen VM-9: Tonton VM dalam status Dihentikan
Menggunakan konfigurasi pemeliharaan untuk VM
Keamanan VVM tidak boleh memiliki IP Publik yang terkait langsung
Antarmuka Jaringan Virtual memiliki NSG yang terkait
Penerusan IP hanya boleh diaktifkan untuk Network Virtual Appliances
Akses jaringan ke disk VM harus diatur ke "Nonaktifkan akses publik dan aktifkan akses privat"
Aktifkan enkripsi disk dan enkripsi tidak aktif secara default
Jaringan Server DNS Pelanggan harus dikonfigurasi di tingkat Virtual Network
Penyimpanan Disk bersama hanya boleh diaktifkan di server berkluster
Kepatuhan Pastikan VM Anda mematuhi Kebijakan Azure
Pemantauan Mengaktifkan Wawasan VM
Mengonfigurasi pengaturan diagnostik untuk semua sumber daya Azure

Ketersediaan tinggi

Menjalankan beban kerja produksi pada dua VM atau lebih menggunakan Virtual Machine Scale Sets Flex

Untuk melindungi beban kerja aplikasi dari waktu henti karena tidak tersedianya disk atau VM sementara, disarankan agar Anda menjalankan beban kerja produksi pada dua VM atau lebih menggunakan Virtual Machine Scale Sets Flex.

Untuk menjalankan beban kerja produksi, Anda dapat menggunakan:

  • Azure Virtual Machine Scale Sets untuk membuat dan mengelola sekelompok VM seimbang beban. Jumlah instans komputer virtual bisa secara otomatis meningkat atau menurun sebagai respons terhadap permintaan atau jadwal yang ditentukan.

  • Zona ketersediaan. Untuk informasi selengkapnya tentang zona ketersediaan dan VM, lihat Dukungan zona ketersediaan.

// 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

Menyebarkan VM di seluruh zona ketersediaan atau menggunakan Virtual Machine Scale Sets Flex dengan zona*

Saat Anda membuat VM, gunakan zona ketersediaan untuk melindungi aplikasi dan data Anda dari kegagalan pusat data yang tidak mungkin. Untuk informasi selengkapnya tentang zona ketersediaan untuk VM, lihat Dukungan zona ketersediaan dalam dokumen ini.

Untuk informasi tentang cara mengaktifkan dukungan zona ketersediaan saat Anda membuat VM, lihat membuat dukungan zona ketersediaan.

Untuk informasi tentang cara memigrasikan VM yang ada ke dukungan zona ketersediaan, lihat bermigrasi ke dukungan zona ketersediaan.

// 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"

Memigrasikan VM menggunakan set ketersediaan ke Virtual Machine Scale Sets Flex

Modernisasi beban kerja Anda dengan memigrasikannya dari VM ke Virtual Machine Scale Sets Flex.

Dengan Virtual Machine Scale Sets Flex, Anda dapat menyebarkan VM Anda dengan salah satu dari dua cara:

  • Di seluruh zona
  • Di zona yang sama, tetapi di seluruh domain kesalahan (FD) dan domain pembaruan (UD) secara otomatis.

Dalam aplikasi N-tingkat, disarankan agar Anda menempatkan setiap tingkat aplikasi ke dalam Virtual Machine Scale Sets Flex sendiri.

// 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)

Menggunakan disk terkelola untuk disk VM*

Untuk memberikan keandalan yang lebih baik untuk VM dalam set ketersediaan, gunakan disk terkelola. Disk terkelola cukup terisolasi satu sama lain untuk menghindari satu titik kegagalan. Selain itu, disk terkelola tidak tunduk pada batas IOPS VHD yang dibuat di akun penyimpanan.

// 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

Pemulihan dari bencana

Mereplikasi VM menggunakan Azure Site Recovery

Saat Anda mereplikasi Azure VM menggunakan Site Recovery, semua disk VM terus direplikasi ke wilayah target secara asinkron. Titik pemulihan dibuat setiap beberapa menit, yang memberi Anda Tujuan Titik Pemulihan (RPO) dalam urutan menit. Anda dapat melakukan latihan pemulihan bencana sebanyak yang Anda inginkan, tanpa mempengaruhi aplikasi produksi atau replikasi yang sedang berlangsung.

Untuk mempelajari cara menjalankan latihan pemulihan bencana, lihat Menjalankan failover pengujian.

// 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

Mencadangkan data di VM Anda dengan layanan Azure Backup

Layanan Microsoft Azure Backup memberikan solusi sederhana, aman, dan hemat biaya untuk mencadangkan data Anda dan memulihkannya dari cloud Microsoft Azure. Untuk informasi selengkapnya, lihat Apa itu Azure Backup Service.

// 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

Performa

Menghosting aplikasi dan data database pada disk data

Disk data adalah disk terkelola yang dilampirkan ke VM. Gunakan disk data untuk menyimpan data aplikasi, atau data lain yang perlu Anda simpan. Disk data terdaftar sebagai drive SCSI dan diberi label dengan huruf yang Anda pilih. Hosting data Anda pada disk data memudahkan untuk mencadangkan atau memulihkan data Anda. Anda juga dapat memigrasikan disk tanpa harus memindahkan seluruh VM dan Sistem Operasi. Selain itu, Anda dapat memilih SKU disk yang berbeda, dengan jenis, ukuran, dan performa yang berbeda yang memenuhi kebutuhan Anda. Untuk informasi selengkapnya tentang disk data, lihat Disk Data.

// 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

VM produksi harus menggunakan disk SSD

Disk SSD premium menawarkan dukungan disk berkinerja tinggi dan latensi rendah untuk aplikasi intensif I/O dan beban kerja produksi. Disk SSD Standar adalah opsi penyimpanan hemat biaya yang dioptimalkan untuk beban kerja yang membutuhkan performa konsisten pada tingkat IOPS yang lebih rendah.

Disarankan agar Anda:

  • Gunakan disk HDD Standar untuk skenario Dev/Test dan beban kerja yang kurang penting dengan biaya terendah.
  • Gunakan disk SSD Premium alih-alih disk HDD Standar dengan VM berkemampuan premium Anda. Untuk VM Instans Tunggal apa pun yang menggunakan penyimpanan premium untuk semua Disk Sistem Operasi dan Disk Data, Azure menjamin konektivitas VM setidaknya 99,9%.

Jika Anda ingin meningkatkan dari HDD Standar ke disk SSD Premium, pertimbangkan masalah berikut:

  • Peningkatan memerlukan boot ulang VM dan proses ini membutuhkan waktu 3-5 menit untuk diselesaikan.
  • Jika VM adalah VM produksi misi penting, evaluasi peningkatan ketersediaan terhadap biaya disk premium.

Untuk informasi selengkapnya tentang jenis disk dan disk terkelola Azure, lihat Jenis disk terkelola Azure.

// 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)

Aktifkan Jaringan Terakselerasi (AccelNet)

AccelNet memungkinkan virtualisasi I/O root tunggal (SR-IOV) ke VM, sangat meningkatkan performa jaringannya. Jalur berperforma tinggi ini melewati host dari jalur data, yang mengurangi latensi, jitter, dan pemanfaatan CPU untuk beban kerja jaringan yang paling menuntut pada jenis VM yang didukung.

Untuk informasi selengkapnya tentang Jaringan Dipercepat, lihat Jaringan Dipercepat

// 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

Saat AccelNet diaktifkan, Anda harus memperbarui driver GuestOS NIC secara manual

Ketika AccelNet diaktifkan, antarmuka Azure Virtual Network default di GuestOS diganti untuk antarmuka Mellanox. Akibatnya, driver GuestOS NIC disediakan dari Mellanox, vendor pihak ketiga. Meskipun gambar Marketplace yang dikelola oleh Microsoft ditawarkan dengan versi terbaru driver Mellanox, setelah VM disebarkan, Anda perlu memperbarui driver GuestOS NIC secara manual setiap enam bulan.

// cannot-be-validated-with-arg

Manajemen

Meninjau VM dalam status berhenti

Instans VM melewati berbagai status, termasuk provisi dan status daya. Jika VM dalam status berhenti, VM mungkin menghadapi masalah atau tidak lagi diperlukan dan dapat dihapus untuk membantu mengurangi biaya.

// 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

Menggunakan konfigurasi pemeliharaan untuk VM

Untuk memastikan bahwa pembaruan/gangguan VM dilakukan dalam jangka waktu yang direncanakan, gunakan pengaturan konfigurasi pemeliharaan untuk menjadwalkan dan mengelola pembaruan. Untuk informasi selengkapnya tentang mengelola pembaruan VM dengan konfigurasi pemeliharaan, lihat Mengelola pembaruan VM dengan Konfigurasi Pemeliharaan.

// 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

Keamanan

VM tidak boleh memiliki IP Publik yang terkait langsung

Jika VM memerlukan konektivitas internet keluar, disarankan agar Anda menggunakan NAT Gateway atau Azure Firewall. NAT Gateway atau Azure Firewall membantu meningkatkan keamanan dan ketahanan layanan, karena kedua layanan memiliki ketersediaan yang lebih tinggi dan port Source Network Address Translation (SNAT). Untuk konektivitas internet masuk, disarankan agar Anda menggunakan solusi penyeimbangan beban seperti Azure Load Balancer dan 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

Antarmuka jaringan VM memiliki Kelompok Keamanan Jaringan (NSG) yang terkait*

Disarankan agar Anda mengaitkan NSG ke subnet, atau antarmuka jaringan, tetapi tidak keduanya. Karena aturan dalam NSG yang terkait dengan subnet dapat bertentangan dengan aturan dalam NSG yang terkait dengan antarmuka jaringan, Anda dapat memiliki masalah komunikasi tak terduga yang memerlukan pemecahan masalah. Untuk informasi selengkapnya, lihat Lalu lintas Intra-Subnet.

// 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)

Penerusan IP hanya boleh diaktifkan untuk appliance virtual jaringan

Penerusan IP mengizinkan komputer virtual antarmuka jaringan untuk:

  • Menerima lalu lintas jaringan yang tidak ditujukan untuk salah satu alamat IP yang ditetapkan ke salah satu konfigurasi IP yang ditetapkan ke antarmuka jaringan.

  • Kirim lalu lintas jaringan dengan alamat IP sumber yang berbeda dari yang ditetapkan ke salah satu konfigurasi IP antarmuka jaringan.

Pengaturan penerusan IP harus diaktifkan untuk setiap antarmuka jaringan yang dilampirkan ke lalu lintas penerima VM yang akan diteruskan. VM dapat meneruskan lalu lintas apakah memiliki beberapa antarmuka jaringan, atau satu antarmuka jaringan yang melekat padanya. Meskipun penerusan IP adalah pengaturan Azure, VM juga harus menjalankan aplikasi yang dapat meneruskan lalu lintas, seperti firewall, pengoptimalan WAN, dan aplikasi penyeimbang beban.

Untuk mempelajari cara mengaktifkan atau menonaktifkan penerusan IP, lihat Mengaktifkan atau menonaktifkan penerusan 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

Akses jaringan ke disk VM harus diatur ke "Nonaktifkan akses publik dan aktifkan akses privat"

Disarankan agar Anda mengatur akses jaringan disk VM ke "Nonaktifkan akses publik dan aktifkan akses privat" dan buat titik akhir privat. Untuk mempelajari cara membuat titik akhir privat, lihat Membuat titik akhir privat.

// 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

Aktifkan enkripsi disk dan enkripsi tidak aktif secara default

Ada beberapa jenis enkripsi yang tersedia untuk disk terkelola Anda, termasuk Azure Disk Encryption (ADE), Server-Side Encryption (SSE), dan enkripsi di host.

  • Azure Disk Encryption membantu melindungi dan mengamankan data Anda untuk memenuhi komitmen keamanan dan kepatuhan organisasi Anda.
  • Enkripsi Sisi Server Penyimpanan Azure Disk (juga disebut sebagai enkripsi saat tidak aktif atau enkripsi Azure Storage) secara otomatis mengenkripsi data yang disimpan di disk yang dikelola Azure (disk data dan OS) saat menyimpannya ke Kluster Storage.
  • Enkripsi di host memastikan bahwa data yang disimpan di host mesin virtual yang menghosting mesin virtual dienkripsi saat tidak aktif dan aliran dienkripsi ke kluster Storage.
  • Enkripsi disk rahasia mengikat kunci enkripsi disk ke TPM VM dan membuat konten disk yang dilindungi hanya dapat diakses oleh VM.

Untuk informasi selengkapnya tentang opsi enkripsi disk terkelola, lihat Gambaran umum opsi enkripsi disk terkelola.

// under-development

Jaringan

Server DNS harus dikonfigurasi di tingkat Virtual Network

Konfigurasikan Server DNS di Virtual Network untuk menghindari inkonsistensi resolusi nama di seluruh lingkungan. Untuk informasi selengkapnya tentang resolusi nama untuk sumber daya di jaringan virtual Azure, lihat Resolusi nama untuk VM dan layanan cloud.

// 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

Penyimpanan

Disk bersama hanya boleh diaktifkan di server berkluster

Disk bersama Azure adalah fitur disk terkelola Azure yang memungkinkan Anda melampirkan disk terkelola ke beberapa VM secara bersamaan. Saat Melampirkan disk terkelola ke beberapa VM, Anda dapat menyebarkan aplikasi kluster baru atau memigrasikan aplikasi terkluster yang ada ke Azure. Disk bersama hanya boleh digunakan dalam situasi di mana disk ditetapkan ke lebih dari satu anggota VM kluster.

Untuk mempelajari selengkapnya tentang cara mengaktifkan disk bersama untuk disk terkelola, lihat Mengaktifkan disk bersama.

// 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

Kepatuhan

Pastikan VM Anda mematuhi Kebijakan Azure

Penting untuk menjaga keamanan komputer virtual (VM) Anda untuk aplikasi yang Anda jalankan. Mengamankan VM Anda dapat meliputi satu atau beberapa layanan Azure dan fitur yang mencakup akses yang aman ke VM Anda dan penyimpanan data yang juga aman. Untuk informasi selengkapnya tentang cara menjaga keamanan VM dan aplikasi Anda, lihat Kontrol Kepatuhan Terhadap Peraturan Azure Policy untuk Azure Virtual Machines.

// 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

Pemantauan

Mengaktifkan Wawasan VM

Aktifkan Wawasan VM untuk mendapatkan lebih banyak visibilitas ke dalam kesehatan dan performa komputer virtual Anda. VM Insights memberi Anda informasi tentang performa dan kesehatan VM dan set skala komputer virtual Anda, dengan memantau proses dan dependensi yang sedang berjalan pada sumber daya lain. Wawasan VM dapat membantu memberikan performa dan ketersediaan aplikasi penting yang dapat diprediksi dengan mengidentifikasi hambatan performa dan masalah jaringan. Wawasan juga dapat membantu Anda memahami apakah masalah terkait dengan dependensi lain.

// 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)

Mengonfigurasi pengaturan diagnostik untuk semua sumber daya Azure

Metrik platform dikirim secara otomatis ke Azure Monitor Metrics secara default dan tanpa konfigurasi. Log platform menyediakan informasi diagnostik dan audit terperinci untuk sumber daya Azure dan platform Azure yang bergantung pada dan merupakan salah satu jenis berikut:

  • Log sumber daya yang tidak dikumpulkan hingga dirutekan ke tujuan.
  • Log aktivitas yang ada sendiri tetapi dapat dirutekan ke lokasi lain.

Setiap sumber daya Azure memerlukan pengaturan diagnostiknya sendiri, yang menentukan kriteria berikut:

  • Sumber Jenis metrik dan data log untuk dikirim ke tujuan yang ditentukan dalam pengaturan. Jenis yang tersedia bervariasi menurut jenis sumber daya.
  • Tujuan: Satu tujuan atau lebih untuk pengiriman.

Satu pengaturan diagnostik dapat menentukan tidak lebih dari satu dari masing-masing tujuan. Jika Anda ingin mengirim data ke lebih dari satu jenis tujuan tertentu (misalnya, dua ruang kerja Analitik Log yang berbeda), buat beberapa pengaturan. Setiap sumber daya dapat memiliki hingga 5 pengaturan diagnostik.

Untuk informasi selengkapnya, lihat Pengaturan diagnostik di Azure Monitor.

// 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

Dukungan zona ketersediaan

Zona ketersediaan Azure adalah setidaknya tiga grup pusat data yang terpisah secara fisik dalam setiap wilayah Azure. Pusat data dalam setiap zona dilengkapi dengan infrastruktur daya, pendinginan, dan jaringan independen. Dalam kasus kegagalan zona lokal, zona ketersediaan dirancang sehingga jika satu zona terpengaruh, layanan regional, kapasitas, dan ketersediaan tinggi didukung oleh dua zona yang tersisa.

Kegagalan dapat berkisar dari kegagalan perangkat lunak dan perangkat keras hingga peristiwa seperti gempa bumi, banjir, dan kebakaran. Toleransi terhadap kegagalan dicapai dengan redundansi dan isolasi logis layanan Azure. Untuk informasi selengkapnya tentang zona ketersediaan di Azure, lihat Wilayah dan zona ketersediaan.

Layanan berkemampuan zona ketersediaan Azure dirancang untuk memberikan tingkat keandalan dan fleksibilitas yang tepat. Mereka dapat dikonfigurasi dalam dua cara. Mereka dapat berupa zona redundan,dengan replikasi otomatis di seluruh zona, atau zonal, dengan instans yang disematkan ke zona tertentu. Anda juga dapat menggabungkan pendekatan ini. Untuk informasi selengkapnya tentang arsitektur zonal vs. zona-redundan, lihat Rekomendasi untuk menggunakan zona dan wilayah ketersediaan.

Komputer virtual mendukung zona ketersediaan dengan tiga zona ketersediaan per wilayah Azure yang didukung dan juga zona redundan dan zonal. Untuk informasi selengkapnya, lihat dukungan zona ketersediaan. Pelanggan bertanggung jawab untuk mengonfigurasi dan memigrasikan komputer virtual mereka untuk ketersediaan.

Untuk mempelajari selengkapnya tentang opsi kesiapan zona ketersediaan, lihat:

Prasyarat

  • SKU komputer virtual Anda harus tersedia di seluruh zona untuk wilayah Anda. Untuk meninjau wilayah mana yang mendukung zona ketersediaan, lihat daftar wilayah yang didukung.

  • SKU VM Anda harus tersedia di seluruh zona di wilayah Anda. Untuk memeriksa ketersediaan SKU VM, gunakan salah satu metode berikut:

Peningkatan SLA

Karena zona ketersediaan secara fisik terpisah dan menyediakan sumber daya, jaringan, dan pendinginan yang berbeda, SLA (Perjanjian tingkat layanan) meningkat. Untuk informasi selengkapnya, lihat SLA untuk Komputer Virtual.

Membuat sumber daya dengan zona ketersediaan diaktifkan

Mulailah dengan membuat komputer virtual (VM) dengan zona ketersediaan diaktifkan dari opsi penyebaran berikut di bawah ini:

Dukungan failover zonal

Anda dapat menyiapkan komputer virtual untuk melakukan failover ke zona lain menggunakan layanan Site Recovery. Untuk informasi selengkapnya, lihat Site Recovery.

Toleransi kegagalan

Komputer virtual dapat melakukan failover ke server lain dalam kluster, dengan sistem operasi VM dimulai ulang di server baru. Anda harus merujuk ke proses failover untuk pemulihan bencana, mengumpulkan komputer virtual dalam perencanaan pemulihan, dan menjalankan latihan pemulihan bencana untuk memastikan solusi toleransi kesalahan mereka berhasil.

Untuk informasi selengkapnya, lihat proses pemulihan situs.

Pengalaman zona tidak berfungsi

Selama pemadaman di seluruh zona, Anda harus mengharapkan penurunan performa singkat sampai layanan komputer virtual menyeimbangkan kembali kapasitas yang mendasar untuk menyesuaikan dengan zona yang sehat. Penyembuhan mandiri tidak tergantung pada pemulihan zona; diharapkan bahwa status pemulihan mandiri layanan yang dikelola Microsoft mengkompensasi zona yang hilang, menggunakan kapasitas dari zona lain.

Anda juga harus mempersiapkan kemungkinan bahwa ada pemadaman di seluruh wilayah. Jika ada gangguan layanan untuk seluruh wilayah, salinan data Anda yang berlebihan secara lokal untuk sementara tidak akan tersedia. Jika replikasi geografis diaktifkan, tiga salinan lain dari blob dan tabel Azure Storage Anda disimpan di wilayah yang berbeda. Ketika ada pemadaman regional lengkap atau bencana di mana wilayah utama tidak dapat dipulihkan, Azure memetakan ulang semua entri DNS ke wilayah yang direplikasi secara geografis.

Persiapan dan pemulihan pemadaman zona

Panduan berikut disediakan untuk komputer virtual Azure selama gangguan layanan di seluruh wilayah tempat aplikasi komputer virtual Azure Anda disebarkan:

Desain latensi rendah

Lintas Wilayah (wilayah sekunder), Langganan Silang (pratinjau), dan Lintas Zona (pratinjau) tersedia opsi yang tersedia untuk dipertimbangkan saat merancang solusi komputer virtual latensi rendah. Untuk informasi selengkapnya tentang opsi ini, lihat metode pemulihan yang didukung.

Penting

Dengan memilih keluar dari penyebaran sadar zona, Anda meminta perlindungan dari isolasi kesalahan yang mendasar. Penggunaan SKU yang tidak mendukung zona ketersediaan atau menolak konfigurasi zona ketersediaan memaksa ketergantungan pada sumber daya yang tidak mematuhi penempatan dan pemisahan zona (termasuk dependensi yang mendasar dari sumber daya ini). Sumber daya ini seharusnya tidak diharapkan untuk bertahan dari skenario zona tidak berfungsi. Solusi yang memanfaatkan sumber daya tersebut harus menentukan strategi pemulihan bencana dan mengonfigurasi pemulihan solusi di wilayah lain.

Brankas teknik penyebaran

Saat Anda memilih isolasi zona ketersediaan, Anda harus menggunakan teknik penyebaran yang aman untuk kode aplikasi dan peningkatan aplikasi. Selain mengonfigurasi Azure Site Recovery, dan terapkan salah satu teknik penyebaran aman berikut untuk VM:

Karena Microsoft secara berkala melakukan pembaruan pemeliharaan terencana, mungkin ada instans yang jarang terjadi ketika pembaruan ini memerlukan boot ulang komputer virtual Anda untuk menerapkan pembaruan yang diperlukan ke infrastruktur yang mendasar. Untuk mempelajari lebih lanjut, lihat pertimbangan ketersediaan selama pemeliharaan terjadwal.

Sebelum memutakhirkan kumpulan simpul berikutnya di zona lain, Anda harus melakukan tugas berikut:

Dukungan bermigrasi ke zona ketersediaan

Untuk mempelajari cara memigrasikan VM ke dukungan zona ketersediaan, lihat Memigrasikan Virtual Machines dan Virtual Machine Scale Sets ke dukungan zona ketersediaan.

Pemulihan bencana lintas wilayah dan kelangsungan bisnis

Pemulihan bencana (DR) adalah tentang pemulihan dari peristiwa berdampak tinggi, seperti bencana alam atau penyebaran gagal yang mengakibatkan waktu henti dan kehilangan data. Terlepas dari penyebabnya, obat terbaik untuk bencana adalah rencana DR yang terdefinisi dan teruji dengan baik dan desain aplikasi yang secara aktif mendukung DR. Sebelum Anda mulai berpikir tentang membuat rencana pemulihan bencana Anda, lihat Rekomendasi untuk merancang strategi pemulihan bencana.

Ketika datang ke DR, Microsoft menggunakan model tanggung jawab bersama. Dalam model tanggung jawab bersama, Microsoft memastikan bahwa infrastruktur dasar dan layanan platform tersedia. Pada saat yang sama, banyak layanan Azure tidak secara otomatis mereplikasi data atau mundur dari wilayah yang gagal untuk mereplikasi silang ke wilayah lain yang diaktifkan. Untuk layanan tersebut, Anda bertanggung jawab untuk menyiapkan rencana pemulihan bencana yang berfungsi untuk beban kerja Anda. Sebagian besar layanan yang berjalan pada penawaran platform as a service (PaaS) Azure menyediakan fitur dan panduan untuk mendukung DR dan Anda dapat menggunakan fitur khusus layanan untuk mendukung pemulihan cepat untuk membantu mengembangkan rencana DR Anda.

Anda dapat menggunakan pemulihan Lintas Wilayah untuk memulihkan Azure VM melalui wilayah yang dipasangkan. Dengan pemulihan Lintas Wilayah, Anda dapat memulihkan semua Azure VM untuk titik pemulihan yang dipilih jika pencadangan dilakukan di wilayah sekunder. Untuk informasi selengkapnya tentang pemulihan Lintas Wilayah, lihat entri baris tabel Lintas Wilayah di opsi pemulihan kami.

Pemulihan bencana dalam geografi multi-wilayah

Dalam kasus gangguan layanan di seluruh wilayah, Microsoft bekerja dengan rajin untuk memulihkan layanan komputer virtual. Namun, Anda masih harus mengandalkan strategi pencadangan khusus aplikasi lainnya untuk mencapai tingkat ketersediaan tertinggi. Untuk informasi selengkapnya, lihat bagian tentang Strategi data untuk pemulihan bencana.

Deteksi, pemberitahuan, dan manajemen pemadaman

Infrastruktur perangkat keras atau fisik untuk komputer virtual mungkin gagal secara tak terduga. Kegagalan tak terduga dapat mencakup kegagalan jaringan lokal, kegagalan disk lokal, atau kegagalan tingkat rak lainnya. Saat terdeteksi, platform Azure secara otomatis memigrasi (menyembuhkan) komputer virtual Anda ke komputer fisik yang sehat di pusat data yang sama. Selama prosedur penyembuhan, komputer virtual mengalami waktu henti (reboot) dan dalam beberapa kasus kehilangan drive sementara. OS dan disk data yang terpasang selalu disimpan.

Untuk informasi lebih rinci tentang gangguan layanan komputer virtual, lihat panduan pemulihan bencana.

Menyiapkan pemulihan bencana dan deteksi pemadaman

Saat menyiapkan pemulihan bencana untuk komputer virtual, pahami apa yang disediakan Azure Site Recovery. Aktifkan pemulihan bencana untuk komputer virtual dengan metode di bawah ini:

Pemulihan bencana dalam geografi wilayah tunggal

Dengan penyiapan pemulihan bencana, Azure VM terus mereplikasi ke wilayah target yang berbeda. Jika pemadaman terjadi, Anda bisa melakukan fail over VM ke wilayah sekunder, dan mengaksesnya dari sana.

Saat Anda mereplikasi VM Azure menggunakan Site Recovery, semua disk VM terus direplikasi ke wilayah target secara asinkronis. Titik pemulihan dibuat setiap beberapa menit, yang memberi Anda Tujuan Titik Pemulihan (RPO) dalam urutan menit. Anda dapat melakukan latihan pemulihan bencana sebanyak yang Anda inginkan, tanpa mempengaruhi aplikasi produksi atau replikasi yang sedang berlangsung. Untuk informasi selengkapnya, lihat Jalankan latihan pemulihan bencana ke Microsoft Azure.

Untuk informasi selengkapnya, lihat Komponen arsitektur azure VM dan pemasangan wilayah.

Kapasitas dan ketahanan pemulihan bencana proaktif

Microsoft dan pelanggannya beroperasi di bawah Model Tanggung Jawab Bersama. Tanggung jawab bersama berarti bahwa untuk DR yang mendukung pelanggan (layanan yang bertanggung jawab pelanggan), Anda harus menangani DR untuk layanan apa pun yang mereka sebarkan dan kontrol. Untuk memastikan bahwa pemulihan proaktif, Anda harus selalu melakukan pra-penyebaran sekunder karena tidak ada jaminan kapasitas pada saat dampak bagi mereka yang belum melakukan pra-alokasi.

Untuk menyebarkan komputer virtual, Anda dapat menggunakan mode orkestrasi fleksibel pada Virtual Machine Scale Sets. Semua ukuran VM dapat digunakan dengan mode orkestrasi fleksibel. Mode orkestrasi fleksibel juga menawarkan jaminan ketersediaan tinggi (hingga 1000 VM) dengan menyebarkan VM di seluruh domain kesalahan baik dalam suatu wilayah atau dalam zona ketersediaan.

Langkah berikutnya