为什么工作节点不具备容错能力?

为什么工作节点不具备容错能力?

群管理器节点处理集群管理任务,例如:

1)维护集群状态

2)调度服务

3) 服务集群模式 HTTP API 端点

您可以从任何管理器节点执行任何 - docker swarm- docker node -命令docker service

在此输入图像描述

应用程序运行在工作节点上,但它们不具有容错能力。因为worker节点不具备容错能力。

这意味着,如果一个工作节点出现故障,那么管理器将启动另一个工作节点。

Swarm 集群设计迫使开发人员设计无状态应用程序在工作节点中运行。


容错是在管理器级别维护的,以了解集群的状态。

为什么管理节点有容错能力,而工作节点没有容错能力?

答案1

单个管理节点不具有容错能力。毕竟,它只是一台机器(虚拟或物理)。这就是为什么你有多个共享状态的管理器。如果一名管理器出现故障,其余的管理器将使集群保持运行。

同样,单个工作节点也不具有容错能力。毕竟只是一台机器。那么如果硬盘出现故障怎么办?这意味着该机器上的任何状态都将丢失。这就是为什么您通常在集群中运行应用程序的多个实例,并使用复制状态存储(这实际上是管理器节点所做的事情)或在集群外部维护状态。

您可能还想了解“12 因素”应用程序设计,它进一步发展了这些概念。

答案2

从历史上看,他们尝试过……有作为集群运行的 Web 服务器,您可以在它们上运行有状态的应用程序。但从个人经验来看,这些服务器很难配置为正常工作,而且由于集群不是透明的,最多是半透明的,应用程序代码仍然必须具有一定的集群感知能力,因此要使应用程序在这些系统上正确运行需要熟练的程序员。还有一些限制(集群中服务器的距离等)。

“Docker 方式”更明确,但也更容易向程序员解释,并且限制更少(编程语言、所有节点的物理位置等......)

相关内容