什么是高可用性?

来自菜鸟教程
跳转至:导航、​搜索

介绍

随着对旨在为关键系统提供服务的可靠和高性能基础架构的需求不断增加,可伸缩性和高可用性这两个术语再受欢迎不过了。 虽然处理增加的系统负载是一个常见问题,但减少停机时间和消除单点故障同样重要。 高可用性是大规模基础设施设计的一种质量,可以解决后面的这些考虑。

在本指南中,我们将讨论高可用性的确切含义以及它如何提高基础架构的可靠性。

什么是高可用性?

在计算中,术语 availability 用于描述服务可用的时间段,以及系统响应用户请求所需的时间。 高可用性是系统或组件的一种质量,可确保在给定时间段内保持高水平的操作性能。

衡量可用性

可用性通常表示为一个百分比,表示特定系统或组件在给定时间段内的正常运行时间,其中 100% 的值表示系统永远不会出现故障。 例如,一个在一年内保证 99% 可用性的系统可能有长达 3.65 天的停机时间 (1%)。

这些值是根据几个因素计算得出的,包括计划内和计划外维护期,以及从可能的系统故障中恢复的时间。

高可用性如何工作?

高可用性作为基础设施的故障响应机制。 它的工作方式在概念上非常简单,但通常需要一些专门的软件和配置。

高可用性何时重要?

在建立强大的生产系统时,最大限度地减少停机时间和服务中断通常是重中之重。 无论您的系统和软件有多可靠,都可能出现导致您的应用程序或服务器瘫痪的问题。 为您的基础架构实施高可用性是减少此类事件影响的有用策略。 高可用性系统可以自动从服务器或组件故障中恢复。

是什么让系统高度可用?

高可用性的目标之一是消除基础架构中的单点故障。 单点故障是技术堆栈的一个组件,如果它变得不可用会导致服务中断。 因此,对于应用程序的正常功能而言,没有冗余的任何组件都被视为单点故障。 ​为了消除单点故障,堆栈的每一层都必须准备好冗余。 例如,假设您有一个由负载均衡器后面的两个相同的冗余 Web 服务器组成的基础架构。 来自客户端的流量将在 Web 服务器之间平均分配,但如果其中一台服务器出现故障,负载均衡器会将所有流量重定向到剩余的在线服务器。

此场景中的 Web 服务器层不是单点故障,因为:

  • 相同任务的冗余组件已到位
  • 该层之上的机制(负载均衡器)能够检测组件中的故障并调整其行为以进行及时恢复

但是如果负载均衡器离线怎么办?

对于所描述的场景,这在现实生活中并不少见,负载平衡层本身仍然是一个单点故障。 然而,消除这个剩余的单点故障可能具有挑战性。 尽管您可以轻松地配置额外的负载均衡器来实现冗余,但负载均衡器上方并没有明显的点来实现故障检测和恢复。

仅靠冗余并不能保证高可用性。 必须有一种机制来检测故障并在堆栈的某个组件不可用时采取措施。

冗余系统的故障检测和恢复可以使用自上而下的方法来实现:顶层负责监控紧接其下的层的故障。 在我们之前的示例场景中,负载均衡器是顶层。 如果其中一个 Web 服务器(底层)变得不可用,负载平衡器将停止重定向对该特定服务器的请求。

这种方法往往更简单,但也有局限性:在您的基础架构中,会有一个顶层不存在或遥不可及的地方,负载均衡器层就是这种情况。 在外部服务器中为负载均衡器创建故障检测服务只会创建一个新的单点故障。

在这种情况下,分布式方法是必要的。 多个冗余节点必须作为一个集群连接在一起,其中每个节点都应该具有同样的故障检测和恢复能力。

然而,对于负载均衡器的情况,由于名称服务器的工作方式,还有一个额外的复杂性。 从负载均衡器故障中恢复通常意味着故障转移到冗余负载均衡器,这意味着必须进行 DNS 更改才能将域名指向冗余负载均衡器的 IP 地址。 像这样的更改可能需要相当长的时间才能在 Internet 上传播,这将导致该系统严重停机。

一种可能的解决方案是使用 DNS 循环负载平衡 。 但是,这种方法并不可靠,因为它会将故障转移留给客户端应用程序。

更强大和更可靠的解决方案是使用允许灵活 IP 地址重新映射的系统,例如 浮动 IP 。 按需 IP 地址重新映射通过提供可在需要时轻松重新映射的静态 IP 地址,消除了 DNS 更改中固有的传播和缓存问题。 域名可以保持与相同的 IP 地址相关联,而 IP 地址本身在服务器之间移动。

使用浮动 IP 的高可用性基础架构如下所示:

高可用性需要哪些系统组件?

为了在实践中实现高可用性,必须仔细考虑几个组件。 高可用性不仅仅是软件实现,还取决于以下因素:

  • 环境: 如果您的所有服务器都位于同一地理区域,则地震或洪水等环境条件可能会使您的整个系统瘫痪。 在不同的数据中心和地理区域拥有冗余服务器将提高可靠性。
  • 硬件: 高可用性服务器应该能够应对断电和硬件故障,包括硬盘和网络接口。
  • 软件: 整个软件堆栈,包括操作系统和应用程序本身,必须准备好处理可能需要重新启动系统的意外故障。
  • 数据:数据丢失和不一致可能是由多种因素引起的,并不局限于硬盘故障。 高可用性系统必须考虑到发生故障时的数据安全性。
  • 网络: 计划外网络中断代表高可用性系统的另一个可能故障点。 为可能的故障制定冗余网络策略非常重要。

可以使用哪些软件来配置高可用性?

高可用系统的每一层在软件和配置方面都有不同的需求。 但是,在应用程序级别,负载平衡器代表了用于创建任何高可用性设置的重要软件。

HAProxy(高可用性代理)是负载均衡的常见选择,因为它可以处理多层负载均衡,并适用于不同类型的服务器,包括数据库服务器

在系统堆栈中向上移动,为您的应用程序入口点(通常是负载平衡器)实施可靠的冗余解决方案非常重要。 如前所述,要消除这种单点故障,我们需要在浮动 IP 后面实现负载均衡器集群。 Corosync 和 Pacemaker 是在 UbuntuCentOS 服务器上创建此类设置的流行选择。

结论

高可用性是可靠性工程的一个重要子集,专注于确保系统或组件在给定时间段内具有高水平的运行性能。 乍一看,它的实现似乎相当复杂。 但是,它可以为需要提高可靠性的系统带来巨大的好处。