vSAN疑难问题与实验验证
Q1 关于SSD的详细回答
Q1_1: VSAN 需要使用 SSD,它有什么用途呢?
答: SSD 用于读取缓存 (70%) 和写入缓冲 (30%)。每次写入都会先转到 SSD,稍后再取消暂存到 HDD。
vSAN 采用闪存机制:闪存资源被用于读缓存和写缓存,每个写 IO 都会先写入闪存,并最终批量写入磁盘。 而
读 IO 操作不同,需要看读取的数据是否在缓存区,完美的情况下所有的读 IO 都来自闪存
Q1_2:可以对 SSD 或磁盘进行分区并将它们用在其他方面吗(比如,安装 ESXi/vFlash)?
答:不行,您不能对 SSD 或 HDD 进行分区。 Virtual SAN 总是会占用整个磁盘。使用 VSAN 最可行的办
法可能就是,在内部 USB/SD 卡上安装 ESXi,这样可以最大程度地提高 VSAN 的容量。
Q1_3:可以同时支持 SSD 和 PCIe 闪存卡吗?
答:是的,可以同时支持这两者。但是,请检查 HCL 来了解相关详细信息,因为有一些准则和要求需要注意。
Q1_4: VSAN 支持去重复或压缩吗?
答: 6.6 支持。在 VSAN 群集中,成本最高的资源是 SSD/闪存,因此,在这一层上最可能出现数据重复。如果
数据有多个副本,则 HDD 上会有两个副本,分布式写入缓冲区( SSD 的 30%)会有两个临时副本,而闪存的
分布式读取缓存部分 (70%) 对于任何缓存数据都只包含一个副本。
Q1_5:一台主机可以为 VSAN 提供多少磁盘?
答:最多 5 个磁盘组; 每个磁盘组需要 1 个 SDD 以及最少 1 个、最多 7 个 HDD。每个主机的最多 HDD 数为
5 x 7 = 35。 每个主机的最多 SSD 数为 5 x 1 = 5。
Q2: vSAN I/O 流
Q2_1: vSAN I/O 流概述

VSAN中条带深度为1MB,传统架构中为512B
Q2_2:剖析 vSAN 写 I/O 流


Q2_3: vSAN I/O 刷盘

Q2_4: vSAN 读 I/O



Q3:关于存储策略详细问答
Q3_1:创建 VSAN 虚拟机存储策略时,何时应使用“允许的故障数目”,何时
应使用“条带宽度”呢?
答: “允许的故障数目” 与可用性有关,如果在主机或磁盘组出现故障时需要保持虚拟机可用,可以定义这一策
略。因此,如果允许 1 个主机故障,可以将该策略定义为 1。这样,就会在群集中创建 2 个数据对象和 1 个见
证。
“条带宽度” 与性能有关( 即,不在缓存中时的读取性能以及取消写入暂存) 。设置为 2 或更高的值,会使数据
在多个磁盘之间进行条带化。如果与“允许的故障数目” 结合使用,可能会使某个虚拟机中的数据存储在多个主
机上的多个磁盘中。
Q3_2: VSAN 是否有默认存储策略呢?
答:是的, VSAN 数据存储上的所有虚拟机都会应用一个默认策略,默认情况下会应用“允许 N+1 个故障数目”
策略,这样,即使用户忘了创建和设置策略,对象也具有故障恢复能力。建议不要更改默认策略。

Q3_3: 变更存储策略

