基本概念

分布式RAID

VSAN本质上是一个对象存储,使用分布式网络RAID实现VSAN存储的可用性和可靠性。从VSAN6.2引入纠删码之后,VSAN存在4种RAID类型,分别是:RAID0,RAID1,RAID5和RAID6。RAID0很简单,就是数据没有副本保护。

  • RAID1的结构参考“vSAN RAID1示意图”

VSAN Architecture_第1张图片

vSAN RAID1示意图(FTT=1)

  • RAID5的结构参考“vSAN RAID5示意图”

VSAN Architecture_第2张图片

vSAN RAID5示意图(FTT=1)

  • RAID6的结构参考“vSAN RAID6示意图”

VSAN Architecture_第3张图片

vSAN RAID6示意图(FTT=2)


vSAN objects(对象)

VSAN中一个逻辑分配单元,使用户能够管理的最小单元,具有分布在群集多个节点的数据和元数据,一个对象(object)由多个组件(components)构成,如“对象和组件的关系图”,一个VM Home对象由三个组件构成,2个时数据组件,一个witness组件。vSAN对象包含以下几种:

  • VM Home namespace

包含虚拟机的home目录文件,如.vmx,log files,vmdk和snapshot delta的描述文件

  • VM Swap object

虚拟机的swap文件,开机时创建

  • VMDK

虚拟机磁盘文件

  • Snapshot delta VMDK

虚拟机快照磁盘文件

  • Memory object

当内存快照创建时候,生成该对象

vSAN components(组件)

VSAN群集中RAID树上的叶子,对象的组成单元。根据存储策略,对象被分割为多个组件保存到存储设备。如“VSAN对象构成和分布图”一个FTT=1的存储策略下,600GB的VMDK对象将被类似于RAID1的方式放置于2个节点,而在每个节点上600GB的对象被分割为3个组件放置,因为每个组件文件大小不能超过255GB,超过255GB会被切分为多个。这个每个节点点上有3个组件,vSAN群集中共有6个组件来组成个对象。从VSAN6.6开始,每个vSAN节点的组件数量上限为9000.

VSAN Architecture_第4张图片

VSAN对象构成和分布图

vSAN Witness(见证)

见证就是一个仲裁组件,是一种特殊组件,是为了防止故障情况下群集组件出现脑裂,该组件大约占用4MB空间。


VSAN Architecture_第5张图片

VSAN Architecture_第6张图片

对象和组件的关系图

VSAN架构

要了解架构,直观方法是先看架构图:

VSAN Architecture_第7张图片

VSAN节点内部组件架构图

用户空间组件

Object store Filesystem(OSFS)

用户层面的守护进程存在于每个vSAN节点,负责:

    • 为了适配用户使用习惯,提供一种类似于文件系统的结构。其实本质上,vSAN是对象存储,不是文件系统,OSFS让vSAN使用起来类似与一种文件系统,注意:vSAN中没有文件夹,我们看到的vSAN的文件夹其实都是被格式化为VMFS的VSAN对象。

    • 负责创建vsanDatastore。

    • 负责VM namespace的对象的初始格式化,并映射友好的可读名称

VSAN Architecture_第8张图片

VSAN驱动群集架构图

VSANVPD(vSAN VASA Provider Daemon )

该守护进程是vSAN的诸多功能SPBM,RAID,fault-tolerance,object space reservation,striping等的调用接口,vCenter通过8080和VSANVPD进行交互,从而使用vSAN的诸多功能。如果该进程有故障,那么将不能创建VM或者变更现有VM的存储策略。Troubleshooting Guide for vSAN VASA providers


内核空间组件

Cluster Level Object Manager(CLOMD)

用户层面的守护进程,在VSAN中扮演“设计师/架构师”的角色,主要负责:

    • 检查现有的存储策略和群集资源条件下,对象能否创建

    • 对象放置是否合规,满足存储策略要求

    • 定义对象的创建和迁移

    • 在VSAN节点间分发I/O负载

    • 负责群集的重新平衡

Distributed object Manager(DOM)

该组件集成在esxi内核中,没有其他进程能监控和也无法重启该组件(除非重启esxi)。2个重要功能:1)VSAN object创建;2)为VSAN obejct的I/O访问提供分布式路径。扮演3个角色:DOM Owner,DOM Client,Component Manager。DOM在整个VSAN架构种扮演“分包商”角色,该组件具有如下特性:

    • vSAN对象概念存在于DOM层,往下LSOM层只有vSAN组件

    • 负责接收CLOM或者其他节点DOM的指令,LSOM进行交互,告诉其是否创建/删除VSAN对象的本地组件;个节点上的DOM协商,配合完成组件的创建

    • DOM负责维护对象的一致性,同时负责维护到各个组件副本的I/O

    • 在重建VSAN时个节点DOM重新同步存储对象

    • 每个节点各有一个DOM Owner,DOM Clien和Component manager角色。三个角色之间协作关系如下图所示:

VSAN Architecture_第9张图片

esxtop命令“x”按键可以看到节点上三个角色I/O状态。

VSAN Architecture_第10张图片

    • 每个VSAN对象由且只有一个Dom Owner,DOM Owner没有本地化概念,一个DOM owner拥有的组件可能分布在远程节点

LSOM

在VSAN中扮演“工人”角色,按照DOM指示创建存储对象的组件,详细特性如下:

    • 直接与SSD和HDD打交道

    • 接收来自DOM的I/O,写操作完成后想DOM返回确认,读操作完成后想DOM返回请求的数据

    • 提供write buffer,read cache,并将数据分层写到容量层

    • 如果有需要执行加密操作

    • 监控并报告存储和网络设备的健康状况

    • 在失败设备上执行I/O重试

    • 节点启动从SSD执行log还原

注意:LSOM和DOM一样存在于内核,但是LSOM是很底层的,只负责本地I/O处理,没有群集操作,不知道对象分布,仲裁,I/O同步等,这些涉及群集操作都是DOM来完成

Cluster Monitoring Membership and Directory services(CMMDS):

该服务负责发现和维护VSAN群集,以及处理节点之间的关系,它存储了所有VSAN对象相关的包括存储策略,RAID等元数据信息。在群集中扮演“项目经理”角色,为DOM和CLOM提供群集拓扑“图纸”:

    • 选择对象的Owner,

    • 便利主机、网络、磁盘等等群集内所有设备,并提供清单服务

    • 维护一个内存数据库,该数据库存放存储策略相关的元数据

    • 发现和维护群几件节点以及节点之间关系,定义节点在群集中的角色:master,backup,Agent


Reliable Datagram Transport(RDT)

用于群集网络通信,为大文件传输优化设计。RDT可以基于CMMDS提供的链路健康信息快速建立和断开链接,这样可以降低数据报的传输延迟。


vSAN各个部件如何协作

参考“vSAN各个部件关系图”,CLOM接收到对象的创建请求之后,CLOM会检查该对象能否按照指定存储策略进行创建,如果可以,CLOM会调度DOM创建组成对象的组件。DOM会决定那些组件能在本地创建,如果可以,DOM调度LSOM创建本地组件。如果需要在其他节点创建组件,那么DOM会和其他节点DOM交互,由其他节点的DOM负责远程节点的组件创建工作。LSOM在接收到DOM指令之后,和驱动器层面完成交互,在此就存储上创建组件。

VSAN Architecture_第11张图片

VSAN各个部件关系图