更新时间:2022-06-16 GMT+08:00

共享云硬盘及使用方法

什么是共享云硬盘

共享云硬盘是一种支持多个云服务器并发读写访问的数据块级存储设备,具备多挂载点、高并发性、高性能、高可靠性等特点。主要应用于需要支持集群、HA(High Available,指高可用集群)能力的关键企业应用场景,多个云服务器可同时访问一个共享云硬盘。

一块共享云硬盘最多可同时挂载至16台云服务器,云服务器包括弹性云服务器和裸金属服务器。实现文件共享需要搭建共享文件系统或类似的集群管理系统,例如Windows MSCS集群、Veritas VCS集群和CFS集群等。

使用共享云硬盘必须搭建共享文件系统或类似的集群管理系统。直接挂载至多台云服务器无法实现共享功能,且存在数据覆盖风险。

图1 共享云硬盘使用场景

共享云硬盘的使用注意事项

由于多数常见集群需要使用SCSI锁,例如Windows MSCS集群、Veritas VCS集群和CFS集群,因此建议您结合SCSI模式使用共享云硬盘。若SCSI云硬盘挂载给虚拟化类型为XEN的ECS,则需要安装驱动,具体请参见磁盘模式及使用方法

您可以创建VBD类型的共享云硬盘和SCSI类型的共享云硬盘。建议将共享云硬盘挂载至位于同一个反亲和性云服务器组内的ECS,以提高业务可靠。
  • 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集群应用。

共享云硬盘的规格性能

共享云硬盘的规格性能与非共享云硬盘规格性能一致,详情请参见磁盘类型及性能介绍

共享云硬盘的数据共享原理和常见的使用误区

共享云硬盘本质是将同一块云硬盘挂载给多个云服务器使用,类似于将一块物理硬盘挂载给多台物理服务器,每一台服务器均可以对该硬盘任意区域的数据进行读取和写入。如果这些服务器之间没有相互约定读写数据的规则,比如读写次序和读写意义,将会导致这些服务器读写数据时相互干扰或者出现其他不可预知的错误。

共享云硬盘为云服务器提供共享访问的块存储设备,但其本身并不具备集群管理能力,因此需要您自行部署集群系统来管理共享云硬盘,如企业应用中常见的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锁,但是需要在云服务器系统中安装驱动并保证镜像在兼容性列表中。

直接将共享云硬盘挂载给多台云服务器无法实现文件共享功能,如需在多台云服务器之间共享文件,需要搭建共享文件系统或类似的集群管理系统。