VMware SDS 之三:VSAN的体系结构(含VSAN 6.0、6.1版的新内容)

搭建一个VSAN集群(也可称为群集),至少要三个服务器节点(也即ESXi主机),其中两个主机存放副本,剩下一个主机存放“见证”(也即Witness,充当仲裁)组件,这样可以允许最多一个主机出故障,同时确保虚机无中断地持续运行(有时需要结合vSphere HA进行重启)。不过在VSAN 6.1新增的一个特性,也即远程分支办公室的场景下,Witness不一定要放在一台真实的物理服务器上,可以存放在ESXi虚机上,后面会有详细描述。注意,本文后面提到的副本(Replicas)数,就是包含原件和镜像在内的所有的数量,也就是说,n个副本意味着总共n份数据


需要注意的是,尽管VSAN完全支持3个主机的配置,但如果可行,建议至少4个主机。这是因为,只有3个主机的VSAN集群,在发生故障时,有些情况下,VSAN无法在群集中的其他主机上重新构建(Rebuild)组件(Components)来允许另一次故障。同样,在3个主机配置下,VSAN不能在维护模式(Maintenance Mode)期间从主机迁移所有数据。


而4个主机的VSAN群集可以提供更高的灵活性。VSAN集群最多时可以支持64个主机。每台为VSAN提供存储资源的主机至少有一个SSD,及一个HDD。每台主机至少6GB内存。


下面我们依次介绍VSAN的配置、磁盘组、vsanDatastore、对象、组件和网络。


1. VSAN的两种配置�混合与全闪存

截止目前,VSAN最新的版本是6.1,是2015年9月发布的,对应的vSphere版本是ESXi6.0 Update 1

VSAN 6.0以后,包含两种配置:

(1)混合配置(Hybrid):缓存层为SSD,持久化层(也称为容量层)为HDD(机械磁盘);

(2)全闪存配置(AllFlash):缓存层和持久化层都是SSD;一般选取速度更快、耐久性更好的写密集型SSD做为缓存层;选取成本更低、容量更大的读密集型SSD做为持久化层。

需要注意的是,当我们计算存储容量时,只能计算持久化层的存储。缓存层只是用来做性能加速的。下图展现了混合配置下的VSAN体系结构图。

 

forum.php?mod=attachment&aid=MzA0MjF8NDc


混合配置和全闪存配置都建议将10% 的已占用容量”用于缓存层;然后再考虑NumberOfFailuresToTolerate(最大允许的故障数)。例如,用户计划置备 1000个虚拟机,每个虚拟机有 100GB 精简置备的逻辑地址空间。然而,他们预计一段时间内,每虚拟机占用的存储容量平均为20GB。这样,已占用容量就是按照20GB计算,此时20GBx1000x10%=2TB。而不是4TB(即便有两份副本)。需要注意的是,这个10%不是硬性要求的,主要还是取决于需要被缓存提速的那部分活跃数据有多少。


在混合配置中,缓存算法会尝试最大限度提高读写性能。缓存的70%为读缓存,用于存储频繁读取的磁盘块,从而最大限度减少对速度缓慢的磁盘的访问。缓存的30%为写缓存,用于执行写入操作,每个IO会先写入缓存层,再批量写入持久化层。如果可行,系统会合并多个写操作,并按顺序写入,从而再次最大限度提高磁盘性能。


在全闪存配置中,100% 的缓存都分配给写入操作,因为持久化层的SSD(固态硬盘)提供的读取性能绰绰有余。大量写入操作保存在缓存中,仅在需要时写入持久化层的SSD,从而延长持久化层的寿命。经常在写缓存里访问的热数据仍然留在缓存里,而很少被访问的冷数据就Destage(刷)到持久化层的SSD里。


混合配置下,强烈推荐使用支持直通(Pass-Through)模式的磁盘控制器。如果现有的磁盘控制器不支持直通模式,才考虑使用RAID-0,但需要注意的是,采用RAID-0配置HDD后,如果HDD出故障需要更换时,操作较为复杂,需要重新配置RAID-0。采用直通模式时,只需简单地插入新盘。



