答案1
单个管理节点不具有容错能力。毕竟,它只是一台机器(虚拟或物理)。这就是为什么你有多个共享状态的管理器。如果一名管理器出现故障,其余的管理器将使集群保持运行。
同样,单个工作节点也不具有容错能力。毕竟只是一台机器。那么如果硬盘出现故障怎么办?这意味着该机器上的任何状态都将丢失。这就是为什么您通常在集群中运行应用程序的多个实例,并使用复制状态存储(这实际上是管理器节点所做的事情)或在集群外部维护状态。
您可能还想了解“12 因素”应用程序设计,它进一步发展了这些概念。
答案2
从历史上看,他们尝试过……有作为集群运行的 Web 服务器,您可以在它们上运行有状态的应用程序。但从个人经验来看,这些服务器很难配置为正常工作,而且由于集群不是透明的,最多是半透明的,应用程序代码仍然必须具有一定的集群感知能力,因此要使应用程序在这些系统上正确运行需要熟练的程序员。还有一些限制(集群中服务器的距离等)。
“Docker 方式”更明确,但也更容易向程序员解释,并且限制更少(编程语言、所有节点的物理位置等......)