概述
相信大家都知道怎么在vSphere环境中配置HA功能,知道HA故障切换时间为VM系统启动时间+应用启动时间+15秒左右的心跳检测时间,知道HA不受DRS和vMotion影响,知道HA不需要依赖vCenter(vCenter挂了,License授权ESXi主机只有3天,之后虚拟关闭后无法开启),知道HA是通过ESXi主机的管理网路进行心跳检测故障,那么您是否知道HA是怎样实现虚拟机自动故障切换?下面就是我要讲的HA功能的深入解析,首先来看一张HA组件图,如图1-1所示。
图1-1 HA组件图
VPXA
VPXA是非常重要的组件,它不是HA的代理,它是vCenter的代理,它允许vCenter服务器和ESX主机进行内部通信,在必要的时候,它还可以关闭或者开启ESXi主机上的虚拟机。
尽管是在vCenter Server上配置的HA功能,但HA和vCenter Server之间是一种松耦合的结构,所以HA功能也不必完全让vCenter Server来管理,大家很容易会想到这样一个例子,当vCenter Server虚拟服务器所在的ESXi主机发生故障时,HA功能仍然生效,它可以使vCenter Server在另一台主机上启动,当然故障主机上的其它虚拟机也会在另一台主机上启动。
我们会建议,当vCenter Server所在的ESXi主机发生故障时,应该设置vCenter Server在另一台主机上最优先的启动,这样当有些虚拟机与vCenter有依赖关系时,vCenter优先运行可以避免它们之间发生关联问题。
另外强烈建议在配置ESXi主机时写入主机的完全域名名称,如XX.domain.com,vCenter提供了HA功能所需的名称解析,HA存储在本地的文件叫“FT_HOSTS”,换句话说,我们建议HA不必在本地创建主机文件,如果用静态名称(不能解析),这样不灵活且不方便排错。
VMAP Plug-in
在图中的下一个组件是VMAP,大家知道VPXA是用来支持vCenter和ESXi主机进行通信的,而VMAP是HA Agent(AAM)和VPXA之间的信息传递者,当VPXA想要同AAM进行通信,VMAP就翻译成可以理解的指令传给AAM,一个很好的例子用来体现VMAP怎样传递虚拟机的状态信息,虚拟机的运行和关闭,在vSphere4.0之前它是VPXA的一个独立的插件,当群集中添加HA功能时,VMAP被加载到VPXA中。
VPXA与VMAP通信,VMAP与AAM通信,当AAM收到指令,马上把该信息传递给VMAP,VMAP把该指令转到VPXA,VMAP插件在同AAM通信中扮演者代理的角色。
那么你可能会疑惑,为什么我们需要VMAP?难道有些工作VPXA或者AAM不能够完成么?答案是肯定的,不管VPXA还是AAM都可以做到这个功能,但是,在介绍HA时,为了设计HA架构更为合理,从而建立了一个单独的组件,也就是衍生出的VMAP插件。
AAM
接下来是我们的最后一个组件,AAM Agent,AAM agent是HA功能的核心,全称“Automated Availability Manager”,如上所述,AAM最早是Legato开发的,它承担着很多任务,如主机资源信息交换,虚拟机状态搜集,群集主机上HA的属性搜集,AAM 存储所有的信息到数据库中,并在所有的HA主节点见同步数据(HA主节点接下来的内容再讲),大家经常提到HA功能只是用内存中保存的数据,其实并非如此,在本地磁盘和闪存中也同样存有数据。
AAM还承担着HA的心跳检测任务。
当我们开启HA功能,所有以上的作用使得AAM成为ESXi主机上最重要的组件之一,工程师们认识到它的重要性,从而会提高对HA的了解。AMM agent是多线程工作的,每个工作任务都像监控狗一样监视着其它工作任务,如果其中一个任务被监控狗发现死掉了,监控够会抓取它并重新启动该任务,以确保HA功能正常,而不会出现失败警告。它还可以反馈网络中断和组件运行失败。网络通信中断后,群集内主机自动用另一个路径进行通信(配置了管理网络冗余的情况下),底层消息框架会保证消息精准传递。
结论
如下图所示1-2所示,当左侧ESXi主机当机后,右侧节点AAM通过心跳检测到信号丢失,将之前同步的AAM中的虚拟机信息通知VMAP,VMAP通知VPXA,VPXA将信息传递给vCenter,vCenter通知VPXA执行虚拟机开启操作。
1-2 HA执行步骤
备注:以上HA的架构是根据vSphere 4.1版本进行介绍的,而5.1版本的俺还木有找到相关资料,如有会详细更新,谢谢支持。