HA定义:
HA指高可用性,是一种通过软件和硬件技术实现的高可用性解决方案。它可以确保在系统出现故障或中断的情况下,系统仍然能够正常运行,从而保证业务的连续性和可靠性。HA通常包括负载均衡、故障转移、数据复制等功能,可以应用于各种企业级应用场景,如Web服务器、数据库服务器、应用服务器等。
通俗意义上的“单活”:Active/Passive:主要包括一台活动提供服务的服务器和一台待命不对外提供服务的服务器,
通俗意义上的“双活”:Active/Active:两台(或N台)同时运作,每台机器可以跑一个运行的实例,当一台机器出现宕机时,就会将运行的实例切换到另外一台机器上去,那么另外一台机器就会运行两个实例,AA模式保证了两台机器资源都被利用。
2. HA集群的衡量标准
HA集群是通过系统的可靠性(reliability)和可维护性(maintainability)这两个指标来度量的。通常地,在工程上常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是高可用性可被定义为:𝐻𝐴=𝑀𝑇𝑇𝐹/(𝑀𝑇𝑇𝐹+𝑀𝑇𝑇𝑅)×100%,其中,HA的常用衡量标准如下:
99% ,指一年宕机时间不超过4天。
99.9% ,指一年宕机时间不超过10小时。
99.99% ,指一年宕机时间不超过1小时。
99.999% ,指一年宕机时间不超过6分钟。
通常地,在工程上大部分企业通常追求年业务正常率达到99.99%,即一年最多只允许约52分钟的故障率。
3.HA集群工作原理
在介绍HA集群工作原理之前,先介绍下心跳线和隔离方法,以便更容易对HA集群工作原理的进行了解。
心跳线
心跳线也主要分为串行电缆和以太网线。串行电缆被认为是比以太网连接安全性稍好的连接方式,因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序,从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线缆受限于可用长度,因此主、备服务器的距离必须非常短。以太网线连接,可以消除串行线缆的在长度方面限制,并且可以通过此连接在主/从服务器之间同步文件系统,从而减少了对正常通信连接带宽的占用。
隔离方法
隔离方法主要有两种,一种是节点隔离,另一种是资源隔离。节点隔离就是我们常说的STONITH(Shoot The Other Node In the Head ,俗称“爆头”),意思就是直接切断电源。常用的方法是将所有节点都接在一个电源交换机上,如果某一个节点发生故障,就直接导致该节点的电压不稳定或断电,让有故障的节点重启或关闭。而资源隔离就是通过fencing方式直接把某种资源截获过来。
以主/从MySQL服务器为例,主服务器和从服务器建立双机热备,基本上都是共享一个存储。通常情况下,数据库文件挂载在主数据库服务器上,用户连接到主服务器上进行数据库操作。当主服务器出现故障时,从服务器就会自动挂载数据库文件,并接替主服务器的工作。用户在未接到通知的情况下,可以通过从数据库连接到数据库文件进行操作,等到主服务器的故障修复之后,又可以重新提供服务。
那么,从服务器是如何知道主服务器挂掉了呢?这就需要使用心跳检测机制,也就是让每一个节点都会定期向其他节点通知自己的心跳信息,尤其是主服务器,如果从服务器在几个心跳周期内(可自行设置心跳周期)还没有检测到心跳信息的话,就认为主服务器宕掉了,而这期间在通知心跳信息时通常采用udp协议来进行传递信息。
另外,如果主服务器在某一段时间内由于服务繁忙,没时间响应心跳信息,这个时候从服务器如果把主服务器的资源抢过去(共享数据文件),但是这个时候主服务器还没有宕掉,这样就会导致资源抢占,这样的话,用户在主服务器和从服务器上都能访问,如果仅仅是读操作不受影响,但如果包含写操作就会导致文件系统崩溃,因此,在资源抢占的时候,可以采用一定的隔离方法来实现,即当从服务器抢占资源的时候,直接把主服务器给“STONITH掉”,即常说的“爆头”现象。
4.HA的实现方式
高可用性的实现的另一大关键就是的冗余策略,简言之就是对主机,网络设备,备份设备的多台备份(当然不只是简单的备份机)。
HA拥有多种冗余模式,其中包括双机在线待机模式、双机就绪模式及三机模式。所有的模式都提供了对各种备份资源-如文件系统、数据库、网络IP地址、系统进程、SCSI设备及NFS-的支持。此外,高可用性的实现还要有丰富的应用程序支持:LATCH HA能够应用在各种集中式、客户机-服务器模式或OLTP系统中。同时其与市场上各种主流的数据库系统与OLTP软件-如Oracle、 SYBASE、 Informix与Tuxedo-也都保持兼容。LATCH HA同时提供了各种应用程序接口。
网络
每一台服务器有两个网卡,每一个网卡都会两个逻辑节点bond0和bond1。Bond0用于与外部服务器通讯,提供对外服务。Bond1用于内部heartbeat通讯。服务器与任何一个路由器之间出现问题,linux会快速切换到另外一条链路。高层应用程序使用冗余的链路进行通讯。
尽管有两条链路,但是在任何时刻,只有一条能收发数据。网络冗余不仅适用hadoop name node,它还适用于mysql和任何要求HA的地方
硬件
电源:采用双路供电
磁盘:可以分为RAID0、RAID1、RAID5等
RAID0:又称为stripe或者striping,代表了RAID级别中最高的存储性能,原理就是把连续的数据分散到多个磁盘上进行存取,这样,系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求,这样可以充分利用总线的带宽。
RAID1:通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据,当原始数据繁忙时,可直接从镜像拷贝中读取数据,这样就提高了读取性能,并保证了数据的可靠性和安全性。当一个磁盘失效时,系统就可以自动切换到镜像磁盘上读写。
RAID5:可以理解为RAID0和RAID1的折中方案,可以为系统提供数据安全保障,但保障程度要比mirror低,而磁盘空间利用率要比mirror高。
RAID10:主要是一个RAID0和RAID1的结合,利用奇偶校验实现条带集镜像,继承了RAID0的快速和RAID1的安全
网卡:(bonding,双路)在linux服务器上可以利用bonding技术,将多个网卡当做一个网卡使用,不仅提高了带宽而且提高了可用性。
交换机:LACP、VRRP
LACP(Link Aggregration Control Protocol,链路汇聚控制协议):是一种实现链路动态汇聚的协议,LACP协议通过LACPDU(LACP Data Unit,链路汇聚控制协议数据单元)与对端交互信息。当启用某一端口的LACP协议后,该端口将发送LACPDU向对端通告自己的系统优先级,系统MAC地址,端口优先级,端口号和操作Key。对端接受到这些信息后,将这些信息与其他端口所保存的信息比较以选择能够汇聚的端口,从而双发可以对端口加入或退出某个动态汇聚组达成一致。
虚拟路由冗余协议(Virtual Router Redundancy Protocol,简称VRRP)是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,VRRP广泛应用在边缘网络中,它的设计目标是支持特定情况下IP数据流量失败转移不会引起混乱,允许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍能够维护路由器间的连通性。
软件
协议:HTTP、广播
负载均衡:LVS、haproxy、nginx
LVS 采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
Nginx 是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。