HA是什么,它的工作原理是什么

HA是什么,它的工作原理是什么,第1张

以下引自新浪 sunny的博客

原文链接:http://delxu.blog.51cto.com/975660/717516

delxu原创

HA的工作原理

想写一篇关于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”

该文件的位置是:

//.vSphere-HA//protectedlist

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

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

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

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

四层负载均衡指的是负载均衡设备通过报文中的目标IP地址和端口负载均衡算法,选择到达目的的内部服务器,其主要工作在OSI七层模型的第四层(传输层)。四层负载均衡对数据包只是起一个数据转发的作用,并不会干预客户端与服务器之间应用层的通信

七层负载均衡,也被称为“内容交换”,指的是负载均衡设备通过报文中的应用层信息(URL、HTTP头部等信息)和负载均衡算法,选择到达目的的内部服务器。

1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低

2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。

2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)

3、应用范围比较广,工作在四层,所以不用考虑要处理的具体应用,可以对所有应用做负载均衡;

4、不支持正则处理,不能做动静分离。

5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)

6、配置复杂,对网络依赖比较大,稳定性很高。

1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;

2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;

3、Nginx安装和配置比较简单,测试起来比较方便;

4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;

5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。

6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;

7、Nginx仅能支持http、https和Email协议,适用范围较小。

8、不支持Session的直接保持,但能通过ip_hash来解决。

9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)

10、Nginx还能做Web服务器即Cache功能。

1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

3、支持url检测后端的服务器出问题的检测会有很好的帮助。

4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现

5、单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度。

6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。

9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)

10、不能做Web服务器即Cache

虚拟机Server(CentOS 7系统)即作为nginx服务器又作为Tomcat服务器,适配两个网卡端口,外网IP:192.168.10.199,内网IP:192.168.163.200,客户端发来的请求首先经由nginx处理,如果为静态内容则直接由nginx响应,如果为动态内容,则由nignx反代至后端的Tomcat服务器组并做负载均衡.


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/489628.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-13
下一篇2023-06-13

发表评论

登录后才能评论

评论列表(0条)

    保存