启用写入加速器

应用到: ✔️ Linux 虚拟机 ✔️ Windows 虚拟机 ✔️ 灵活规模集 ✔️ 统一规模集

写入加速器是高级 SSD 托管磁盘上的 M 系列虚拟机(VM)的磁盘功能。 名称指出,功能的目的是改进针对高级 SSD 的写入的 I/O 延迟。 写入加速器非常适合需要更新日志文件,并以高性能方式将现代数据库保存到磁盘的情况。

通常公有云中的 M 系列 VM 可提供写入加速器。

先决条件

计划使用写入加速器

应该对包含事务日志或 DBMS 重做日志的卷使用写入加速器。 不应对 DBMS 数据卷使用写入加速器,因为此功能针对日志磁盘进行了优化。

重要

对 VM 的操作系统磁盘启用写入加速器会重新启动该 VM。

若要针对不属于基于多个磁盘构建的,且使用 Windows 磁盘或卷管理器、Windows 存储空间、Windows 横向扩展文件服务器 (SOFS)、Linux LVM 或 MDADM 的现有 Azure 磁盘启用写入加速器,需要关闭访问该 Azure 磁盘的工作负荷。 必须关闭使用 Azure 磁盘的数据库应用程序。

若要为现有卷启用或禁用写入加速器,该卷由多个 Azure 高级 SSD 构建,并通过 Windows 磁盘或卷管理器、Windows 存储空间、Windows 横向扩展文件服务器(SOFS)、Linux LVM 或 MDADM 进行条带化,必须在单独的步骤中为构建此卷的所有磁盘启用或禁用写入加速器。 在此类配置中启用或禁用写入加速器之前,关闭 VM。

对于 SAP 相关的 VM 配置,应该不需要为 OS 磁盘启用写入加速器。

写入加速器限制

对 Azure 磁盘/VHD 使用写入加速器时,需遵循以下限制:

  • 将磁盘缓存设置为 None 或 ReadOnly设置 。 不支持其他缓存模式。
  • 目前只有已启用写入加速器的数据磁盘支持快照,OS 磁盘不支持快照。 在备份期间,Azure 备份服务会自动备份并保护已附加到 VM 且已启用写入加速器的数据磁盘。
  • 仅较小的 I/O (<=64 KiB) 大小会采用加速路径。 在以下工作负载情形下,I/O 写入到磁盘的更改不会采用加速路径:数据大容量加载或者数据在持久保存到存储之前,不同 DBMS 的事务日志缓冲区已较大程度上填满。

每个 VM 都有 Azure 高级 SSD 的限制,写入加速器可以支持这些 SSD。 当前限制为:

虚拟机产品编号 写入加速器磁盘数 每个 VM 的写入加速器磁盘 IOPS
M416ms_v2、M416s_8_v2、M416s_v2 16 20000
M208ms_v2、M208s_v2 8 10000
M192ids_v2、M192idms_v2、M192is_v2、M192ims_v2、 16 20000
M128ms、M128s、M128ds_v2、M128dms_v2、M128s_v2、M128ms_v2 16 20000
M64ms、M64ls、M64s、M64ds_v2、M64dms_v2、M64s_v2、M64ms_v2 8 10000
M32ms、M32ls、M32ts、M32s、M32dms_v2、M32ms_v2 4 五千
M16ms、M16s 2 2500
M8ms、M8s 1 1250

IOPS 限制是每个 VM,而不是每个磁盘。 对于每个 VM,所有写入加速器磁盘具有相同的 IOPS 限制。 附加的磁盘不能超过 VM 的写入加速器 IOPS 限制。 例如,即使附加的磁盘可以达到 30,000 IOPS,对于 M416ms_v2,系统也不允许这些磁盘超过 20,000 IOPS。

使用 Azure PowerShell 启用写入加速器

版本 5.5.0 中的 Azure PowerShell 模块包括对相关 cmdlet 的更改,以启用或禁用特定 Azure 高级 SSD 的写入加速器。 为了启用或部署写入加速器支持的磁盘,以下 PowerShell 命令已发生更改,并已扩展为接受写入加速器的参数。

已将新的开关参数 -WriteAccelerator 添加到以下 cmdlet:

注释

如果在使用灵活业务流程模式的虚拟机规模集上启用写入加速器,请在每个单独的实例上启用它。

不指定该参数会将属性设置为 false,并且会部署不受写入加速器支持的磁盘。

已将新的开关参数 -OsDiskWriteAccelerator 添加到以下 cmdlet:

默认情况下,不指定该参数会将属性设置为 false,并且会返回不使用写入加速器的磁盘。

已将新的可选布尔参数(不可为 null)-OsDiskWriteAccelerator 添加到以下 cmdlet:

指定 $true 或 $false 可以控制磁盘对 Azure 写入加速器的支持。

示例命令如下所示:

New-AzVMConfig | Set-AzVMOsDisk | Add-AzVMDataDisk -Name "datadisk1" | Add-AzVMDataDisk -Name "logdisk1" -WriteAccelerator | New-AzVM

