vSan中见证组件witness详解
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详解的更多相关文章
- LotusPhp中配置文件组件LtConfig详解
LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ...
- unity3d中Transform组件变量详解
Transform组件是每个游戏对象必须有的一个组建,因为你创建一个空物体,它也有该组建,因为unity3d是面向组建开发的一款游戏引擎.通过一张图片来看看它的属性 你可以在通过代码查看这些属性的区别 ...
- iOS中MVC等设计模式详解
iOS中MVC等设计模式详解 在iOS编程,利用设计模式可以大大提高你的开发效率,虽然在编写代码之初你需要花费较大时间把各种业务逻辑封装起来.(事实证明这是值得的!) 模型-视图-控制器(MVC)设计 ...
- vue-cli 中的 webpack 配置详解
本篇文章主要介绍了 vue-cli 2.8.2 中的 webpack 配置详解, 做个学习笔记 版本 vue-cli 2.8.1 (终端通过 vue -V 可查看) vue 2.2.2 webpack ...
- tomcat中server.xml配置详解(转载)(一)
转载自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置详解 Tomcat Server的结构图如下:(该文件描述了如 ...
- [安卓基础] 009.组件Activity详解
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- react第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制)
第五单元(事件系统-原生事件-react中的合成事件-详解事件的冒泡和捕获机制) 课程目标 深入理解和掌握事件的冒泡及捕获机制 理解react中的合成事件的本质 在react组件中合理的使用原生事件 ...
- C#中string.format用法详解
C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...
- c++中vector的用法详解
c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
随机推荐
- 字符编码的来源,ascii、unicode和utf-8编码的关系
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...
- python-fork聊天室
服务端 #!/usr/bin/python from socket import * import sys import os class Node(object): def __init__(sel ...
- JavaScript设计模式-4.继承和聚合
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Js 中的false,零值,null,undefined和空字符串对象
转自 http://www.imkevinyang.com/2009/07/javascript-中的false零值nullundefined和空字符串对象.html 在Javascript中,我们 ...
- Idea中找不到xml配置文件问题研究以及classpath设置(转载)
问题: 在用Idea建立一个Java Application工程的时候,应用了Spring框架,可是Spring的xml配置文件找不到.检查表明不是代码的问题.费了我好长时间才解决. 出现问题,我 ...
- java中string的replace和replace的区别
乍一看,字面上理解好像replace只替换第一个出现的字符(受javascript的影响),replaceall替换所有的字符,其实大不然,只是替换的用途不一样,简而言之,replace用新串序列替换 ...
- 深入redis内部--实现字符串
redis字符串的定义和实现在Ssd.h和Ssd.c中. 1.定义 typedef char *sds; //本质是字符char的指针 2.字符串的操作 sds sdsnew(const char * ...
- MyEclipse部署web项目的关键
我自己的经验: 主要有3点: 自己的代码要正确 数据库服务确保已经启动 确保你的访问路径是正确的 1.自己的代码要正确 比如jdbc驱动,正确的写法:private static final Stri ...
- Jquery Ajax 复杂json对象提交到WebService
在ajax的已不请求中,常常返回json对象.可以利用json.net给我们提供的api达到快速开发. 例子: using System;using System.Collections;using ...
- HTML基础-常用标签及图片
标记/标签{元素} 双标签: <标签>内容</标签> <html></html> 网页 页面的根元素 <head></head& ...