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++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...
随机推荐
- MySQL Group Replication 介绍
2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式推出Group Replication(组复制) 插件,通过这个插件增强了MySQL原有的高可用方案(原有的Replica ...
- WPF中Style文件引用另一个Style文件中的样式
第1种方法: 直接在当前Style文件(*.xaml)文件中使用: <ResourceDictionary.MergedDictionaries>来进行合并 <!-- 关键是注意so ...
- android studio导入android studio工程
在导入其他android studio工程的时候因为gradle和sdk.tool等版本不一样,会导致android studio自动去后台下载,导致占用硬盘越来越大,最主要的时候会等待很久,不知道要 ...
- Cannot find module 'rxjs/operators/share'
描述: ionic项目,在使用了ngx-translate之后,项目编译完成,运行到浏览器时,出现如下错误: 其中ngx-translate参照官网最新教程使用,并且也尝试了angular4.3之前的 ...
- WinForm-SuspendLayout、ResumeLayout、PerformLayou——转载
WinForm-SuspendLayout.ResumeLayout.PerformLayou——转载 https://www.cnblogs.com/si-shaohua/archive/2011/ ...
- winform httplicent调用API
绑定datagriview Uri uri = new Uri("http://localhost:49423");//地址 HttpClient clien ...
- 使用auth_request模块实现nginx端鉴权控制
使用auth_request模块实现nginx端鉴权控制 nginx-auth-request-module 该模块是nginx一个安装模块,使用配置都比较简单,只要作用是实现权限控制拦截作用.默认高 ...
- 关于vue.js中slot的理解
slot这块看官网文档,起初有点不懂,仔细研究还是最终理解了,slot是用来干嘛的呢,先看下一个例子: <script src="https://unpkg.com/vue/dist/ ...
- golang学习之接口型函数
先说下使用接口型函数的好处: 1.不必将某个接口函数附在某个type上面,保证了命名随意 2. 可以直接调用函数或者使用该接口,两两不耽误 直接上代码吧: // interface_func proj ...
- 1、类、封装(私有private、this关键字)
类与对象 对象在需求中的使用 对面向对象有了了解之后,我们来说说在具体问题中如何使用面向对象去分析问题,和如何使用面向对象. 我们把大象装冰箱为例进行分析. 在针对具体的需求,可以使用名词 ...