很久没有动笔写博客了。总算最近的几项工作告一段落,对iOS和Android的折腾也兴趣稍退,该写点技术博客了。

想写一篇关于VMware HA的博客由来已久,曾经做了些功课,查了不少资料,写了点笔记,但是终于因为各种原因没有成文。随着vSphere 5的发布,HA机制作出了不少调整,很有必要写一些了。本文(或许我可能还会就ESX4的HA机制和操作写上几篇,凑成一个系列)就是我的一点读书笔记整理而成。

注:谢绝不加引用和出处的恶意转载。谢绝百度文库任何形式的转载。

【什么是HA】

HA的英文是High Availability,高可用性。从字面上的意思就是一种让服务中断尽可能少的技术。VMware的HA和微软的MSCS(Win2008以后改称Failover Clustering)类似,都是将多台主机组建成一个故障转移集群(Cluster),运行在集群上的服务(或VM)不会因为单台主机的故障而停止。

用一个图来简单说明HA的工作原理:图中橙色的主机ESXi01宕机了,其上的2台虚拟机VM1和VM2就根据HA的调度被ESXi-02和ESXi-03这2台主机接管,并重启运行起来。

注:本文图片均截取自《VMware vSphere 5 Clustering Technical Deepdive》

但是要注意的是,HA(无论是VMware的HA还是MSCS)不是通常意义上的完全不中断服务的高可用性,HA只是一种自动的故障切换机制,当某一主机发生故障时,服务或VM(就配置了MSCS的Hyper-V来看,VM其实也被看作是一个服务)自动到另外的可用的主机上重启。这其实是一个中断然后重启的过程。就VM来说,看上去就好像是一台服务器突然被拔掉了电源线,然后又重新加电开机。这个故障然后重启的过程其实是比较长的,根据不同的VM而不同,少则1-2分钟,多的则可能达到5-6分钟。如果运行在一台缺乏资源的的主机上,这个时间可能更长。

【创建一个VMware HA】
创建一个VMware Cluster并启用HA的方法很简单。谷歌百度一下很容易找到一堆。这里不再赘述,过几天有空了我另外截些图单独写一篇Cluster创建图解的blog。

这里我想重点讲的是HA的原理。

【创建HA的前提】

一个通用的HA的集群通常有这么几个必要的条件组成:
* 2台或者更多台主机
* 这些主机共享一个外部存储
* VM是运行在共享存储上的
* 主机上至少有2个以上的网卡,其中一个需要负责传递“心跳”信号。

上面这些条件是大多数高可用性集群都需要的一致的。

此外,要成功配置VMware HA,还必须具备这么几个必要条件:
* 必须有vCenter Server(虽然没有vCenter HA也能发挥作用,但是创建Cluster的时候必须有vCenter的参与)

* 所有Host都必须有相同的vSwitch配置

特别要注意的是,对于ESX 4.x或之前版本,DNS是建立HA必要前提,所有Host都必须能够正确的解析其他node的DNS名字,将主机加入到一个集群也必须用其FQDN名。但是从vSphere 5开始,这已经不是必要的了,IP地址被直接用作HA集群的通信,这样减少了HA的依赖性,加快了HA的响应速度。

但是,因为VMware vSphere 5的其他一些服务和组件仍然需要DNS,使用FQDN虽然仍然是推荐做法。

【HA的组成部分】

vSphere 5的HA的组件有以下三个:

  • FDM
  • hostd
  • vCenter

FDM是Fault Domain Manager的缩写,它的前身在ESX4叫作AAM,是用来管理HA的最重要的一个组件。它负责cluster的心跳、主机之间的通信,和vCenter的通信、协调虚拟机的位置、调度虚拟机的重启、记录日志等等。

hostd负责监控直接和虚拟机打交道,例如让虚拟机开机、监控虚拟机的状态等。FDM需要hostd的帮助来完成对虚拟机的操作(例如开机)。简而言之,FDM依赖hostd,如果hostd失效了,FDM也会暂停工作。

vCenter是企业中虚拟架构的集中管理平台,HA虽然不依赖它运转,但是在组建HA cluster的时候必须通过vCenter来发起。它的主要作用是,在主机上安装HA的Agent(指FDM和hostd agent),在Cluster配置更改的时候通知各主机。

【Master和Slave】

ESX4的时候,节点分成Primary和Secondary,最先加入cluster的5个节点成为Primary,并各自存有一份AAM Database。

vSphere 5对此进行了简化。现在不再有Primary和Secondary的概念了,取而代之的是Master和Slave。一个Cluster中只有一台Master,其余都是Slave。

Master的作用是管理整个集群,作为集群的主要管理者,它监控虚拟机的运行状态,判断某一个主机是否宕机,它监控每个VM的位置,并判断VM是否需要在其他主机上重启。对于一个集群来说,Master是其上所有虚拟机的“主人”。

在哪里可以看出主机是否Master?参见下图

没有Master的集群就会群龙无首,群龙无首的集群就fail了。

当Master失效时怎么办?集群不能没有Master,因此Master的选举会马上被触发。

【Master的选举】
选举会在以下情况被触发:

  • HA创建时;
  • Master宕机;
  • Master处于isolated或者集群出现了partitioned状态;
  • Master被置于维护状态或Standby状态;
  • 集群被重新配置时;
  • Master和vCenter失去了联系;

选举需要15秒时间。选举通过UDP协议(端口8182)进行。
选举的规则是:拥有最多的datastore的主机当选。如果主机拥有的datastore一样多,那么Managed Objective ID号最大的那台主机当选。

