《Windows Azure Platform 系列文章目錄》
Update: 2016-11-3,如果大家在使用Linux VM,使用FIO進行IOPS測試的時候,請使用以下命令:
sudo fio -filename=/data2/testfile -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=16k -size=10G -numjobs=20 -runtime=60 -group_reporting -name=mytest
注意ioengine使用libaio,不要使用-ioengine=psync,因為性能差別很大。
本文介紹的是國內由世紀互聯運維的Azure China
熟悉Azure平台的讀者都了解,Azure VM每一塊Disk的IOPS為500。我們以D系列的VM為例,IOPS信息如下:
虛擬機類型 | CPU | RAM | 臨時磁盤 | 外掛磁盤數 | IOPS |
D1 | 1 | 3.5GB | 50GB | 2 | 2 * 500 |
D2 | 2 | 7GB | 100GB | 4 | 4 * 500 |
D3 | 4 | 14GB | 200GB | 8 | 8 * 500 |
D4 | 8 | 28GB | 400GB | 16 | 16 * 500 |
D11 | 2 | 14GB | 100GB | 4 | 4 * 500 |
D12 | 4 | 28GB | 200GB | 8 | 8 * 500 |
D13 | 8 | 56GB | 400GB | 16 | 16 *500 |
D14 | 16 | 112GB | 800GB | 32 | 32 * 500 |
這里要特別注意:用戶在創建Azure VM的時候,不要把所有的虛擬機磁盤都保存在同一個存儲賬號里。因為一個存儲賬號是有IOPS上限20000的。
以筆者個人經驗來說,我建議每3台虛擬機使用同一個存儲賬號,第4台虛擬機使用另外一個存儲賬號。
當我們需要更高的IOPS的時候,比如某些場景需要更高性能的磁盤讀寫,這時候就需要用到高級存儲Premium Storage。
傳統的標准存儲(Standard Storage)使用的是普通硬盤(Hard Disk Drives, HDD),高級存儲(Premium Storage)使用的固態硬盤(Solid State Drives, SSD)
使用高級存儲(Premium Storage)可以提高IOPS和吞吐量,降低延時。每個VM可以配置最多32TB的持久化存儲,每個VM可以超過50000的IOPS,讀取操作的延遲少於1毫秒。
這里再特別強調一下,Azure D系列VM,本地臨時磁盤是SSD的。請注意是臨時存儲,這個存儲在Windows里顯示為D盤,在Linux系統里是/dev/sdb1 。優點: IOPS高;缺點:非持久化存儲,文件會有丟失的風險,不能保留重要的文件。D系列VM的其他磁盤都是普通SAS盤,每塊盤MAX IOPS為500。
而我們在這里介紹的Premier Storage和DS VM,對於DS VM來說,他們的磁盤是保存在Premier Storage里的。本地系統盤和數據盤都是SSD,提供持久化保存,文件不會有丟失的風險。(但是對於DS系列來說,也會有臨時盤。這個存儲在Windows里顯示為D盤,在Linux系統里是/dev/sdb1 ,這是臨時盤,數據會有丟失的風險)。
在開始本章內容之前,我們先介紹一下高級存儲(Premium Storage)的注意事項:
1.Premium Storage目前在Azure China只能通過PowerShell創建。
2.Premium Storage支持的類庫:Storage REST API version 2014-02-14 or later; Service Management REST API version 2014-10-01 or later; andAzure PowerShell version 0.8.10 or later.
3.Premium Storage目前只能在中國東部地區使用
Update 2016-09-22,Premium Storage目前可以在中國東部和中國北部地區使用
4.Premium Storage目前只支持Page Blob,只能被Azure DS系列的VM使用
5.Premium Storage只支持本地冗余(Local Redundant Storage, LRS),即同一個數據中心三分冗余。在使用Premium Storage的時候想實現異地冗余,請參考:使用高級存儲時的快照與復制 Blob
6.非DS系列的VM(A系列VM,D系列VM)是無法使用Premium Storage。
只有DS系列的VM才可以使用Premium Storage。DS系列的VM可以同時使用Premium Storage和標准存儲(Standard Storage)
7.Premium Storage無法映射到自定義域名
8.Premium Storage無法使用存儲分析進行監控。如果需要監控,請使用基於操作系統的工具,如Windows 性能監視器(對於 Windows VM)和 IOSTAT(對於 Linux VM)。
重要說明:
1.單個Premium Storage Account最大容量為32TB。如果需要使用40TB的Premium Storage,請使用兩個Premium Storage Account。
2.默認情況下,附加到DS VM的Premium Storage緩存都設置為"讀寫"。為使應用程序的 I/O 達到最佳性能,建議使用此配置設置。對於頻繁寫入或只寫的磁盤(例如 SQL Server 日志文件),請關閉磁盤緩存以獲得更佳的應用程序性能。
3.Azure限制了DS VM到Premium Storage的網絡吞吐量。例如,STANDARD_DS1 VM 為高級存儲磁盤通信提供每秒 32 MB 的專用吞吐量。這意味着,附加到此 VM 的 P10 高級存儲磁盤最高只能達到每秒 32 MB,而不能像 P10 磁盤那樣最高達到每秒 100 MB。同樣,STANDARD_DS13 VM 可跨所有磁盤最高達到每秒 256 MB。目前,DS 系列上的最大 VM 是 STANDARD_DS14,它可以跨所有磁盤最高提供每秒 512 MB。根據磁盤通信中的讀寫 IO 混合形式,你可能會獲得高於此值的吞吐量。
請注意,這些限制只適用於磁盤通信。VM 網絡通信可以使用單獨的吞吐量,這不同於高級存儲磁盤的專用帶寬。下表列出了附加到 VM 的所有磁盤上的每個 DS 系列 VM 的當前最大 IOPS 和吞吐量(帶寬)值:
VM大小 | CPU | 最大IOPS | 最大磁盤吞吐量 |
STANDARD_DS1 | 1 | 3,200 | 32MB/S |
STANDARD_DS2 | 2 | 6,400 | 64MB/S |
STANDARD_DS3 | 4 | 12,800 | 128MB/S |
STANDARD_DS4 | 8 | 25,600 | 256MB/S |
STANDARD_DS11 | 2 | 6,400 | 64MB/S |
STANDARD_DS12 | 4 | 12,800 | 128MB/S |
STANDARD_DS13 | 8 | 25,600 | 256MB/S |
STANDARD_DS14 | 16 | 50,000 | 512MB/S |
4.DS系列的VM可以同時使用Premium Storage和標准存儲(Standard Storage)
5.可以使用Storage Space,設置軟RAID,來提高磁盤的IOPS。具體請參考:
[New Portal]Windows Azure Virtual Machine (23) 使用Storage Space,提高Virtual Machine磁盤的IOPS
6.建議在系統盤+數據盤的情況下,如果系統盤只是用於引導,請考慮使用標准存儲(Standard Storage),這樣可以節省成本。數據盤可以使用Premium Storage,因為性能更好。
如果系統盤和數據盤有數據傳輸,系統盤可以使用Premium Storage以獲得更好的性能。
高級存儲性能:
當你為某個高級存儲帳戶設置磁盤時,其每秒的輸入/輸出操作次數 (IOPS) 和吞吐量(帶寬)取決於磁盤大小。目前有三種類型的高級存儲磁盤:P10、P20 和 P30。每種類型各有特定的 IOPS 和吞吐量限制,如下表所示:
Premium Storage | P10 | P20 | P30 |
磁盤大小 | 128GB | 512GB | 1024GB |
每個磁盤的IOPS | 500 | 2300 | 5000 |
每個磁盤的吞吐量 | 100MB/S | 150MB/S | 200MB/S |
Azure 會將磁盤大小映射(向上舍入)至表中指定的最接近高級存儲磁盤選項。例如,大小為 100 GB 的磁盤會分類為 P10 選項,每秒最多可執行 500 個 IO 單位,每秒吞吐量可達 100 MB。同樣地,大小為 400 GB 的磁盤會分類為 P20 選項,每秒最多可執行 2300 個 IO 單位,每秒吞吐量可達 150 MB。
輸入/輸出 (I/O) 單位大小為 256 KB。如果要傳送的數據少於 256 KB,會視為單個 I/O 單位。較大的 I/O 大小則會視為大小是 256 KB 的多個 I/O。例如,1100 KB 的 I/O 會視為五個 I/O 單位。
吞吐量限制包含磁盤的讀取和寫入。例如,P10 磁盤的讀取和寫入總和應小於或等於每秒 100 MB。同樣地,單個 P10 磁盤可有每秒 100 MB 的讀取或每秒 100 MB 的寫入吞吐量,或是每秒 60 MB 的讀取和每秒 40 MB 的寫入吞吐量。
當你在 Azure 創建磁盤后,請根據應用程序的容量、性能、縮放性和高峰負載需求來選擇最適合的高級存儲磁盤產品。
下表描述高級存儲帳戶的縮放性目標:
總帳戶容量 | 本地冗余存儲帳戶的總吞吐量 |
|
入站 + 出站最高每秒 50 Gbps |
- 入站是指發送到存儲帳戶的所有數據(請求)。
- 出站是指從存儲帳戶接收的所有數據(響應)。
高級存儲的計費方式:
1.Premium Storage按照磁盤分配的最大容量計費。例如:你申請了1TB的Premium Storage,實際只用了1GB,則Azure會按照Premium Storage的最大容量,即1TB計費。
2.DS VM還會按照分鍾計費。DS系列VM的價格和D系列VM的價格相同
=============================分隔符===============================
接下來介紹使用高級存儲Premium Storage和DS VM,關鍵步驟如下:
1.創建Premium Storage
2.創建DS VM
1.首先我們以管理員身份,運行Azure PowerShell
2.選擇當前的訂閱:
Select-AzureSubscription '[SubscriptionName]' –Current
3.在中國東部創建Premium Storage
New-AzureStorageAccount -StorageAccountName "yourpremiumaccount" -Location "China East" -Type "Premium_LRS"
4.創建新的DS VM,VM Size為DS2
$storageAccount = "yourpremiumaccount" $adminName = "youradmin" $adminPassword = "yourpassword" $vmName ="yourVM" $location = "China East" $imageName = "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-R2-201409.01-en.us-127GB.vhd" $vmSize ="Standard_DS2" $OSDiskPath = "https://" + $storageAccount + ".blob.core.chinacloudapi.cn/vhds/" + $vmName + "_OS_PIO.vhd" $vm = New-AzureVMConfig -Name $vmName -ImageName $imageName -InstanceSize $vmSize -MediaLocation $OSDiskPath Add-AzureProvisioningConfig -Windows -VM $vm -AdminUsername $adminName -Password $adminPassword New-AzureVM -ServiceName $vmName -VMs $VM -Location $location
創建虛擬機,並加入虛擬網絡
$storageAccount = "yourpremiumstorage" $adminName = "yourusername" $adminPassword = "yourpassword" $vmName = "yourvmname" $location = "China East" $imageName = "f1179221e23b4dbb89e39d70e5bc9e72__OpenLogic-CentOS-67-20160415" $vmSize = "Standard_DS13" $vnet = "yourvnetname" $ipaddr= "privateip" $subnet = "subnetname" $csname = "yourcloudservicename" New-AzureService -ServiceName $csname -Location $location -Label demo # Create the VM $OSDiskPath = "https://" + $storageAccount + ".blob.core.chinacloudapi.cn/vhds/" + $vmName + "_OS_PIO.vhd" $vm = New-AzureVMConfig -Name $vmName -ImageName $imageName -InstanceSize $vmSize -MediaLocation $OSDiskPath Add-AzureProvisioningConfig -VM $vm -Linux -LinuxUser $adminName -Password $adminPassword Set-AzureSubnet -SubnetNames $subnet -VM $vm Set-AzureStaticVNetIP -IPAddress $ipaddr -VM $vm New-AzureVM -ServiceName $csname -VMs $VM -VNetName $vnet
5.在創建的DS VM上掛載新的數據磁盤:
$storageAccount = "yourpremiumaccount" $vmName ="yourVM" $vm = Get-AzureVM -ServiceName $vmName -Name $vmName $LunNo = 1 $path = "http://" + $storageAccount + ".blob.core.chinacloudapi.cn/vhds/" + "myDataDisk_" + $LunNo + "_PIO.vhd" $label = "Disk " + $LunNo Add-AzureDataDisk -CreateNew -MediaLocation $path -DiskSizeInGB 128 -DiskLabel $label -LUN $LunNo -HostCaching ReadOnly -VM $vm | Update-AzureVm
修改DS VM Size
1.筆者發現創建成功的Azure DS VM,如果想修改VM Size是沒有配置頁面的。如下圖:
2.如果我們想修改VM Size的話,可以以管理員身份,運行以下命令:
#在彈出的輸入框,輸入用戶名和密碼 Add-AzureAccount -Environment AzureChinaCloud #設置當前訂閱 Select-AzureSubscription -SubscriptionName [SubscriptionName] –Current #修改VM Size Get-AzureVM –ServiceName '[CloudServiceName]' –Name '[VMName]' | Set-AzureVMSize '[VMSize]' | Update-AzureVM #我們以DB-CS-A為例,設置大小為Standard_DS4,該命令為 Get-AzureVM –ServiceName 'uladvdb' –Name 'DB-CS-A' | Set-AzureVMSize 'Standard_DS4' | Update-AzureVM #注意,運行上述命令修改VM Size后,該VM會重啟。請確認把虛擬機一台一台重啟,不要同時重啟造成服務宕機
上面聊完了技術問題,現在聊聊非技術問題
1.Azure 高級存儲是怎么計算費用的?
首先我們看一看Azure官方提供的高級存儲價格:
http://www.windowsazure.cn/home/features/storage/#price
磁盤類型 | P10 | P20 | P30 |
磁盤大小 | 128GB | 512GB | 1024GB |
每月價格 | 470 | 1750 | 3230 |
每個磁盤的IOP | 500 | 2300 | 5000 |
每個磁盤的吞吐量 | 100MB/S | 150MB/S | 200MB/S |
我們知道,Azure DS虛擬機在創建的時候,默認情況下Windows OS盤的大小為127GB,Linux OS盤的大小為30GB。
參照上面的表,我們可以發現Windows OS 127GB和Linux OS 30GB,都小於P10的磁盤大小128GB。則Windows OS 127GB和Linux OS 30GB都是按照P10收費的。
任何高級存儲的磁盤大小,小於等於128GB的,都是按照P10收費。
任何高級存儲的磁盤大小,大於128GB,但是小於等於512GB,都是按照P20收費的。
任何高級存儲的磁盤大小,大於512GB,但是小於等於1024GB,都是按照P30收費的。
好了,再舉一個復雜的例子。假設我要130GB容量的磁盤,應該如何收費?
1.如果是單塊磁盤是130GB,那磁盤大小是大於128GB,但是小於等於512GB,都是按照P20收費的。每月費用=1750元/月。
2.如果是2塊磁盤,總容量是130GB。那我可以這樣分配,5GB+125GB=130GB。這2塊磁盤大小都小於等於128GB,都是按照P10收費的。每月費用=470*2=940元/月
所以規划好高級存儲的磁盤容量,可以幫我們顯著的節省成本。
2.Azure高級寸尺是怎么收取費用的?
Azure高級存儲是按照磁盤的最大容量收費的。
在標准存儲(Standard Storage)里,我們創建的磁盤VHD (A系列的虛擬機和D系列的虛擬機),是按照磁盤實際存儲數據的容量來收費的。比如我分配的磁盤大小是1TB,但是實際存儲容量為1GB,則普通存儲是按照1GB的實際存儲容量來收費的。
在高級存儲(Premium Storage)里,我們創建的磁盤VHD (DS系列的虛擬機),是按照整個VHD分配的總容量大小來收費的。比如我們分配的磁盤大小是1TB,但是實際存儲容量為1GB,則高級存儲是按照1TB的總容量,及P30的整體費用來收費的。
Update 2016-04-06,筆者拿了一台DS13的VM,掛載1023GB (P30)磁盤,使用IOMeter進行測試:
先設置Outstanding I/Os,為32。如下圖:
然后設置4K,100% Read
IOMeters讀的結果:
可以看到上圖中,P30 MAX IOPS為5000左右
參考資料:
https://azure.microsoft.com/en-us/documentation/articles/storage-premium-storage-preview-portal/
http://www.windowsazure.cn/documentation/articles/storage-premium-storage-preview-portal/?fb=001