Q3_4:对象空间预留
vSAN 数据存储是一种对象存储系统,其上的虚拟机是由大量不同的存储对象组成的,而不像过去的
虚拟机是保存在 LUN 或卷上的一组文件的集合。
对象指的是一个位于 vSAN 数据存储中的独立的存储块设备, 对象现在取代了 LUN 成为了 vSAN
的主要存储单元。在 vSAN 中最典型的存储块设备就是独立的 VMDK、虚拟机主页名字空间和虚拟
机交换文件。
vSAN 中的每个“对象” 都有其自己的 RAID 树,将策略要求映射成为物理设备上实际的布局。如
果你在部署虚拟机的时候选择了某一个虚拟机存储策略,那么策略中关于可用性和性能的这些要求
就会被应用到虚拟机对象上。
组件是对象的 RAID 树上的叶子——这意味着,一“片” 组件是存放在一个特定的“缓存设备+容
量设备” 的组合(一个物理磁盘组)上的。
在 vSAN 数据存储上,虚拟机可以具有 5 种不同类型的对象。注意,每台虚拟机都可以由这些对象
中的部分组合而成,这些对象如下:
1. 虚拟机主页( VM Home)或“名字空间目录” ( namespacedirectory)
2. 交换文件对象(如果虚拟机处于开启状态)
3. 虚拟磁盘/VMDK
4. 为快照创建的增量盘(每个对象)
5. 为快照创建的快照内存(每个对象)
在这 5 种对象中,虚拟机名字空间需要进一步解释一下。所有的虚拟机文件,包括 VMDK、增量
(快照)、内存快照和交换文件都存放在 vSAN 上一块叫做虚拟机名字空间的地方。在虚拟机主页
名字空间中最典型的文件有.vmx 虚拟机描述文件、 .log 日志文件、 .vmdk 磁盘描述文件、快照增
量盘描述文件以及所有其他可能在虚拟机主页目录中找到的文件。
vSAN 上的每个存储对象都可以被看成一棵 RAID 树,每片树叶就是一个组件。例如,如果一个
VMDK 的条带宽带是 2,且无需容忍任何故障(不要管为什么),那么这个 VMDK 上就会配置一
个 RAID-0 条带并横跨 2 块磁盘。这个 VMDK 是一个对象,组成它的每一片条带就是这个对象的一
个组件。
类似的,如果定义了这块 VMDK 在群集中应该至少容忍一个故障(主机、磁盘或网络),且保持其
他所有策略设置为默认值,就要对这个 VMDK 对象创建一个 RAID-1 镜像——在群集内的一台主
机上有一个副本组件,同时在另一台主机上有另一个副本组件。最后,如果策略要求同时包含条带
和可用性,那么条带组件将会在主机之间被镜像,最终形成了 RAID0+1 配置。单个对象最终会由
4 个组件构成,每个副本中有 2 个条带组件。
注意,增量盘是在对虚拟机拍摄快照的时候创建出来的,它会继承其母盘的策略(条带宽度、副本
数等等)。
交换文件对象仅在虚拟机开机的时候创建。
另有一个组件叫做见证( witness),它非常重要,也很特殊。尽管它不直接给虚拟机提供存储空
间,但是不可否认的是,当群集中的虚拟机存储对象出现故障的时候,作为必要的仲裁对象,它是
非常关键的。稍后我们还会讨论见证组件,现在让我们先关注虚拟机存储对象。
5.2.1 组件的限制
关于 vSAN 中的组件有一个主要的限制。因为这是一个硬性限制并且最终会影响单台主机和群集上
可以运行的虚拟机数量,理解这些限制是非常重要的。 vSAN 5.5 的限制如下:
每台主机的最大组件数: 3000
在 vSAN 6.0 中因为一种新的磁盘格式(on-diskformat)的引入,这个每台主机的最大组件数的上限
增加了。
每台主机的最大组件数: 9000
每台主机的组件包括了处于关闭状态虚拟机、未注册的虚拟机和模板的组件。 vSAN 将这些组件分
派到群集中的各台主机上,并试图保持一种均衡的分布。然而,某些主机拥有的组件仍然有可能比
其他一些主机更多。所以这就是为什么 VMware 推荐的最佳实践是使得一个 vSAN 群集的所有主机
尽可能地保持类似(甚至是完全一致)的配置。在设计和部署一个 vSAN 群集的时候,组件的数量
限制是设计和部署 vSAN 群集时重要的决策因素,这将会在第 9 章中进一步深入探讨。
管理员使用 vSphere Web 客户端可以查看虚拟机主页名字空间和虚拟机的 VMDK 等对象及其组件
的布局,图 5-3 提供了一个此类布局的示例。这台虚拟机有一块硬盘,这块硬盘在 2 台不同的主机
上拥有镜像,你可以在 Host 这一列看见这些组件的位置。
图 5-3 物理磁盘布局
5.2.2 虚拟机存储对象
如前所述, 5 种存储对象是:虚拟机主页名字空间、虚拟机交换文件、 VMDK、增量盘和快照内存
(如图 5-4 所示)。我们将先暂时忽略快照内存而更多地讨论一下其他组件。
图 5-4 虚拟机存储对象
现在我们将讨论虚拟机存储策略中定义的特性将如何影响这些存储对象。注意,并非所有的虚拟机
存储对象都会实施这些策略。
5.2.3 名字空间
虚拟机使用名字空间(namespace)对象来作为它的虚拟机主页(VM Home),并用它来存储没有专属
对象其他所有虚拟机文件,如以下这些内容(但不限于此):
1. .vmx、 .vmdk(描述文件部分)、 VMX 使用的.log 日志文件
2. 用于 VMware HorizonView 的 CBRC[2]的摘要文件。这个功能是 View 的存储加速器,虚拟桌面
基础机构(VDI)是 vSAN 的一个重要用例。
3. vSphere Replication 和 Site RecoveryManager 的文件
4. 客户机自定义文件
5. 由其他软件解决方案产生的文件
这些对象是独特的,每台虚拟机各有一个。 vSAN 使用 VMFS 作为文件系统来存放虚拟机的所有文
件,包括名字空间中的这些文件。名字空间 VMFS 是一个功能完整的常规的 VMFS,也就是说它具
备所有群集功能及所有 VMFS 支持的功能(例如 vMotion、 vSphere HA 等)。若查看 ESXi 主机
的文件系统,它表现为一个自动挂载的子目录。不过,尽管作为常规的 VMFS 来使用,它却没有其
他环境中的那些 VMFS 所具有的限制,因为连接到虚拟机主页名字空间 VMFS 卷的主机最多是 2
台( 例如,在 vMotion 发生时),而在传统环境下同样的 VMFS 卷往往是同时被几十台主机共享
的。换而言之, vSAN 对常规 VMFS 卷的用法是完全不同的,使其得以具有更高的扩展性和更佳的
性能。
Q3_5:闪存读取缓存预留

