Quantcast
Channel: InfoQ - 促进软件开发领域知识与创新的传播
Viewing all articles
Browse latest Browse all 1638

Elasticsearch 7.0中引入的新集群协调子系统如何使用?

$
0
0

Elasticsearch之所以如此流行,其中一个原因是它可以从只有几个节点的小集群扩展到拥有数百个节点的大集群。它的核心是集群协调子系统。Elasticsearch 7提供了一个新的集群协调子系统,与早期版本相比,它提供了很多优点。本文将介绍Elasticsearch 7对这个子系统的改进,描述了如何使用新的子系统、新的变更对Elasticsearch 6升级有哪些影响,以及这些改进如何防止用户无意中将数据置于危险之中,最后将介绍新子系统的工作原理。

什么是集群协调?

Elasticsearch集群可以执行需要多个节点协同工作的任务。例如,搜索必须被路由到所有正确的分片,以确保搜索结果是准确的。在索引或删除某些文档时,必须更新每个副本。每个客户端请求都必须从接收它的节点转发到能够处理它的节点。每个节点都了解集群的概况,这样它们就可以执行搜索、索引和其他协调活动。这个概况就是指集群状态。集群状态决定了索引的映射和设置、分配给每个节点的分片以及同步的分片副本。在集群中保持这些信息的一致性是非常重要的。最近推出的很多特性(包括基于序号的复制和跨集群复制)之所以能够正确工作,主要是因为它们依赖了集群状态的一致性。

协调子系统会选择一个特定的节点作为集群的主节点,这个选定的主节点需要确保集群中的所有节点都能够收到有关集群状态的更新。这比看起来的要困难,因为像Elasticsearch这样的分布式系统必须为各种奇怪的情况做好准备。节点有时候运行缓慢,有时候垃圾回收会导致停顿,或者突然断电。网络会出现分区、包丢失、高延迟,或者乱序的消息。有时候一次性会发生多个这样的问题,而且可能间歇性地出现。不管怎样,集群协调子系统必须能够确保每个节点都具有集群状态的一致视图。

关键是Elasticsearch必须具备针对单个节点故障的弹性。它使用了节点仲裁机制,只有在多数节点接受集群状态更新之后,集群状态的更新才被认为是成功的,从而实现了这种弹性。仲裁是集群中符合主节点条件的节点的一个子集。仲裁的优势在于,一些节点可能会失败,但不会影响集群的可用性。在选择仲裁节点时要十分小心,这样集群就不会选举出两个独立的主节点,避免这两个主节点做出不一致的决策,最终导致数据丢失。

通常,我们建议集群可以有三个符合主节点条件的节点,如果其中一个节点失败,其他两个节点仍然可以形成仲裁。如果一个集群少于三个符合主节点条件的节点,那它就不能安全地容忍其中任何一个节点发生故障。相反,如果一个集群有超过三个符合主节点条件的节点,那么选举和集群状态更新可能需要更长的时间。


Viewing all articles
Browse latest Browse all 1638

Trending Articles