根据是否支持挂载至多台云主机可以将磁盘分为非共享磁盘和共享磁盘。一个非共享磁盘只能挂载至一台云主机,而一个共享磁盘可以同时挂载至多台云主机。
什么是共享磁盘
共享磁盘是一种支持多个云主机并发读写访问的数据块级存储设备,具备多挂载点、高并发性、高性能、高可靠性等特点。单个共享磁盘最多可同时挂载给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锁,但是需要在云主机系统中安装驱动并保证镜像在兼容性列表中。