共享磁盘及使用方法 共享磁盘的数据共享原理和常见的使用误区 共享磁盘本质是将同一块磁盘挂载给多个云主机使用,类似于将一块物理硬盘挂载给多台物理服务器,每一台服务器均可以对该硬盘任意区域的数据进行读取和写入。如果这些服务器之间没有相互约定读写数据的规则,比如读写次序和读写意义,将会导致这些服务器读写数据时相互干扰或者出现其他不可预知的错误。 共享磁盘为云主机提供共享访问的块存储设备,但其本身并不具备集群管理能力,因此需要您自行部署集群系统来管理共享磁盘,如企业应用中常见的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锁,但是需要在云主机系统中安装驱动并保证镜像在兼容性列表中。