2. VSAN的磁盘组- DiskGroup

磁盘组是一组盘,每个磁盘组包含1个SSD做为缓存层1~7个HDD或者SSD做为持久化层。缓存层的SSD为同一个磁盘组内的持久化层盘***能加速。磁盘组这种设计,在混合配置下,同时兼顾了性能和容量。


 


VSAN集群中,允许某些主机不提供存储资源,但一般不建议这么做。每个主机最多支持5个磁盘组。如果希望每个主机使用多块SSD,就需要创建多个磁盘组。一般而言,用于缓存层SSD的容量相对于持久化层的比率越高,能够用于IO加速的缓存就越多,性能就更有保障。


在vmware官网发布的《VMware Virtual SAN 6.0Performance - Scalability and Best Practices》白皮书中,我们可以了解到,测试的配置是:每个主机有两个LSIMegaRAID SAS控制器,每个控制器对应一个磁盘组,每个磁盘组配置1块400GB Intel S3700 SSD和4块900GB 1万转的SAS。测试的结果是,从4个到64个主机的不同集群里:


(1)4K大小IO,随机,100%读的时候,64个主机能达到740万IOPS(平均每个主机11.56万IOPS,每个主机的每个磁盘组为5.78万IOPS);

(2)4K大小IO,随机,混合读写(70%读30%写,模拟OLTP应用)的时候,64个主机能达到200多万IOPS(平均每个主机3.1万IOPS,每个主机的每个磁盘组为1.55万IOPS);


可以看出,在下图中,两个磁盘组相对于一个磁盘组,性能几乎线性增长。


forum.php?mod=attachment&aid=MzA0MjN8NzF

 

在《VMware Virtual SAN 6.0 Design and Sizing Guide》白皮书里提到,VMware建议VSAN集群内的每个主机使用多个磁盘组。不仅是为了可能提高性能,同时也为了减小故障域。因为每个磁盘组的缓存层SSD只会影响该SSD所在的磁盘组的持久化盘,不影响同一主机的其他磁盘组。


如果 3 节点群集中每个主机只有一个磁盘组,当其中一个闪存缓存设备发生故障时,将无处重新构建磁盘组中的组件。

然而,如果每个主机有多个磁盘组,而且在某个闪存缓存设备发生故障时其他磁盘组中有充足的容量,VSAN将能够在剩余磁盘组中重新构建受影响的组件。这是在计划部署 3 节点 VSAN 群集时另一个需要注意的事项。


3. VSAN的存储池-vsanDatastore

VSAN聚合了集群内的SSD和HDD,形成一个共享的存储池,也即vsanDatastore被vSphere集群使用。这个vsanDatastore可以随着主机、磁盘组或盘的增减,动态地在线地扩大或缩小。这为业务(虚机)的弹性扩展奠定了坚实的基础。下图就是3个主机扩展为4个主机后的vsanDatastore,从4.86TB动态地在线地扩大为6.48 TB。


forum.php?mod=attachment&aid=MzA0MjR8MGY

我们知道,以往的传统存储划分LUN给vSphere,做完VMFS格式化后,形成的datastore大小基本都是固定的,随着业务规模的变化,存储容量所需的在线调整很难实现,也即扩大和缩小比较复杂。


VSAN不仅支持分布式存储的在线横向扩展(Scale Out),也支持纵向扩展(Scale Up)。通过增加主机,提供存储容量的vsanDatastore可以在线扩大,同时整体的性能也线性增长。通过添加磁盘组,或者增加HDD,也可使得vsanDatastore得到在线扩大,这种在线的纵向扩展无需增加新主机,从而避免了计算资源的浪费。VSAN也支持在线移除磁盘组(建议先设置成维护模式- Maintenance Mode,虽然这不是必须),或者在剩余空间足够的情况下,移除SSD或HDD。下图可以查看到,VSAN提供了直观的图形界面,进行磁盘组或盘的添加或移除。这位用户对VSAN存储管理和维护,提供了极大的灵活性和便利。也为在线调整存储的空间和性能,奠定了坚实的基础。例如,通过增加SSD和磁盘组,或者通过依次将主机设置成维护模式,将主机的SASSSD更换成NVMe SSD(一种PCIe SSD),或者更换成UltraDIMM SSD(插在内存槽上的SSD),实现业务不停顿的情况下,来在线提升性能。


 

