凡是企业关键应用都对可用性有严格的要求,因为短时间的业务中断就可能给客户造成不可估量的损失。举例来说,如果某宝或者某东的网站有几分钟不能访问,相信损失不下百万,并且一定能成为新闻热点。
图1系统高可用基本示意图由此可以看出,对于大型企业的关键应用,可用性是最为重要的指标。常规的高可用架构如图1所示,本文以2台服务器为例进行介绍,通常为1主1备,通过集群管理软件进行管理。正常情况下主服务器通过虚拟IP对外提供服务,当主服务器出现故障(故障包括业务软件崩溃、网卡故障、访问数据库异常和访问后端存储异常等等)时,集群管理软件将业务切换到备服务器。由图1可以看出,由于服务端通常是要有数据的,而为了保证切换后服务的完整性,显然数据必须一致,因此高可用架构的服务器通常要有一个共享存储(后面介绍没有共享存储的方案)。
企业应用的高可用设计除了业务软件必须考虑容错外,还需要依赖很多外部软件,比如存储数据的数据库等。这些被依赖的软件也要考虑容错。对于数据库来说,其中OracleRAC就是数据库高可用的解决方案。
如果钱不是问题自然可以考虑商用软件,但商用软件毕竟价格不菲。因此,本文将介绍一些在实际生产环境中经常用到的开源、免费的高可用软件。
集群管理软件
首先介绍一下什么是集群,集群就是通过软件将一组服务器作为一个整体向客户提供资源的服务器集合。而单个的服务器就是集群的节点。集群的一个显著特点是其通过多个节点提高业务的可用性和负载能力,当对外提供资源的节点故障后,集群中其余的节点能够将资源接管起来,继续对客户提供资源。
集群管理软件,顾名思义就是对集群进行管理的软件。由于在一个集群中运行这各种软件,而且又依赖各种资源,因此需要用一个软件进行管理,并且能够应对各种故障。比如在网络链路出现故障时如何处理、磁盘故障是如何处理、进程崩溃时如何处理等等。
关于集群管理软件,商业的很多,诸如VCS和BCP等,本文介绍几款比较著名的开源集群管理软件。目前在生产中用的比较多的是Linux-HA(又叫Heartbeat)和keepalived。
Heartbeat
Heartbeat是一个比较老牌的集群管理软件,最新版本是V3.0,也称为Heartbeat3。目前该项目被拆分为多个子项目,包括Heartbeat、Pacemaker和ClusterGlue等。通过Heartbeat,可以实现对服务器资源(ip以及程序服务等资源)的监控和管理,并在出现故障的情况下,将资源集合从一台已经故障的计算机快速转移到另一台正常运转的机器上继续提供服务。
图2Heartbeat整体架构Keepalived
Keepalived也是一款高可用集群管理软件,其基本功能与Heartbeat非常类似,它的功能主要包括两方面:
1)通过IP漂移,实现服务的高可用:服务器集群共享一个虚拟IP,同一时间只有一个服务器占有虚拟IP并对外提供服务,若该服务器不可用,则虚拟IP漂移至另一台服务器并对外提供服务;
2)对LVS应用服务层的应用服务器集群进行状态监控:若应用服务器不可用,则keepalived将其从集群中摘除,若应用服务器恢复,则keepalived将其重新加入集群中。
Keepalived可以单独使用,即通过IP漂移实现服务的高可用,也可以结合LVS使用,即一方面通过IP漂移实现LVS负载均衡层的高可用,另一方面实现LVS应用服务层的状态监控,如图所示:
图3Keepalived架构示意图Keepalived原理
Keepalived的实现基于VRRP(VirtualRouterRedundancyProtocol,虚拟路由器冗余协议),而VRRP是为了解决静态路由的高可用。VRRP的基本架构如图所示:
图4Keepalived基本原理虚拟路由器由多个VRRP路由器组成,每个VRRP路由器都有各自的IP和共同的VRID(0-),其中一个VRRP路由器通过竞选成为MASTER,占有VIP,对外提供路由服务,其他成为BACKUP,MASTER以IP组播(组播