VSAN的体系结构
搭建一个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.0以后,包含两种配置:
(1)混合配置(Hybrid):缓存层为SSD,持久化层(也称为容量层)为HDD(机械磁盘);
需要注意的是,当我们计算存储容量时,只能计算持久化层的存储。缓存层只是用来做性能加速的。下图展现了混合配置下的VSAN体系结构图。?
混合配置和全闪存配置都建议将“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。采用直通模式时,只需简单地插入新盘。
VSAN集群中,允许某些主机不提供存储资源,但一般不建议这么做。每个主机最多支持5个磁盘组。如果希望每个主机使用多块SSD,就需要创建多个磁盘组。一般而言,用于缓存层SSD的容量相对于持久化层的比率越高,能够用于IO加速的缓存就越多,性能就更有保障。
在VMware官网发布的《VMware?Virtual?SAN?6.0Performance?-?Scalability?andBest?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);
可以看出,在下图中,两个磁盘组相对于一个磁盘组,性能几乎线性增长。
在《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。
我们知道,以往的传统存储划分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),实现业务不停顿的情况下,来在线提升性能。