Q3_6: 强制置备



Q3_7: 虚拟机存储策略应用的对象
可以为每个虚拟机或每块虚拟磁盘分别配置策略
Q4: 条带化
Q4_1: 每个对象的磁盘条带


Q4_2:将条带宽度设置为 2 后,数据如何在主机上的多个磁盘中进行条带化?
答: 首先,将条带宽度设置为 2 后,并不能保证数据会在某个主机上的多个磁盘中进行条带化。 VSAN 自身的
算法可决定数据应放置的位置, 因此,虽然所有主机都有足够的磁盘, 但数据仍可能会在多个主机中进行条带
化,而不是在某个主机中的多个磁盘中进行条带化。数据条带化是以 1MB 的块为单位进行的。

Q5: vSAN 与 HA
Q5_1:为什么建议将 HA 的隔离响应配置为“powered-off(已关闭) ”呢?(默认禁用,如图)
答:启用 VSAN 后, vSphere HA 会使用 VSAN VMkernel 网络来实现检测信号。如果主机没有收到任何检
测信号,则从 VSAN 的角度来说,该主机很可能已经与群集的其他部分隔离开/进行了分区。在这种情况下,建
议关闭虚拟机的电源,因为 HA 会自动在群集中的其余主机上打开一个新副本的电源。这样,在主机脱离隔离状
态后,就不会出现网络中有 2 个具有相同标识的虚拟机的情况了。