forum.php?mod=attachment&aid=MzA0MjV8ZmM



4. VSAN的对象�Object

需要清楚的是,VSAN不是分布式文件系统,是分布式对象存储系统。VSAN的对象,是指符合SCSI语义的单个存储块设备。从概念上讲,也可以被视为“卷”(Volume),即 Amazon EC2 和 OpenStack 中使用的术语。VSAN的对象取代原来传统存储中的LUN,成为VSAN的主要存储单元。VSAN的对象是带有叶子的RAID树。如下图所示,这是一颗副本数为2(也即最大允许故障数FTT=1),条带数(也即副本横跨的盘数)为2的RAID树,是一个VMDK对象。


forum.php?mod=attachment&aid=MzA0MjZ8NzB


在vsanDatastore上,虚拟机有5种不同类型的对象,每个虚拟机都是由这些对象的部分组合而成。如下图所示,这些对象是:

VM Home(虚拟机主页),或称“名字空间目录";

VM swap(交换文件对象),如果虚机处于开机状态;

VMDK(虚拟磁盘),VSAN 5.5时,最大2TB,而VSAN 6.0时最大62TB;

Snapshots(快照),也即增量盘,建立快照之后每个对象都有;

Memory(vmem,虚拟机内存文件),VSAN5.5时,当快照创建时,虚拟机内存以文件形式存放在VM Home里。而在VSAN 6.0时,虚拟机内存在vsanDatastore里实例化为独立的对象。


5. VSAN的组件� Components(含Witness)



组件是对象的RAID树上的叶子,分布在VSAN集群中的各个主机上。其实,组件是按照两种主要的技术分布的:Striping(条带),即RAID 0;和Mirroring(镜像),即RAID 1。注意,RAID的构成和组件的分布取决于最初创建的存储策略。下图是副本为2,条带为2的组件分布情况。



 

每个组件都是存放在一个特定的“缓存层(SSD)+持久化层(如HDD)"的组合上,也即磁盘组上。组件如同对象一样,是一个逻辑概念。以混合配置为例,组件所对应的真实数据,最终都是要落到HDD的。不过,某一时刻,应用对它的读写发生在SSD,还是HDD,取决于写数据时,SSD的数据是否Destage(刷)到HDD上。或者读数据时,是否从HDD复制到了SSD。主机的组件不仅包括开机状态下,还包括处于关机状态下的虚拟机的组件。


VSAN5.5 目前支持每台主机最多包含 3000 个组件,VSAN 6.0可达9000个组件

容量大于255GB的对象会自动被分为多个组件。我们知道,VSAN6.0 现在支持 62TB 的VMDK。然而,考虑到VSAN集群支持的最大组件数,需要谨慎衡量应用程序是否真的需要这么大的VMDK。以单个62TBD VMDK为例,假设副本数为2时,按照255GB拆分,需要消耗约500个组件。

此外,如果设定的每个对象的条带数超过默认值 1,则每个条带将计为一个单独的组件。

简而言之,条带即组件



为了方便管理员详细的了解VMDK对象各个组件的分布位置,VMware提供了vSphere Web Client图形界面,可以清晰直观地查看对象的构成和组件的分布。


forum.php?mod=attachment&aid=MzA0Mjh8MjI

 


需要注意的是,无论组件如何分布,为了确保可用性,VSAN绝不会让不同的副本(镜像)组件共用同一台主机。

