介绍
随着对旨在为关键系统提供服务的可靠和高性能基础设施的需求不断增加,可扩展性和高可用性这两个术语变得非常流行。虽然处理增加的系统负载是一个常见的问题,但减少停机时间和消除单点故障同样重要。高可用性是大规模基础设施设计的一种质量,可解决后面这些问题。
在本指南中,我们将讨论高可用性究竟意味着什么以及它如何提高基础设施的可靠性。
什么是高可用性?
在计算中,可用性一词用于描述服务可用的时间段,以及系统响应用户请求所需的时间。高可用性是系统或组件的一种质量,可确保在给定时间段内具有高水平的操作性能。
测量可用性
可用性通常表示为一个百分比,表示在给定的时间段内特定系统或组件的预期正常运行时间,其中 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 是在Ubuntu和CentOS服务器上创建此类设置的流行选择。
结论
高可用性是可靠性工程的一个重要子集,专注于确保系统或组件在给定的时间段内具有高水平的操作性能。乍一看,它的实现可能看起来很复杂;然而,它可以为需要提高可靠性的系统带来巨大的好处。