Q5_2: VSAN 会使用 iSCSI 或 NFS 将主机连接到数据存储吗?
答: VSAN 不会使用其中任何一种将主机连接到数据存储。它会使用一个专有机制。
Q5_3:在启用了 VSAN 的群集中,维护模式会产生什么样的影响?
答:对于为 VSAN 数据存储提供存储的主机,可以通过三种方式将其置于维护模式:
1) 完整数据迁移 – 迁移主机上的所有数据。影响:可能需要很长时间才能完成。
2) 确保可访问性 – VSAN 通过将必要的数据迁移到其他主机来保持所有虚拟机都始终可访问。影响:可能会违
反可用性策略。
3) 无数据迁移 – 不迁移任何数据。影响:根据定义的“允许的故障数目” 策略,某些虚拟机可能会不可用。
最安全的选择是选项 1,选项 2 是首选和默认选项,因为完成速度最快。我认为问题在于,为什么要将主机置于
维护模式,以及主机多久可以再次使用。如果确实需要快速进入维护模式,并不在乎可能会丢失数据,则可以选
择选项 3:回退。
Q5_4: VSAN 支持 Fault Tolerance(即 FT)吗?
答:支持, 6.2 版本之后 VSAN 支持 Fault Tolerance。 ( 4VCPU)
Q5_5:为什么不能在只有 VSAN 的群集中使用数据存储检测信号功能?
答:对检测信号数据存储并没有什么要求。之所以在只有 VSAN 数据存储的情况下不能使用此功能,是因为 H
A 会使用 VSAN 网络来实现检测信号。因此,如果主机与 VSAN 网络隔离,而无法发送检测信号,则可以肯定
地说,该主机也无法远程更新检测信号区域,这样,在只有 VSAN 的环境中启用该功能也就失去了意义。
VSAN集群通过VSAN网络来检测主机是否有响应,在VSAN中网络检测可以替代心跳存储。

Q5_6:某个群集中的主机的 VSAN VMkernel 可以属于另一个子网吗?
答: VSAN VMkernel 必须属于同一个子网。不支持一个 VSAN 群集中的一个(或多个)主机位于不同的子网。
如果对每个主机使用多个 VMkernel 接口,则每个接口都必须属于不同的子网!
Q6: 关于许可详细问答
Q6_1:如何添加 Virtual SAN/VSAN 许可证呢?
答: VSAN 许可证是在群集级别应用的。打开 Web Client,单击已启用 VSAN 的群集,然后依次单击“Man
age(管理) ” 选项卡和“Settings(设置) ” 。在“Configuration(配置) ” 下,单击“Virtual SAN Licen
sing( Virtual SAN 许可) ” ,然后单击“Assign License Key(分配许可证密钥) ” 。

Q6_2: Virtual SAN 是如何进行定价/许可的呢?
答: VSAN 会按插槽进行许可,但定价详情尚未公开。请注意,当前 VSAN Beta 版许可证代码包括 DVS 和虚
拟机存储策略,即使使用低于 Enterprise Plus 的 vSphere 许可证也是如此。
Q7_1: FTT


见证主机数=允许故障数
Q7_2:如果主机出现故障,导致数据丢失,而所有虚拟机都受 N+1 策略保护,那么,需要多长时间, VSAN
才会开始重建丢失的数据呢?
答: VSAN 会确定哪些对象(即,受 N+1 策略保护并存储在该主机中的对象)不合规,然后启动一个 60 分钟
的超时时间段。此超时时间段是为了避免进行不必要且成本高昂的完整数据同步。如果主机在此 60 分钟内恢复,
则系统会将所产生的差异复制到该主机。如果虚拟机具有多个镜像,而未注意到此故障,则此 60 分钟时间段过
后,就会恢复为完整策略合规性,从而可以应对更多故障产生的影响。
答: 免责声明:建议不要更改该值
可以, 在vSAN 6.7 中,我们引入了新的全局群集范围设置。 在群集级别的“配置>> vSAN >>服务”下,
您现在可以选择为整个群集设置“对象修复时间”,而不是逐个主机进行设置。 希望这会使您的生活更轻松。

Q7_4:主机出现故障和磁盘逐渐出现故障有什么差别?
答:确实有差别。故障状态有多种,根据这些状态,还可以确定 VSAN 启动新镜像的速度有多快。其中两个故
障状态为“不存在” 和“已降级” 。已降级是指磁盘出现故障,而系统已识别此故障,并知道该磁盘尚未恢复。
在这种情况下, VSAN 会识别此“已降级” 状态,并立即为受影响对象创建一个新镜像,因为既然知道了磁盘不
会很快恢复,也就无需等待 60 分钟了。 “不存在” 状态是指, VSAN 并不知道该磁盘是否会很快恢复,可能是
主机出现故障,也可能是突然移动了磁盘,此时,系统会启动 60 分钟的超时。
Q7_5:如果在 VSAN 群集中 SSD 出现故障,会怎么样呢?
答: SSD 位于磁盘组的前面,充当读取缓存/写入缓冲区。如果 SSD 出现故障,则磁盘组及其所存储的所有组
件都会标记为已降级。然后,如果有足够的磁盘容量, VSAN 就会在适当情况下创建新的镜像副本。有关详细信
息,请阅读 http://www.yellow-bricks.com/2013/09/18/vsan-handles-disk-host-failure/
Q7_6: 见证作用
在 VSAN 允许故障数为 1 的策略场景下: VSAN 将创建两个完全一样的存储对象和一个见证对象。
见证是一个和虚拟机绑定的对象,用来帮助 vSAN 判断故障时谁将赢得所有权。可以理解为集群环境中的仲裁对象。
witness 在 vSan 中作为见证组件其作用类似于 WinServer 中的仲裁磁盘,当 Cluster 中某一节点发生故障时,来
判断该节点上的对象在哪一个新的节点上继续承载。此处需要强调的是, witness 针对的是对象而不是 host。以
vmdk 作为对象使用默认策略(stripe=1, FTT=1)为例,此时的至少需要三台 host 主机,分布如图所示:

此时我们看到除了 wmdk 有两个 replicas 之外,还有一个用于见证的 witness, witness 大小通常为 2M 左右,里
面存放着对象的 meta 数据,当任意一个节点发生故障时,剩余节点仍然可以继续提供服务。但经常我们会发现创
建完 vSan 后 witness 数量不止一个,这就要从 witness 的组件定义说起, witness 按照组件定义可以分为三种:
1.primary witness,当主机节点数不满足 storage police (存储策略)时,才会出现该 witness。举例说明,当 FTT=2 时,按照
要求此时至少需要 5 台 host,当前环境中的 host 主机只有 4 台,这时就会出现 primary witness,当环境中满足 5
台 host 后, primary witness 就会消失。
2.secondary witness,当故障发生后剩余的节点会产生选举,确定出哪一个新的节点承载原有节点上的 active 对
象,但每一个 host 主机上所承载的对象总数不会相同,此时的选举就处于一种不公平的状态, secondary witness
就是为了避免该状态的产生,让每一个 host 主机上的对象数量相同(只是对象的数量,而不管对象的大小), 需
要注意的是, secondary witness 是为了保证已经承载有对象组件的主机之间的组件数一致,不是群集中所有
ESXi 主机,结合上图得知 esxi-01 就不会产生 witness 组件。
3.tiebreaker witness,当进行完上述两步之后,为了保证总对象数量为奇数,此时会添加一个 tiebreaker witness
上述三种 witness 可能两两同时出现,也有可能只出现一种,仍以第一张图的环境举例说明:

FTT 与 stripe 都是 1,按正常情况每个 raid0 中应该只有 1 个对象,整个 raid1 为 2 个对象,但是在 vSan6.0 中每
个对象的最大值为 255G,所以在此处会将 wmdk 强行分割成 2 个对象,多余的 1G 被 meta 数据融合,于是整个
raid1 中就存在 4 个对象。此时要求至少需要 3 个节点,当前环境有 4 个 host 主机,所以 primary witness 就不会
出现,而每个 host 上都只有一个对象, secondary witness 也不会出现,所以此时只会看到 1 个 tiebreaker
witness。
场景二:

首先节点数满足要求,其次 wmdk 被分割成了 3 个对象,从 raid0 上能看出 esxi60 与 esxi80 上各有 2 个对象,
esxi50 和 esxi70 上只有一个对象,所以坐在 esxi50 和 esxi70 上各生成一个 secondary witness,从而使每个
host 上的对象数量一致,然后又因为此时的对象总数是 8 个, 所以还会再生成一个 tiebreaker witness 对象用于保
证总数为奇数,此时看到的 witness 总数就为 3 个。
最后说一下磁盘 UUID 的作用,以小于 255G 的 vmdk, FTT=1 为例,此时生成 vmdk 的对象数量为 2 个,为了避
免这 2 个对象被分到同一节点引发单点故障,所以会比对 uuid,将他们分配到不同的节点。
见证对象==允许的故障数 (例如: 故障数 3==见证对象 3 |故障数 0(没有冗余副本) ==见证对象 0 )
Q7_7: vSAN 故障域(fault domain)