Get-AzVM | Update-AzVM -OsDiskWriteAccelerator $true

New-AzVmssConfig | Set-AzVmssStorageProfile -OsDiskWriteAccelerator | Add-AzVmssDataDisk -Name "datadisk1" -WriteAccelerator:$false | Add-AzVmssDataDisk -Name "logdisk1" -WriteAccelerator | New-AzVmss

Get-AzVmss | Update-AzVmss -OsDiskWriteAccelerator:$false

以下部分了演示了两个主要场景的脚本编写方式。

使用 PowerShell 通过写入加速器添加新磁盘

可以使用此脚本将新磁盘添加到 VM。 使用此脚本创建的磁盘将使用写入加速器。

将 myVM、myWAVMs、log001、磁盘大小和磁盘的 LunID 替换为适用于特定部署的值。

# Specify your VM Name
$vmName="myVM"
#Specify your Resource Group
$rgName = "myWAVMs"
#data disk name
$datadiskname = "log001"
#LUN Id
$lunid=8
#size
$size=1023
#Pulls the VM info for later
$vm=Get-AzVM -ResourceGroupName $rgname -Name $vmname
#add a new VM data disk
Add-AzVMDataDisk -CreateOption empty -DiskSizeInGB $size -Name $vmname-$datadiskname -VM $vm -Caching None -WriteAccelerator:$true -lun $lunid
#Updates the VM with the disk config - does not require a reboot
Update-AzVM -ResourceGroupName $rgname -VM $vm

使用 PowerShell 在现有Azure磁盘上启用写入加速器

可以使用以下脚本在现有磁盘上启用写入加速器。 将 myVM、myWAVMs 和 test-log001 替换为适用于特定部署的值。 该脚本会将写入加速器添加到 $newstatus 值设置为“$true”的现有磁盘。 使用 $false 值会在给定的磁盘上禁用写入加速器。

#Specify your VM Name
$vmName="myVM"
#Specify your Resource Group
$rgName = "myWAVMs"
#data disk name
$datadiskname = "test-log001"
#new Write Accelerator status ($true for enabled, $false for disabled)
$newstatus = $true
#Pulls the VM info for later
$vm=Get-AzVM -ResourceGroupName $rgname -Name $vmname
#add a new VM data disk
Set-AzVMDataDisk -VM $vm -Name $datadiskname -Caching None -WriteAccelerator:$newstatus
#Updates the VM with the disk config - does not require a reboot
Update-AzVM -ResourceGroupName $rgname -VM $vm

注释

执行上述脚本会分离指定的磁盘,针对该磁盘启用写入加速器,然后重新附加该磁盘

在 Azure 门户中启用写入加速器

可以通过指定磁盘缓存设置的门户启用写入加速器:

“Azure门户磁盘”页的屏幕截图,其中显示了数据磁盘主机缓存选项设置为“只读”和“写入加速器”和“无”和“写入加速器”。

使用Azure CLI启用写入加速器

可以使用 Azure CLI 来启用写入加速器。

为以下示例设置资源组、VM、磁盘和磁盘 LUN 值:

rgName="myResourceGroup"
vmName="myVM"
diskName="myDataDisk"
diskLun=1
  • 若要在现有附加磁盘上启用写入加速器,请使用 az vm update。 该值 --write-accelerator 将磁盘 LUN 映射到 true:
az vm update \
  --resource-group $rgName \
  --name $vmName \
  --write-accelerator "${diskLun}=true"
  • 若要附加启用了写入加速器的现有磁盘,请使用 az vm disk attach:
az vm disk attach \
  --resource-group $rgName \
  --vm-name $vmName \
  --name $diskName \
  --enable-write-accelerator
  • 若要在附加磁盘上禁用写入加速器,请将其 LUN 设置为 false:
az vm update \
  --resource-group $rgName \
  --name $vmName \
  --write-accelerator "${diskLun}=false"

使用 REST API 启用写入加速器

若要通过 Azure REST API 进行部署,需要安装 Azure armclient。

安装 armclient

若要运行 armclient,需要通过 Chocolatey 安装它。 可以通过 cmd.exe 或 PowerShell 来安装它。 为这些命令使用提升的权限(“以管理员身份运行”)。

使用 cmd.exe运行以下命令:

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

使用 PowerShell 运行以下命令:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

现在,在 cmd.exe 或 PowerShell 中使用以下命令安装 armclient:

choco install armclient

获取当前的 VM 配置

若要更改磁盘配置的属性,请先检索 JSON 文件中的当前 VM 配置。 将 subscription-ID、resource-group、vm-name 和 filename.json 替换为自定义值。

armclient GET /subscriptions/subscription-ID/resourceGroups/resource-group/providers/Microsoft.Compute/virtualMachines/vm-name?api-version=2017-12-01 > filename.json

输出可能如下所示:

{
  "properties": {
    "vmId": "2444c93e-f8bb-4a20-af2d-1658d9dbbbcb",
    "hardwareProfile": {
      "vmSize": "Standard_M64s"
    },
    "storageProfile": {
      "imageReference": {
        "publisher": "SUSE",
        "offer": "SLES-SAP",
        "sku": "12-SP3",
        "version": "latest"
      },
      "osDisk": {
        "osType": "Linux",
        "name": "mylittlesap_OsDisk_1_754a1b8bb390468e9b4c429b81cc5f5a",
        "createOption": "FromImage",
        "caching": "ReadWrite",
        "managedDisk": {
          "storageAccountType": "Premium_LRS",
          "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/mylittlesap_OsDisk_1_754a1b8bb390468e9b4c429b81cc5f5a"
        },
        "diskSizeGB": 30
      },
      "dataDisks": [
        {
          "lun": 0,
          "name": "data1",
          "createOption": "Attach",
          "caching": "None",
          "managedDisk": {
            "storageAccountType": "Premium_LRS",
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/data1"
          },
          "diskSizeGB": 1023
        },
        {
          "lun": 1,
          "name": "log1",
          "createOption": "Attach",
          "caching": "None",
          "managedDisk": {
            "storageAccountType": "Premium_LRS",
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/data2"
          },
          "diskSizeGB": 1023
        }
      ]
    },
    "osProfile": {
      "computerName": "mylittlesapVM",
      "adminUsername": "pl",
      "linuxConfiguration": {
        "disablePasswordAuthentication": false
      },
      "secrets": []
    },
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Network/networkInterfaces/mylittlesap518"
        }
      ]
    },
    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": true,
        "storageUri": "https://mylittlesapdiag895.blob.core.chinacloudapi.cn/"
      }
    },
    "provisioningState": "Succeeded"
  },
  "type": "Microsoft.Compute/virtualMachines",
  "location": "chinanorth2",
  "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/virtualMachines/mylittlesapVM",
  "name": "mylittlesapVM"

在 VM 配置中启用写入加速器

在 filename.json中,找到要更新的数据磁盘。 以下示例将在名为 log1 的磁盘中,于其 caching 属性之后添加 writeAcceleratorEnabled: true。

        {
          "lun": 1,
          "name": "log1",
          "createOption": "Attach",
          "caching": "None",
          "writeAcceleratorEnabled": true,
          "managedDisk": {
            "storageAccountType": "Premium_LRS",
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/data2"
          },
          "diskSizeGB": 1023
        }

应用并验证 VM 配置

将更新的 JSON 文件应用到 VM。 将 resource-group、vm-name、filename.json 和 subscription-ID 替换为你用于检索该配置时所使用的相同值。

armclient PUT /subscriptions/subscription-ID/resourceGroups/resource-group/providers/Microsoft.Compute/virtualMachines/vm-name?api-version=2017-12-01 @filename.json

在响应中,验证目标数据磁盘是否包含 "writeAcceleratorEnabled": true。 以下输出显示了为名为 log1 的磁盘启用了写入加速器。

{
  "properties": {
    "vmId": "2444c93e-f8bb-4a20-af2d-1658d9dbbbcb",
    "hardwareProfile": {
      "vmSize": "Standard_M64s"
    },
    "storageProfile": {
      "imageReference": {
        "publisher": "SUSE",
        "offer": "SLES-SAP",
        "sku": "12-SP3",
        "version": "latest"
      },
      "osDisk": {
        "osType": "Linux",
        "name": "mylittlesap_OsDisk_1_754a1b8bb390468e9b4c429b81cc5f5a",
        "createOption": "FromImage",
        "caching": "ReadWrite",
        "managedDisk": {
          "storageAccountType": "Premium_LRS",
          "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/mylittlesap_OsDisk_1_754a1b8bb390468e9b4c429b81cc5f5a"
        },
        "diskSizeGB": 30
      },
      "dataDisks": [
        {
          "lun": 0,
          "name": "data1",
          "createOption": "Attach",
          "caching": "None",
          "managedDisk": {
            "storageAccountType": "Premium_LRS",
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/data1"
          },
          "diskSizeGB": 1023
        },
        {
          "lun": 1,
          "name": "log1",
          "createOption": "Attach",
          "caching": "None",
          "writeAcceleratorEnabled": true,
          "managedDisk": {
            "storageAccountType": "Premium_LRS",
            "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/disks/data2"
          },
          "diskSizeGB": 1023
        }
      ]
    },
    "osProfile": {
      "computerName": "mylittlesapVM",
      "adminUsername": "pl",
      "linuxConfiguration": {
        "disablePasswordAuthentication": false
      },
      "secrets": []
    },
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Network/networkInterfaces/mylittlesap518"
        }
      ]
    },
    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": true,
        "storageUri": "https://mylittlesapdiag895.blob.core.chinacloudapi.cn/"
      }
    },
    "provisioningState": "Succeeded"
  },
  "type": "Microsoft.Compute/virtualMachines",
  "location": "chinanorth2",
  "id": "/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/mylittlesap/providers/Microsoft.Compute/virtualMachines/mylittlesapVM",
  "name": "mylittlesapVM"

进行这项更改后,写入加速器应会支持该驱动器。