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,将他们分配到不同的节点。

vSan中见证组件witness详解的更多相关文章

  1. LotusPhp中配置文件组件LtConfig详解

    LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ...

  2. unity3d中Transform组件变量详解

    Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...

  3. iOS中MVC等设计模式详解

    iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...

  4. vue-cli 中的 webpack 配置详解

    本篇文章主要介绍了 vue-cli 2.8.2 中的 webpack 配置详解, 做个学习笔记 版本 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack ...

  5. tomcat中server.xml配置详解(转载)(一)

    转载自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置详解 Tomcat Server的结构图如下:(该文件描述了如 ...

  6. [安卓基础] 009.组件Activity详解

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  7. react第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制)

    第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制) 课程目标 深入理解和掌握事件的冒泡及捕获机制 理解react中的合成事件的本质 在react组件中合理的使用原生事件 ...

  8. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  9. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

随机推荐

  1. Cobbler无人值守安装linux系统

    简介 Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装.重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等. Cobbler可以使用命令行方式管理,也提 ...

  2. WPF获取程序版本号(Version)的方法

    1.第一种:通过System来获取 public static Version GetEdition() { return System.Reflection.Assembly.GetExecutin ...

  3. 【LeetCode题解】7_反转整数

    目录 [LeetCode题解]7_反转整数 描述 方法一 思路 Java 实现 类似的 Java 实现 Python 实现 方法二:转化为求字符串的倒序 Java 实现 Python 实现 [Leet ...

  4. select2和bootstrap模态框一起使用导致select2的input获取不到焦点问题

      select2和bootstrap模态框一起使用导致select2的input获取不到焦点问题 解决办法: 把页面中的 tabindex="-1" 删掉, 或者值改为1 代码片 ...

  5. switch case :在JDK 7中,又加入了对String类型的支持,从此不用再写If-Else来判断字符串了

    switch的case语句可以处理int,short,byte,char类型的值, 因为short,byte,char都会转换成int进行处理,这一点也可以从生成的字节码看出. char a = 'e ...

  6. C# 空合并运算符 ??

    C#语言中,??运算符称为空合并运算符: a??b形式的空合并表达式要求a为可以为null的类型或引用类型.如果a为非null,则a??b的结果为a:否则,结果为b.仅当a为null时,该操作才计算b ...

  7. 简单封装axios api

    可以在代码逻辑中写axios请求,处理请求结果,但是随着项目越来越大,代码会很繁琐,不容易维护,所以,可以把一些在所有请求中都要处理的逻辑抽取出来,封装成api方法.比如每次请求中都要判断是否有权限, ...

  8. WPF月视图控件

    简介 在做一个应用时,需要做成日历月视图的形式.自己做较麻烦,于是上网找找看,在CodeProject上发现了这个Quick and Simple WPF Month-view Calendar,可是 ...

  9. 小菜庄园 Spring------图片的上传和下载

    1.图片的上传前台三个条件 文件上传页面的3个要求:            < 1.表单提交为post.mothod="post"            < 2.表单的 ...

  10. HDU 1575 Tr A----矩阵相乘题。

    Tr A Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...