根據是否支持掛載至多臺云主機可以將磁盤分為非共享磁盤和共享磁盤。一個非共享磁盤只能掛載至一臺云主機,而一個共享磁盤可以同時掛載至多臺云主機。
什么是共享磁盤
共享磁盤是一種支持多個云主機并發讀寫訪問的數據塊級存儲設備,具備多掛載點、高并發性、高性能、高可靠性等特點。單個共享磁盤最多可同時掛載給16個云主機,使用場景如下圖所示。
目前,共享磁盤只適用于數據盤,不支持系統盤。
圖 共享磁盤使用場景


共享磁盤的應用場景和使用注意事項
共享磁盤主要應用于需要支持集群、HA能力的關鍵企業應用場景,需要多個云主機可同時訪問一個磁盤。如果您將共享磁盤掛載到多個云主機,首先請根據應用場景選擇不同的磁盤模式,包括VBD和SCSI。
由于多數常見集群需要使用SCSI鎖,例如Windows MSCS集群、Veritas VCS集群和CFS集群,因此建議您結合SCSI模式使用共享磁盤。若SCSI磁盤掛載給虛擬化類型為XEN的ECS,則需要安裝驅動,具體請參見磁盤模式及使用方法。
您可以創建VBD類型的共享磁盤和SCSI類型的共享磁盤。
VBD類型的共享磁盤:創建的共享磁盤默認為VBD類型,該類型磁盤可提供虛擬塊存儲設備,不支持SCSI鎖。當您部署的應用需要使用SCSI鎖時,則需要創建SCSI類型的共享磁盤。
SCSI類型的共享磁盤:SCSI類型的共享磁盤支持SCSI鎖。
說明
為了提升數據的安全性,建議您結合云主機組的反親和性一同使用SCSI鎖,即將SCSI類型的共享磁盤掛載給同一個反親和性云主機組內的ECS。
如果ECS不屬于任何一個反親和性云主機組,則不建議您為該ECS掛載SCSI類型的共享磁盤,否則SCSI鎖無法正常使用并且則會導致您的數據存在風險。
反親和性和SCSI鎖的相關概念:
云主機組的反親和性:ECS在創建時,將會分散地創建在不同的物理主機上,從而提高業務的可靠性。
關于云主機組,更多詳情請參見《彈性云主機用戶指南》中的“管理云主機組”。
SCSI鎖的實現機制:通過SCSI Reservation命令來進行SCSI鎖的操作。如果一臺ECS給磁盤傳輸了一條SCSI Reservation命令,則這個磁盤對于其他ECS就處于鎖定狀態,避免了多臺ECS同時對磁盤執行讀寫操作而導致的數據損壞。
云主機組和SCSI鎖的關系:同一個磁盤的SCSI鎖無法區分單個物理主機上的多臺ECS,因此只有當ECS位于不同物理主機上時才可以支持SCSI鎖,因此建議您結合云主機組的反親和性一起使用SCSI鎖命令。
共享磁盤的主要優勢
多掛載點:單個共享磁盤最多可同時掛載給16個云主機。
高性能:多臺云主機并發訪問超高IO共享磁盤時,隨機讀寫IOPS可高達160000。
高可靠:共享磁盤支持自動和手動備份功能,提供高可靠的數據存儲。
應用場景廣泛:可應用于只需要VBD類型共享磁盤的Linux RHCS集群系統,同時也可應用于需要支持SCSI指令的共享磁盤的場景,如Windows MSCS集群和Veritas VCS集群應用。
共享磁盤的規格性能
磁盤性能的主要指標有IO讀寫時延、IOPS和吞吐量。
IOPS:磁盤每秒進行讀寫的操作次數。
吞吐量:磁盤每秒成功傳送的數據量,即讀取和寫入的數據量。
IO讀寫時延:磁盤連續兩次進行讀寫操作所需要的最小時間間隔。
不同類型磁盤的單隊列訪問時延如下:
高IO:1 ms ~ 3 ms
超高IO:1 ms

| 參數 | 高IO | 超高IO |
| 每GB磁盤的IOPS | 3 | 50 |
| 單個磁盤的最大IOPS | 3000 | 20000 |
| 單個磁盤的基線IOPS | 100 | 100 |
| 單個磁盤的IOPS上限 | min (3000, 100 + 3 × 容量) | min (20000, 100 + 50 × 容量) |
| 單個磁盤的IOPS突發上限 | 3000 | 10000 |
| 最大吞吐量 | 150 MB/s | 350MB/s |
| 掛載云主機數量 | 最大可同時掛載至16臺云主機 | |
說明
測試共享云硬盤性能時,必須滿足以下要求:
共享云硬盤必須同時掛載至多臺云主機(彈性云主機或者物理機)。
當共享云硬盤掛載至多臺彈性云主機時,這些彈性云主機必須位于同一個策略為“反親和性”的云主機組內。
如果彈性云主機不滿足反親和性,則共享云硬盤性能無法達到最大化。
共享磁盤的數據共享原理和常見的使用誤區
共享磁盤本質是將同一塊磁盤掛載給多個云主機使用,類似于將一塊物理硬盤掛載給多臺物理服務器,每一臺服務器均可以對該硬盤任意區域的數據進行讀取和寫入。如果這些服務器之間沒有相互約定讀寫數據的規則,比如讀寫次序和讀寫意義,將會導致這些服務器讀寫數據時相互干擾或者出現其他不可預知的錯誤。
共享磁盤為云主機提供共享訪問的塊存儲設備,但其本身并不具備集群管理能力,因此需要您自行部署集群系統來管理共享磁盤,如企業應用中常見的Windows MSCS集群、Linux RHCS集群、Veritas VCS集群和CFS集群應用等。
如果在使用共享磁盤過程中未通過集群系統進行管理,可能會導致以下問題:
讀寫沖突導致數據不一致
當一個共享磁盤同時掛載給兩臺云主機時,云主機 A和云主機 B相互之間無法感知另一個云主機已使用的存儲空間,云主機 A可能會對該磁盤上已被云主機B使用的空間進行重復分配,從而發生空間分配沖突導致數據出錯的情況。
比如,將一塊共享磁盤格式化為ext3文件系統后掛載給云主機 A和云主機 B,云主機 A在某一時刻向磁盤上的區域 R和區域 G寫了文件系統的元數據,下一時刻云主機 B又向區域 E和區域 G寫了自己的元數據,則云主機 A寫入的數據將會被替換,隨后讀取區域 G的元數據時即會出現錯誤。
數據緩存導致數據不一致
當一個共享磁盤同時掛載給兩臺云主機時,若云主機 A上的應用讀取區域 R和區域 G的數據后將數據記錄在緩存中,此時云主機 A上的其他進程或線程訪問該部分數據時,直接訪問緩存中的數據即可。如果此時云主機 B上的應用修改區域 R和區域 G中的數據,則云主機 A上的應用無法感知該部分數據已被修改,依舊從緩存中讀取數據,用戶通過云主機 A無法看到已修改的新數據。
比如,將一塊共享磁盤格式化為ext3文件系統后掛載給云主機 A和云主機 B,兩臺云主機均將文件系統的元數據進行了緩存,此后用戶在云主機 A中創建了一個新的文件 F,但云主機 B并無法感知該修改,依舊從緩存中讀取數據,導致用戶在云主機 B中無法看到文件F。
如果您將共享磁盤掛載到多個云主機,首先請根據不同的應用選擇不同的磁盤模式,包括VBD和SCSI。SCSI類型的共享磁盤支持SCSI鎖,但是需要在云主機系統中安裝驅動并保證鏡像在兼容性列表中。