基本概念
分布式RAID
VSAN本质上是一个对象存储,使用分布式网络RAID实现VSAN存储的可用性和可靠性。从VSAN6.2引入纠删码之后,VSAN存在4种RAID类型,分别是:RAID0,RAID1,RAID5和RAID6。RAID0很简单,就是数据没有副本保护。
RAID1的结构参考“vSAN RAID1示意图”
vSAN RAID1示意图(FTT=1)
RAID5的结构参考“vSAN RAID5示意图”
vSAN RAID5示意图(FTT=1)
RAID6的结构参考“vSAN RAID6示意图”
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对象构成和分布图
vSAN Witness(见证)
见证就是一个仲裁组件,是一种特殊组件,是为了防止故障情况下群集组件出现脑裂,该组件大约占用4MB空间。
对象和组件的关系图
VSAN架构
要了解架构,直观方法是先看架构图:
VSAN节点内部组件架构图
用户空间组件
Object store Filesystem(OSFS)
用户层面的守护进程存在于每个vSAN节点,负责:
-
为了适配用户使用习惯,提供一种类似于文件系统的结构。其实本质上,vSAN是对象存储,不是文件系统,OSFS让vSAN使用起来类似与一种文件系统,注意:vSAN中没有文件夹,我们看到的vSAN的文件夹其实都是被格式化为VMFS的VSAN对象。
负责创建vsanDatastore。
负责VM namespace的对象的初始格式化,并映射友好的可读名称
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角色。三个角色之间协作关系如下图所示:
esxtop命令“x”按键可以看到节点上三个角色I/O状态。
-
每个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各个部件关系图