集群是什么?
群集是一组计算机在一个任务上协同工作。执行哪个任务以及如何执行该任务,在集群之间是不同的。本课程涵盖了两种不同类型的集群。
High-availability clusters:高可用性集群(也称为HA集群或故障转移集群)的目标是尽可能地保持正在运行的服务可用。这主要是通过让高可用性集群的节点相互监视故障,并在服务或节点故障时将服务迁移到仍被认为“健康”的节点来实现的。高可用性集群可以分为两个子集:
Active-active主主高可用性集群,其中一个服务在多个节点上运行,从而导致更短的故障转移时间。
Active-passive主备高可用性集群,一个服务一次只运行在一个节点上。
高可用性集群通常用于支持企业中的关键任务服务。实现高可用性集群的软件示例包括Pacemaker和Red Hat High Availability Add-On,
Storage clusters:在存储集群中,所有成员提供单个集群文件系统,不同的服务器系统可以访问该文件系统。提供的文件系统可用于同时读取和写入数据。这对于提供应用程序数据(如web服务器内容)的高可用性非常有用,而不需要相同数据的多个冗余副本。集群文件系统的一个例子是由Red Hat Resilient Storage Add-On提供的GFS2。
高可用性集群的目标是什么?
高可用性集群的主要目标是通过消除瓶颈和单点故障来尽可能地保持服务的可用性。这是一个不同的策略,而不是试图保持一台机器的正常运行时间尽可能高。运行服务的服务器的正常运行时间对使用者来说并不重要,但服务的可用性是重要的。高可用性群集使用各种概念和技术,以实现服务完整性和可用性:
Resources资源和resource groups资源组
在集群术语中,基本工作单元称为资源。单个IP地址、文件系统或数据库都将被视为资源。通常,定义这些资源之间的关系以创建面向用户的服务。定义这些关系最常用的方法之一是将一组资源组合成一个组。这指定组中的所有资源需要在同一节点上一起运行,并建立固定的(线性)开始和停止顺序。例如,为了使集群提供web服务器服务,web服务器守护程序、服务器应该共享的数据以及守护程序将侦听的IP地址都需要在同一集群节点上可用。
Failover故障转移
当集群注意到最初运行服务的节点没有响应时,高可用性集群通过将服务迁移到另一个节点来保持服务可用;这称为故障转移。
Fencing
Fencing是一种确保故障集群节点不会导致损坏的机制,从而可以安全地恢复集群中的其他地方的资源。这是必要的,因为我们不能假定一个不可到达的节点实际上是关闭的。隔离通常是通过关闭节点电源来完成的,因为死节点显然不能做任何事情。在其他情况下,将使用一种操作组合来切断节点与网络的连接(以停止新工作的到达)或与存储的连接(以停止节点写入共享存储)。
Shared storage共享存储
大多数高可用性集群还需要一种形式的共享存储,或者可以从多个节点访问的存储。共享存储为集群中的多个节点提供相同的应用程序数据。运行在集群上的应用程序可以顺序地或同时地访问数据。高可用性集群需要保证共享存储上的数据完整性。数据完整性是通过fencing来保证的。
Quorum仲裁
Quorum描述维护集群完整性所需的投票系统。每个组员都有一定数量的投票权;默认情况下,一票。根据集群配置,当有一半或一半以上的投票存在时,集群将获得仲裁。无法与其他集群成员通信且无法发送投票的集群成员将被大多数按预期操作的集群成员隔离。群集通常需要仲裁才能运行。如果群集丢失或无法建立仲裁,默认情况下,不会启动任何资源或资源组,并且停止运行的资源组以确保数据完整性。
何时使用HA集群
在规划高可用性集群时,需要回答一个重要的问题:将服务放在HA集群中会提高服务的可用性吗?
要回答这个问题,了解服务的功能以及如何配置服务的客户端是很重要的:
根据解决方案的不同,具有内置故障转移或负载平衡的DNS和LDAP等服务可能无法从HA集群中受益。例如,DNS或LDAP服务可以使用多个具有主/从关系或多主关系的服务器。这些服务可以配置为主服务器和从服务器之间的数据复制。DNS和LDAP的客户端可以使用多台服务器。主/从配置或多主配置中涉及的故障转移延迟较少,因此当将其放在HA集群中时,服务的可用性不会增加。然而,在Openstack平台解决方案中,将RabbitMQ和Galera等资源放在HA集群中可能是有利的。关于Red Hat Openstack平台的高可用性的进一步信息不在本课程的范围之内。
没有内置故障转移或负载平衡的服务可以从高可用性集群配置中获益。示例包括NFS和Samba等服务。
并不是所有可用性问题都可以通过高可用性集群来解决。通常,涉及应用程序崩溃或网络故障的问题不能通过高可用性集群解决:
如果一个错误导致应用程序在读取某些输入时崩溃,如果它是高可用性集群的一部分,它仍然会崩溃。在这种情况下,集群将故障转移到不同的节点,但是如果再次读取相同的输入,应用程序将再次崩溃。
高可用性集群也不提供端到端冗余。虽然集群本身可能是完全可操作的,但如果基础设施中的网络错误导致集群不可达,客户机仍然无法访问服务,即使服务运行在高可用性集群上。因此,重要的是要考虑集群的架构并对其进行设计,以避免整个部署过程中的单点故障。这里有一些权衡,集群的架构师将需要考虑他们准备对集群的每个组件承受多大的风险。
图片: