集群和分布式的一些概念整理(一)- 集群

由一组计算机组成(可以包含虚拟机或容器),一起协调工作,以获得更好的性能和可用性,以及更低的成本;

整体抽象上被视为单一系统看待,完成一项内容(ES集群、Web集群、RabbitMQ集群、Mysql集群),计算机集群将每个节点设置为执行相同的任务,由软件控制和调度。

1. 集群

1.1. 基本概念

  • Cluster - 突出整体概念
  • 部署集群通常是为了提高单台集群的性能和可用性,同时从成本和收益上大于单台服务器,集群目的:
    • 数据共享、计算能力、存储能力共享
    • 管理成本、费用成本降低(VM)

1.2. 集群好处

  • 性能更佳
  • 容错能力更强(高可用、可靠性)
  • 伸缩能力更好(扩展性)
  • 更廉价(对比IOE方案IBM、ORACLE、EMC)
  • 有助于分布式

1.3. 集群属性

  • 负载均衡(不同的负载均衡调度算法)
  • 高可用(基于故障转移实现)

1.4. 集群间数据节点通信方式

  • MPI(MsgPassInterface消息传递接口,现大多由TCP/IP和Socket连接)
  • PVM(并行虚拟机)

1.5. Linux集群常见软件

  • Linux Virtual Server
  • Linux-HA

2. 集群软件开发和管理成本

2.1. 开发成本

  • 并行编程
    • 负载均衡集群(如Web服务器)使用集群体系结构来支持大量用户,并且通常每个用户请求都被路由到特定节点,实现任务并行而无需多节点协作,因为系统的主要目标是提供快速用户访问共享数据。然而,为少数用户执行复杂计算的“计算机集群”需要利用集群的并行处理能力并在几个节点之间划分“相同计算”。
    • 程序的自动并行化仍然是技术挑战,但是并行编程模型可以用于通过在不同处理器上同时执行程序的单独部分来实现更高程度的并行性。
  • 调试和监控:
    • 当节点在长多节点计算期间出现故障时,应用程序检查点可用于恢复系统的给定状态。这在大型集群中是必不可少的,因为随着节点数量的增加,在大量计算负载下节点发生故障的可能性也会增加。检查点可以将系统恢复到稳定状态,以便可以恢复处理而无需重新计算结果。

2.1.1. 并行编程

  • 负载均衡集群(如Web服务器)使用集群体系结构来支持大量用户,并且通常每个用户请求都被路由到特定节点,实现任务并行而无需多节点协作,因为系统的主要目标是提供快速用户访问共享数据。然而,为少数用户执行复杂计算的“计算机集群”需要利用集群的并行处理能力并在几个节点之间划分“相同计算”。
  • 程序的自动并行化仍然是技术挑战,但是并行编程模型可以用于通过在不同处理器上同时执行程序的单独部分来实现更高程度的并行性。

2.1.2. 调试和监控:

当节点在长多节点计算期间出现故障时,应用程序检查点可用于恢复系统的给定状态。这在大型集群中是必不可少的,因为随着节点数量的增加,在大量计算负载下节点发生故障的可能性也会增加。检查点可以将系统恢复到稳定状态,以便可以恢复处理而无需重新计算结果。

2.2. 管理成本

  • 任务调度
  • 任务执行(MapReduce、Hadoop)
  • 故障转移防护

3. 高可用集群

参考:https://en.wikipedia.org/wiki/High-availability_cluster

高可用性集群(也称为HA群集或故障转移群集)是支持服务器应用程序的计算机组,可以在最短的停机时间内可靠地使用这些应用程序。它们通过使用高可用性软件来运行组或集群中的冗余计算机 在系统组件发生故障时提供持续服务。

如果没有集群,如果运行特定应用程序的服务器崩溃,则在崩溃的服务器修复之前,应用程序将不可用。

HA群集通过检测硬件/软件故障来解决这种情况,并立即在另一个系统上重新启动应用程序而无需管理干预,这一过程称为故障转移。作为此过程的一部分,群集软件可以在启动应用程序之前配置节点。例如,可能需要导入和装载适当的文件系统,可能必须配置网络硬件,并且还可能需要运行某些支持应用程序。

在高可用性集群环境中运行,应用程序必须至少满足以下技术要求(其中最后两个对于其在集群中的可靠功能至关重要,并且最难以完全满足):

  • 必须有一种相对简单的方法来启动,停止,强制停止和检查应用程序的状态。实际上,这意味着应用程序必须具有一个或多个命令行界面来控制应用程序,包括支持多个应用程序实例。
  • 应用程序必须能够使用共享存储(如NAS/SAN)。
  • 最重要的是,应用程序必须尽可能多地将其状态存储在非易失性共享存储上。同样重要的是能够在故障之前使用共享存储中保存的状态在最后状态下重新启动另一个节点。
  • 如果数据崩溃或从已保存状态重新启动,则应用程序不得损坏数据。
  • 通过使用虚拟服务器环境可以最大限度地减少许多这些约束,其中虚拟机管理程序本身具有群集感知功能,并在物理主机之间提供虚拟机的无缝迁移(包括运行内存状态)

4. 故障转移

参考:https://en.wikipedia.org/wiki/Failover

4.1. 故障转移流程

  • 在服务器级别,故障转移自动化通常使用“心跳”系统,通过网络连接来连接两个服务器。
  • 只要在主服务器和第二服务器之间继续定期“脉冲”或“心跳”,第二服务器就不会使其系统联机,有第三个“备件”服务器运行备用组件进行“热”切换防止停机。
  • 故障来临时候,第二台服务器在检测到第一台机器的“心跳”发生变化后立即接管第一台服务器的工作,,同时:
    • 某些系统能够自动发送故障转移通知,完成自动切换;
    • 某些系统不会完全自动进行故障转移,但需要人为干预;一旦人员批准了故障转移,这种“手动批准自动化”配置就会自动运行

4.2. 转移策略

在使用故障转移之前,需要定好何种情况才被认定为一个故障,以及出现故障如何转移

5. 参考

  • 计算机集群:https://en.wikipedia.org/wiki/Computer_cluster
  • 集群高可用:https://en.wikipedia.org/wiki/High-availability_cluster
  • 故障转移:https://en.wikipedia.org/wiki/Failover
  • 并行计算:https://en.wikipedia.org/wiki/Parallel_computing
  • 分布式计算:https://en.wikipedia.org/wiki/Distributed_computing
  • CAP理论:https://en.wikipedia.org/wiki/CAP_theorem
  • PACELC定理:https://en.wikipedia.org/wiki/PACELC_theorem
  • 分布式操作系统:https://en.wikipedia.org/wiki/Distributed_operating_system