(注:这里的最大不是数值最大,而是从左向右比较依次比较每一位上的数字的大小,例如99就比100大,因为第一位的数字首先比较,9大于1)

【Master伸张其主权】

当选后,新的master会伸张其主人的权力,试图接管所有datastore。

Q: 如何接管?(或者说怎样才算接管了datastore)
A: 通过锁定(lock)一个文件的方式,这个文件存在每个datastore上,名字叫“protectedlist”

该文件的位置是: 
    /<root-of-datastore>/.vSphere-HA/<cluster-specific-directory>/protectedlist

这个文件里面存放的是受HA保护的VM列表。

若Master坏掉,则其lock会过期,新当选的master就可以接管这个文件,并重新上锁。

Master还负责监控Slave的状态,如果发现slave不响应其心跳,则会判断是否要重启slave上的虚拟机。

Slave之间是不相互通信的,除了选举Master的时候。

(未完待续)
(码字好累啊,先睡觉去,明天再继续)

本文出自 “三角阳台的技术笔记本” 博客,请务必保留此出处http://delxu.blog.51cto.com/975660/717516

【转载】VMware vSphere 5 HA详解 1的更多相关文章

  1. VMware里Ubuntukylin-14.04-desktop的VMware Tools安装图文详解

    不多说,直接上干货! 总的来说,根据分为三个步骤. 步骤一: 点击 :虚拟机—–>安装VM tools 然后发现桌面会跳出如下问题: 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 ...

  2. VMware里Ubuntu-14.04-desktop的VMware Tools安装图文详解

    不多说,直接上干货!    前期步骤,请见如下 VMware里Ubuntukylin-14.04-desktop的VMware Tools安装图文详解 我这里,直接,是来说明,Ubuntu-14.04 ...

  3. VMware里Ubuntu-16.04-desktop的VMware Tools安装图文详解

    不多说,直接上干货! 总的来说,根据分为三个步骤. 步骤一: 点击 :虚拟机—–>安装VM tools 然后发现桌面会跳出如下问题: 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 ...

  4. [转载]java中import作用详解

    [转载]java中import作用详解 来源: https://blog.csdn.net/qq_25665807/article/details/74747868 这篇博客讲的真的很清楚,这个作者很 ...

  5. [转载]AxureRP 7.0部件详解(一)

    本文为Axure RT7.0教程,本章主要介绍menu菜单.table表格.Tree Widget 树部件三个部件,后续将持续更新...... Menu 菜单 常用案例 网站导航菜单部件通常用于母板之 ...

  6. 【转载】Hadoop历史服务器详解

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:过往记忆(http://www.iteblog.com/)     原文地址: ...

  7. 转载:DNS解析过程详解

    2015-09-20 此好文是转载,如有侵权联系我,立马删掉 DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baidu.com在配置当中应该是www.baidu.com. ...

  8. 转载:MySQL EXPLAIN 命令详解学习

    转载自:https://blog.csdn.net/mchdba/article/details/9190771 MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查 ...

  9. VMware创建虚拟机教程详解及问题解决

    关于VMware Workstation Pro虚拟机创建教程,本教程主要详细描述使用软件VMware Workstation Pro建虚拟系统过程中步骤详解,以及个人安装时所出现部分问题的解决方案. ...

随机推荐

  1. SQLite内存数据库操作类

    using System; using System.Collections; using System.Collections.Generic; using System.Data; using S ...

  2. linux环境变量 export命令详解

    由host $ export DVSDK="${HOME}/ti-dvsdk_dm368-evm_xx_xx_xx_xx"引发的问题 1.${HOME}:首先, HOME 是个变量 ...

  3. 将springboot项目发布到独立的tomcat中运行

    在开发阶段我们推荐使用内嵌的tomcat进行开发,因为这样会方便很多,但是到生成环境,我希望在独立的tomcat容器中运行,因为我们需要对tomcat做额外的优化,这时我们需要将工程打包成war包发进 ...

  4. angularjs控制器之间的数据共享与通信

    1.可以写一个service服务,从而达到数据和代码的共享; var app=angular.module('app',[]); app.service('ObjectService', [Objec ...

  5. django自强学堂地址

    https://code.ziqiangxuetang.com/django/django-install.html

  6. 自已开发完美的触摸屏网页版仿app弹窗型滚动列表选择器/日期选择器

    手机端网页版app在使用下拉列表时,传统的下拉列表使用起来体验非常不好,一般做的稍好一点的交互功能界面都不会直接使用下拉列表,所以app的原生下拉列表都是弹窗列表选择,网页型app从使用体验上来当然也 ...

  7. C++(三十三) — 全局函数、成员函数的区别

    区别: (1)全局函数的参数个数,比局部函数要多一个: (2)二者都可,返回元素.返回引用. class test { public: test(int a, int b) { this->a ...

  8. Java的序列化机制

    1. 所有实现序列化的类都必须实现Serializable接口,序列化有如下两个特点: 如果一个类可以被序列化,那么它的子类也可以被序列化 由于static代表类成员,trasient代表对象的临时数 ...

  9. macOS和常用命令

    macOS 常用命令 1. 显示“任何来源”选项 sudo spctl --master-disable 2. 阻止屏保和睡眠 caffeinate -t 3600 这是一个BSD命令.-t可选,按C ...

  10. 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    selenium模块 selenium模块为第三方模块需要安装,selenium模块是一个操作各种浏览器对应软件的api接口模块 selenium模块是一个操作各种浏览器对应软件的api接口模块,所以 ...