原文:http://cormachogan.com/2014/04/01/vsan-part-21-what-is-a-witness/

         到现在,VSAN 发布通用版才几个星期,虽然我们 VMware 的许多人已经为此工作了一两年(或更长时间)。有时在解释存储对象、组件等的详细信息时,我们会忘记这一切对很多人而言都是新事物。在最近的文章中,有人要我解释 VSAN 上见证的概念是什么。回头看我自己的文章,我惊讶地意识到自己还没有对此做过解释。这就是这篇文章的目的:解释 VSAN 上的见证磁盘是什么,以及见证磁盘的角色。

        要理解见证,熟悉群集会有很大帮助。许多读者已经熟悉基本的群集技术。如果我们以 Microsoft 群集 (MSCS) 为例,简单的双节点群集也有仲裁或见证磁盘的概念。每个主机/节点都有一张选票,见证磁盘也有。如果一个节点出现故障,或者出现裂脑情况,即节点继续运行,但无法再相互通信,群集中留下的节点会竞争着在见证磁盘上放置 SCSI 预留。获胜的节点会得到两张选票 – 自己的一张和见证的一张。所以说会有仲裁:继续提供群集服务还是取代发生故障的节点继续运行服务。


       虚拟机有可用性机制 – 它们不会为参加 VSAN 群集的 ESXi 主机/节点提供可用性机制。这是我在过去碰到的一种误解。

       第二个需要强调的要点是,组成虚拟机存储对象的组件需要有 50% 可用,该对象才能保持可用性。如果 VSAN 中所有节点范围内对象的可用组件少于 50%,则该对象在 VSAN 数据存储中将不再可用。在确保对象有超过 50% 的组件可用方面,见证扮演了重要角色。您可以在这篇早前的文章中阅读有关组件和对象的更多信息


      现在我们以 VSAN 数据存储上部署的一个简单的虚拟机为例。即使我们没有创建策略,而是使用了默认策略,VSAN 数据存储上部署的这台虚拟机的磁盘 (VMDK) 也会获得允许的故障数目 (FTT) =1 的功能。这意味着这个 VMDK 将创建两个副本,每个副本放置在不同的 ESXi 主机上,使得数据在群集出现单个故障时仍有一个副本可用。这其中的每个副本都是 VMDK 存储对象的一个组件。现在有两个问题需要提出:第一,VSAN 如何处理裂脑/网络分区?第二,我们如何才能确保主机/磁盘发生故障时这个 VMDK 对象有 50% 的组件可用?这就是见证的角色。

       除了创建VMDK 的两个副本,系统也会创建对象的第三个组件。这就是见证磁盘。它是纯粹的元数据,只占用 2MB 的磁盘空间。现在,在一个 3 节点群集中,如果 VMDK 的副本放置在 host1  host2 上,则见证会被放置在 host3 上。这意味着,如果任何一个主机发生故障,我们仍有一份数据副本可用,我们仍有超过 50% 的组件可用。如果出现网络分区或裂脑,一侧分区有 2 个节点,另一侧分区有一个节点,那么仍然有一个分区会拥有超过 50% 的组件。下图所示为虚拟机上的一个 VMDK(硬盘 1),该 VMDK 允许的故障数目被设置为 1

wKioL1OVIxfA3NdyAAMIgvPfPHY545.jpg

 

      组件共有 3 个;个副本,个见证。所有 3 个组件都放置在群集的不同的主机上。

       这就是一个最简单的示例。如果使用 StripeWidth 功能或将 FFT 设置为大于 1 的值,许多人会发现系统创建了大量额外的见证。需要记住的一点是,虚拟机的虚拟机存储策略中功能要求不同,见证的数量也会发生改变,见证的分布也会不同。


       


————————————————————————————————————————————


作者:Cormac Hogan

CormacHogan 现任VMware R&D 的集成工程团队存储架构师。他是爱尔兰科克郡 EMEA 总部的首批 VMware 员工之一(该总部于 2005  4 月成立),曾在 VMware 技术营销与支持部门任职。他撰写过大量关于存储的白皮书,还发表了许多关于存储最佳实践和新功能的演讲。