VMware vSphere 5.1 群集深入解析(二十一)- 儲存I/O控制(SIOC)
VMwarevSphere
5.1
ClusteringDeepdive
HA.DRS.StorageDRS.StretchedClusters
DuncanEpping&FrankDenneman
TranslateByTim2009/翻譯:Tim2009
目錄
版權
關於作者
知識點
前言
第一部分vSphere高可用性
第二部分vSphereDRS(分散式資源排程)
第三部分vSphere儲存DRS
第三章儲存I/O控制(SIOC)
第四部分群集架構的擴充套件
第三部分vSphere儲存DRS
第三章儲存I/O控制(SIOC)
當資料儲存群集被建立,I/O度量值開啟,通過儲存DRS,儲存I/O控制也同時開啟。我們覺得用一章來說明儲存I/O控制非常合適,最重要的是,儲存DRS利用儲存I/O控制的某些功能來決定資料儲存的能力,在我們瞭解這些之前,讓我們先討論些基礎知識。
介紹
儲存I/O控制(SIOC)在資源爭用期間,提供一個方法來公平的分配儲存I/O資源,它啟用後,管理員在高度整合的環境中來執行重要的工作流時,虛擬儲存環境沒有自己造成拒絕服務的風險,另外,它幫助阻止其它的情況下的干擾(同一個資料儲存上的一臺虛擬機器能對另一臺虛擬機器造成負面的影響),SIOC利用虛擬機器份額來達到公平分配儲存資源,在SIOC釋出之前,虛擬磁碟的份額被介紹的比較長,但是,SIOC介紹Datastore-Wide計劃,主要的不同是在每個主機級別沒有SIOC計劃,儘管為SIOC計算相當複雜,開啟和配置SIOC是不行的(圖109),SIOC只需要幾步就可以啟用,當儲存DRS使用I/O度量值選項,它將自動啟用,在我們舉例子之前,我們想確認每個人理解了一些關於此塊的基本概念,以及沒有SIOC會造成的影響。
圖109:開啟儲存I/O控制
內部排隊
當和許多我們的客戶討論SIOC,我們注意到有一些基本的概念混淆,關於怎樣實際確認資源在所以的虛擬機器和主機間被公平的分配,這個例子就包括它,但是原理可能沒有那麼明顯,所以我們叫它一個特別的稱呼:排隊節流
在我們解釋怎麼排隊節流工作之前,我們想簡單的解釋下不同的佇列,當客戶端系統初始化I/O,這是為了工作流和佇列能相遇:
客戶裝置驅動佇列深度(LSI=32,PVSCSI=64)
VHBA(hardcode限制LSI=128,PVSVSI=255)
Vmkernel裝置驅動(FC=32,ISCSI=128,NFS=256,本地磁碟=256)
多路徑SAN/陣列佇列(包括埠緩衝區,埠佇列,磁碟佇列等)
這些值得注意的Disk.SchedNumReqOutstanding(DSNRO)沒有提到,正常來說它在Vmkernel裝置驅動後直接提到,但是,當SIOC開啟,DSNRO就不再經常使用,自從SIOC保證了一定程度的公平。
考慮到你設定你為你的HBA設定了64的佇列深度,虛擬機器在資料儲存上產生I/O,如果它只是資料儲存上的單個虛擬機器,增加到64的I/O將立即結束裝置驅動,但是,在大多數的環境中,LUNs被很多虛擬機器共享,在大多數的場景中,這些虛擬機器應該被平等對待,當同一資料儲存上兩個或者更多的虛擬機器產生I/O,DSNRO將踢出它,但是,當Vmkernel檢測到只有一個節流佇列,計數器的閾值就達到了,計數器的名字叫做Disk.SchedQControlVMSwitched,預設設定為6,這意味著當手工I/O節流佇列低於Disk.SchedNumReqOutstanding的值(預設是32)之前,Vmkernel需要檢測6個虛擬機器的交換機,(虛擬機器交換機意味著需要檢測6次,當前I/O不能來自之前虛擬機器的同樣I/O)
節流發生的原因是因為驅動已經產生I/O,Vmkernel不能控制順序,只能想象你有VM-A產生了一些I/O,另一個VM-B剛剛也產生了I/O,VM-A將結束全天執行的大多數全深度佇列,每次VM-B產生I/O,它將通過Vmkernel排程器快速撿起(這是個不同的知識點),並儘快傳送另外一個完成的給驅動,但是它不必要在VM-A64的I/O的佇列之後,因為它已經在佇列中,這些通過VM-B將明顯的新增到I/O延遲經歷中,這是不可取的,通過限制未完成的請求,我們允許Vmkernel快速安排VM-B的I/O到VM-A的I/O流中,儘管為VM-B減少了延遲。
現在,帶來第二部分的宣告:我們是否應該設定Disk.SchedNumReqOutstanding的值和你們的佇列深度一樣麼?OK,在這種情況中,你想你們的I/O過程儘可能快速,沒有任何公平。但是,如果你在單個數據儲存上有最小的工作負載,不想僅僅因為單個的虛擬機器產生了過多的I/O,而招致你不想要的虛擬機器過多延遲。
真的是這樣嗎?不,不完全是,有一些問題依然不能解答:
Disk.SchedNumReqOutstanding的場景中連續I/O會怎樣?
VMkernel如何知道什麼時候停止使用Disk.SchedNumReqOutstanding?
讓我們先處理連續I/O的問題,預設情況下,VMkernel在佇列中的虛擬機器上產生8個連續的命令(由Disk.SchedQuantum控制),當它正常的從其它虛擬機器上呼叫I/O看起來很公平,這樣做是為了保護虛擬機器工作負載的連續狀態,I/O發生的扇區鄰近之前被呼叫的I/O,它的順序比I/O扇區快,—10X是不經常的,當包括快取影響或者當快取對比磁碟尺寸太小。但是,連續需要考慮哪些呢?如果下一次I/O比當前少於2000扇區,I/O考慮連續,這個距離在高階引數Disk.SectorMaxDiff中進行控制。
現在,如果其中一臺虛擬機器變成空閒狀態,你將非常期望你的活動虛擬機器去再次使用全佇列深度,這是Disk.SchedQControlSeqReqs的作用。預設情況下,Disk.SchedQControlSeqReqs被設定為128,意味著當一臺虛擬機器已經產生了128條命令且沒有任何交換,Disk.SchedQControlVMSwitches將再次將它重置為0,活動虛擬機器能再次使用64的全佇列深度。通過之前的例子,想法是這樣的,如果VM-B產生了非常少的I/O(每128從其它虛擬機器中少於1),此時我們將讓VM-B付出高處罰的延遲,推測起來,它不是任何形式的磁碟繫結。
在我們繼續之前,讓我們確信清楚了這些混淆的概念,當SIOC開啟,DSNRO將不適用,SIOC適用公平,它基於發生延遲而不是VM交換數量,換句話說,如果延遲閾值沒有被超過,SIOC不會節流佇列。
當SIOC啟用,它將請求每裝置最大的裝置佇列深度,並設定它們為最大,SIOC試圖設定佇列深度到256。在大多數的場景中,儘管它是設定成32,原因是大多數的維護人員使用了該預設值。這給我們帶來一些設計原則。
基本設計原則
一旦SIOC在爭用期間負責公平申請,確保你的陣列的可用性和諮詢你的儲存供應商,並在合適的事情請他們支援,設定佇列深度最小為64
如果延遲閾值超過了(這個狀態每4秒計算一次),SIOC基於他們的在陣列級別上I/Oslot配額,動態節流主機的佇列,注意當我們談到延遲(等待時間),SIOC考慮裝置延遲,裝置延遲是從所有主機連線的資料儲存上觀測的平均延遲。
SIOC怎樣確定每個虛擬機器和最終每個主機的配額,PAPDA白皮書(討論SIOC研發的學術文章)描述如下:
引用
資源分配通過份額值被指定,它是標記虛擬機器消耗的I/O資源,一個虛擬機器有權去消耗分配的儲存陣列資源,它指定關聯I/O請求對比其他虛擬機器的重要性,I/O共享與主機的是一種簡單的關係,每個虛擬機器共享的全部數量統計為所有的虛擬機器,合適的份額公平的被定義,提供儲存陣列服務給適合他們份額的主機。
問題是,怎樣讓每個主機知道延遲被其它主機觀察到?
通訊原理
SIOC是用的原理類似於HA:資料儲存上的一個共享資料夾,這個共享檔案,iormstats.sf(圖110),通過多個主機同步能夠進入,每個主機定期的為資料儲存上的檔案,寫入它的平均延遲和I/O數量,這些開啟了所有主機讀取該檔案,計算資料儲存的平均延遲,它改變為每個主機基於I/Oslot配額,而是允許計算佇列深度。
圖110:通訊原理
我們意識到這聽起來十分複雜,所有我們嘗試邏輯化,SIOC怎樣工作在下面的部分中我們分場景進行描述。
本地磁碟排程
本地磁碟排程,一些時候被當做SFQ(start-timefairqueuing),它是負責一些事情,但是,正如它的名字所透露的,所有關聯的主機的排程,除此之外標記每個虛擬機器在資源爭用時間公平的共享I/O資源,當IOPS限制被定義,本地磁碟排程還負責限制虛擬機器。
本地磁碟排程影響主機級別的優先順序,針對同一個ESXi主機所有執行的虛擬機器,通過本身,當一定數量的虛擬機器需要比其它虛擬機器高一些優先順序,它有比較大的價值,但它同時也威脅到虛擬機器的平等,當3個虛擬機器擁有平等的份額,接下來的圖表描述了這個場景,但VM1和VM2收到較少的頻寬,因為它們執行不同的主機上。
圖111:本地磁碟排程
Datastore-Wide磁碟排程
Datastore-wide磁碟排程有點類似於本地磁碟排程,它將虛擬機器的排程優先於其它依靠自身磁碟的排程,它通過計算I/Oslot許可權,但只當配置的延遲閾值被超過時。
一個例子將可能描述它是怎樣工作的,接下來的圖片(圖112)描述了延遲閾值被超過,主機被節流的場景。
圖112:Datastore-wide磁碟排程
Datastore-Wide磁碟排程為資料儲存上虛擬機器的每個VMDK檔案統計磁碟份額,在ESXi-01的情況中,它是2000,在ESXi-02的情況中是1000,接下來,datastore-wide磁碟排程將基於主機級別的共享計算I/Oslot配置,它將節流佇列。在這個例子中,每一個虛擬機器被分配了33%的儲存資源,如果你同圖111的場景進行比較,你能理解為什麼建議在所有的資料儲存上開啟SIOC,即使不需要提高優先順序。
基本設計原則
即使虛擬機器不需要比其它虛擬機器更高的優先順序,開啟儲存I/O控制是有利的,它能幫助阻止自身造成的拒絕服務***。
另外一個例子
所有的虛擬機器有平等的份額,這個例子比較公平,但是,不同份額的場景,將使其變得複雜,我們像提供額外的例子來確保每個人理解這個基本的概念,在這個場景中,有3個虛擬機器(圖113),2個虛擬機器(VM2和VM3)被授予了500份額,VM1有1500份額,VM1被分配了60%的可用I/Oslot,VM2和VM3每個被分配了20%,通過加上所有的份額這個計算比較簡單,通過結果可以區分每虛擬機器的份額,在VM1的情況下,計算公式如下:
VM1/(VM1+VM2+VM3)
或者
1500/(1500+500+500)=60%
如展示的,VM1被分配了60%的I/Oslot,VM2和VM3被分配了20%
圖113:SIOC場景2
自動延遲閾值計算
在vSphere5.0中延遲閾值是指定使用者設定的,預設是30毫秒,但是這個時間不適合所有的資料儲存型別,因為SIOC支援多種型別的裝置,一箇中間的閾值被設定,某些裝置如SSD命中自然爭用點早於其它,它請求使用者在指定的資料儲存上配置較低的閾值。但是,手工決定正確的閾值非常困難,為了阻止錯誤的延遲閾值設定,SIOC在vSphere5.1中自動為每個裝置決定了延遲閾值。
自動延遲閾值計算模擬裝置的吞吐量,設定延遲記錄,允許虛擬架構呼叫有利於裝置的全部效能,使用者介面提供控制依據峰值的IOPS的百分比來影響自動計算;使用者介面還提供手動設定延遲的機會。
圖114:配置儲存I/O控制
手工延遲閾值建議
在vSphere5.1中提供新的自動閾值設定,如果有可能的場合,必須要手工設定閾值,它產生的建議為不同型別的磁碟來設定不同的閾值(見表25)
它應該指出,但是,當SIOC用來配合儲存DRS,儲存DRSI/O延遲閾值應該設定得比SIOC延遲閾值低,通過節流佇列深度,SIOC被定位用來阻止短暫的延遲高峰,儲存DRS被定位用來解決失衡和通過遷移工作負載降低資料儲存的平均延遲。SIOC觀察裝置延遲,儲存DRS觀察全部的延遲,包括裝置延遲和kernel延遲。這意味著,當SIOC延遲閾值低於儲存DRSI/O延遲,它將不會對儲存DRS的建議產生影響,因為儲存DRS考慮裝置延遲和kernel延遲,通過本章節解釋的Datastore-wide磁碟排程,延遲不會被消失,它移動到一個不同的層,我們做到了,但是,建議設定儲存DRSI/O延遲值為SIOC的一半,這樣SIOC將遷移延遲峰值和儲存DRS將阻止熱點。
表25:建議延遲閾值
注入
另一個我們沒有接觸的元件是注入,它是做什麼的?它為誰提供服務?注入在vSphere5.0中被介紹過,它是SIOC的一部分來決定資料儲存的效能特性,我們已經在第22章節簡明的接觸了效能特性,基於可用性和類似效能來對資料儲存群集上聚合的資料儲存生成建議,在大多數的環境中,管理員小心的定義它們的儲存的層次,但大多數不能意識到,每個資料儲存上的備份磁碟的數量不同,會造成效能行為上的不同,即使磁碟數量(7VS9)有一點點不同,可能引起效能上非常大的不同。總而言之,一些陣列使用大磁碟池和條帶LUN通過這些池,在那些場景中,本地磁碟可能產生不同的效能特性,儘管VASA曝光了類似於RAID的一些儲存特性,但它當前還是不能×××能特性。
為了確保儲存DRSI/O平衡放置,不僅僅是基於閾值和延遲觀察,SIOC還通過注入隨機I/O描繪資料儲存的特性,在大家擔心注入會干涉他們的工作負載之前,我們想強調的是注入只有當資料儲存處於空閒狀態時才變成活動的,如果I/O被檢測到來自於其它資源,注入將停止描述特性,並稍後重試,總之,注入I/O只是讀I/O,為了描述裝置的特性,不同數量的I/O被使用,延遲被監控,換句話說,隨機讀I/O被注入,每次I/O的數量也不同。圖115中結果可以簡單的描繪,圖的斜坡表明了資料儲存的效能。
引用
“在數學中,斜坡或者梯度線描述陡峭,傾斜和等級,較高的斜坡值表面更陡峭的斜坡。
圖115:使用不同數量的磁碟進行裝置建模
通過這個例子的示範,當I/O的數量增長,每個裝置的延遲也會增長,它們增長的速率是不同的,這恰好幫助儲存DRS未負載平衡和初始化位置生成建議,我們喜歡參考BASIL學院檔案上寫的概念。
SIOC日誌
你的環境中一些時候它是必須要進行排錯的,重新檢視日誌可以幫助你判定發生了什麼事。預設SIOC日誌是禁用的,但它應該在蒐集日誌之前開啟,開啟日誌的操作如下:
1.點選主機高階配置
2.在Misc選單,選擇Misc.SIOControlLogLevel引數,設定值為7(最小值:0(沒有日誌),最大值:7)
3.SIOC必須重啟來改變日誌級別,手工停止和開啟SIOC,使用/etc/init.d/storageRM{start|stop|status|restart|}
4.改變了日誌級別之後,你在/var/log/vmkernel目錄下看到日誌級別被改變。
請注意SIOC日誌檔案被儲存在the/var/log/vmkernel檔案中
從儲存DRS中排除I/O資訊統計
當在資料儲存級別配置SIOC,vSphere5.1提供了“從儲存DRS中排除I/O資訊統計“選項
圖116:從儲存DRS中排除I/O資訊統計
當功能開啟,儲存DRS停止使用資料儲存的統計報告,直到該選項再次被禁用,這些允許管理員手工介紹週期記憶體儲維護模式的視窗,當報告I/O統計異常時,應該不考慮對儲存DRS的負載平衡的責任,工作負載介紹了異常狀態是為了非典型的備份操作和遷移大量的虛擬機器到資料儲存群集。
轉載於:https://blog.51cto.com/virtualbox/1213279