在VSAN 5.5中创建的每个组件,元数据会占用额外的2MB空间,此时磁盘格式为1.0,对应的磁盘文件系统是VMFS-L。而在VSAN 6.0中,如果在磁盘格式 2.0(对应的磁盘文件系统为VSAN FS)的持久化层上构建组件,则会占用额外的4MB空间。


介绍Witness(见证)


在前面第4节-VSAN的对象的第一个图里,我们还可以看到,在组件中,有一个非常特殊的组件是Witness(见证),它只包含元数据,不给虚拟机提供存储空间,不包含任何实际应用程序数据。见证组件和其他组件必须位于不同的主机上。


在磁盘格式1.0时,见证约占2MB空间;在磁盘格式2.0时则为4MB。它做为必要的仲裁对象,在VSAN集群出现故障,尤其是脑裂时,用来辅助判断哪个分区可用。在VSAN5.5时,哪个分区的组件数超过50%,就决定哪个分区是可用的。

在 VSAN 6.0 中,仲裁计算方式已经改变。规则不再是“50%以上的组件”。相反,在 6.0 中,每个组件都有许多votes(投票),可以是 1 票或更多票。仲裁根据“需要 50% 以上的votes”这一规则计算。这就存在一种可能,也就是即便不使用Witness,组件分布方式依然能让 VSAN 保证容许故障数。然而,在VSAN6.0 中,许多对象依然有Witness,例如VM Home仍然使用Witness。


另外,在VSAN 6.1后,Witness做为见证,不仅可以运行在物理的ESXi主机上,还可以运行在第三个站点的虚拟机上,或者运行在公有云上,例如,在条件具备的情况下,也可以运行在天翼混合云、或vCloud Air、AWS、Azure、阿里云等公有云上。VMware已经准备好了特殊的Witness虚拟设备- VirtualSAN Witness Appliance 6.1 的OVA文件。其实就是装有ESXi的虚机。这为VSAN 6.1新特性中的两个,也即(1)VSAN支持存储双活(Stretched Cluster)和(2)VSAN支持两个主机的VSAN集群(用于ROBO- 远程或分支办公室)提供了灵活性,也节省了成本。


6. VSAN的网络�Network



VSAN 6.0对网络的要求如图所示。


forum.php?mod=attachment&aid=MzA0MzF8OTk

 


在已启用巨型帧的数据中心里,才建议将巨型帧用于VSAN的网络部署。因为VMware测试发现,使用巨型帧可以降低CPU利用率,增加吞吐量,然而,这两项优势带来的收益并不大,因为vShpere 已经使用 TCP 分段卸载(TSO)和大型接收卸载(LRO)带来了类似的优势。

VSAN可以将多个网络接口聚合在一起使用,以实现网络的高可用,如果一个网口发生故障,另一个将接管通信。


VSAN 同时支持 VDS和VSS。


全闪存配置下,VSAN必须使用万兆网口。混合配置下,虽然千兆(1Gbps)网口也能支持VSAN,但最佳实践是建议使用万兆(10Gbps)网口。如果使用万兆网口,该网口可以与其他类型的网络流量共享,例如 vMotion。如果在多个类型流量之间共享万兆网口,则建议使用NIOC(Network I/O Control),用来阻止一种类型流量占用所有带宽。NIOC 要求使用分布式交换机(VDS),NIOC在标准交换机(VSS)上不可用。不过,VMware会在含有VSAN的每个vSphere版本,都提供 VDS。这意味着,无论部署哪个版本,都可以配置 NIOC。



VSAN和其他vSphere类型的流量可以使用NIOC的份额(Shares)设置不同的QoS目标。下图中的vMotion流量是一个例子,其他vSphere类型的流量,如FT,iSCSI,管理,容灾,NFS,以及虚机的流量都是类似的。


forum.php?mod=attachment&aid=MzA0MzB8MTk


VMware SDS系列,未完待续……,欢迎持续关注。


本篇文章参考了《VSAN权威指南》、VMware官方网站和VSAN 6.0 Design and Sizing Guide等文章,并得到了徐炯的帮助。在此一并致谢。


你可能感兴趣的:(VSAN)