VMFS介绍

VMFS全称virtual machine file system,是VMware公司专门为ESX/ESXi虚拟宿主机开发的一种私有集群文件系统。用于多台ESX/ESXi主机之间共享存储虚拟机镜像、快照和配置文件等。VMFS基于共享存储创建,共享存储可以基于iSCSI或者FC。VMFS允许多台ESX/ESXi主机可以同时访问一个文件。

VMFS锁机制

VMFS采用分布式锁机制。文件锁信息直接写入磁盘,任何一个进程访问文件读取文件头部锁信息,如果文件已经被其他进程锁住,则必须其他进程释放所之后才能访问。文件锁使用租约管理方法,每个锁都包含一个时间戳信息,锁所有者必须定期更新该时间戳,如果时间戳长时间未更新,其他进程可以清除该锁并注册自己的锁。

VMFS提供三种锁,用于满足不同类型并发访问需求:

1、排他锁(Exclusive Lock)
如果一个文件被排他锁锁住,则其他进程不能访问。其他进程必须等待锁释放后,才能访问该文件。由于排他锁只能满足一个进程访问,因此如果发生排他锁争用将直接影响文件系统性能。通常数据修改操作都会使用排他锁。

2、只读锁(Read-Only Lock)
如果进程只是读取一个文件,进程会使用只读锁将改文件锁上。只读锁可以排他锁不一样,它可以满足多个进程同时读取该文件。VMFS一个文件最多只能支持8个只读锁(如果新更新请指出)。

3、多写锁(Multi-Writer Lock)
在集群环境中,要求文件具有同时被多台主机写入的权限。多写锁就是专门为集群环境设计的。在集群环境中,进程使用的是多写锁去锁住文件,如果集群主节点发生故障,备份节点不需要等到主节点锁租约超时之后才能切换。多写锁环境下,数据一致性必须由上层应用程序来保证。比如:集群软件。

SCSI 预留/释放(Reserve/Release)

文件读写操作最终通过SCSI命令写入lun。SCSI通过预留/释放方式实现访问控制, 进程访问lun之前必须先成功获得该lun的预留。SCSI预留/释放是针对整个lun,如果一个lun已经被预留,那么其他进程无法访问该lun,必须等待该预留被释放掉。

注意:SCSI-2和SCSI-3访问机制有所不同,SCSI-2使用简单的预留/释放机制,SCSI-3使用的永久预留(Persistent Reservation)机制。

VMFS在以下几个场景需要向lun发起预留操作:
1、VMFS文件系统创建/扩展
2、VM启动
3、创建/删除文件
4、模板创建
5、使用模板部署虚拟机
6、创建虚拟机
7、VMotion迁移虚拟机
8、虚拟机分配文件扩容
总之如果VMFS需要更改元数据信息就会发起预留操作。如果VMFS发生SCSI预留冲突,就会导致lun访问超时或者不可访问。过多的预留冲突将会严重影响VMFS性能。

VAAI ATS

VAAI全称vStorage APIs for Array Integration,由VMware提供用于和后端阵列整合的接口。阵列支持VAAI之后,vSphere可以将部分操作卸载到阵列,有效提高存储性能和管理效率。

VAAI架构如下图所示:
76949-fxjq4cunn8g.png
VAAI主要作用如下图所示:
56527-7vo6z3t95wv.png

ATS(全称automatic test and set)是VAAI的第三个版本,主要包括一些SCSI原子操作命令集合。
ATS主要目的就是替换VMFS现有使用的SCSI预留/释放的访问控制机制。ATS需要后端阵列支持。它的作用可以让vSphere和阵列支持,将VMFS锁操作交由后端阵列去完成,锁的粒度有原来的文件缩减一个磁盘扇区。对于不支持ATS的阵列,VMFS依然使用原有的SCSI预留/释放访问控制机制。ATS在某些特定场景下要求取消,比如阵列的微码升级。



最后修改:2022 年 09 月 09 日
如果觉得我的文章对你有用,请随意赞赏