type
status
date
urlname
summary
tags
category
icon
password
catalog
sort
Elasticsearch是一个基于Lucene分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间数据等。它构建于Lucene之上,并提供了一个易于使用的RESTful API来处理数据索引和搜索。Elasticsearch以其强大的全文搜索能力而闻名,并且能够实时地存储、搜索和分析大量数据。此外,Elasticsearch还常常与Logstash(用于收集、解析和处理数据流)和Kibana(用于数据可视化)结合使用,形成了ELK Stack,广泛应用于日志分析、指标分析以及其他大数据应用场景中。
在实际业务场景中我们或许是因为数据库中数量大且需要一个复杂的条件过滤时才考虑到应用Elasticsearch,因为它提供大数据量(PB)近乎实时的搜索功能。

核心特性

  1. 分布式架构‌:Elasticsearch支持水平扩展,可以通过增加节点来提高系统的处理能力和存储容量。这种分布式的特性使得Elasticsearch能够处理PB级的数据。
  1. 高可用性和容错性‌:Elasticsearch的集群能够自动处理节点的加入和离开,通过复制数据到多个节点来保证数据的高可用性和容错性。
  1. 实时搜索‌:Elasticsearch支持近乎实时的数据索引和搜索,这意味着你可以在数据被索引之后立即进行搜索。
  1. 丰富的查询DSL‌:Elasticsearch提供了一个丰富的查询DSL(Domain Specific Language),允许你以非常灵活和强大的方式构建查询。
  1. 强大的聚合能力‌:Elasticsearch支持复杂的聚合操作,允许你对数据进行分组、统计和分析。
  1. 可扩展的插件体系‌:Elasticsearch有一个活跃的社区和丰富的插件生态系统,你可以通过安装插件来扩展Elasticsearch的功能。
 
 

架构

💡
Elasticsearch的整体架构是一个高度分布式和可扩展的系统,其核心组件包括节点(Node)、分片(Shard)、副本(Replica)和索引(Index)
通过节点、分片、副本和索引等组件共同工作,实现了分布式搜索和分析功能。节点负责存储数据和处理请求,分片提供了水平扩展和并行处理的能力,副本则提供了数据的冗余和容错能力。
索引是存储和组织文档的地方,是Elasticsearch进行搜索和分析的核心。这些组件相互配合,使得Elasticsearch成为一个高效、可扩展和可靠的分布式搜索和分析引擎。
notion image

节点(Node)

  • 定义‌:节点是Elasticsearch集群中的一个实例,可以是一个服务器或虚拟机上的一个Elasticsearch进程。
  • 功能‌:节点负责存储数据、处理搜索请求、参与集群的协调和管理等。
  • 集群‌:多个节点可以组成一个Elasticsearch集群,共同工作以提供分布式搜索和分析功能。

分片(Shard)

  • 定义‌:分片是Elasticsearch中存储数据的基本单位。一个索引可以分成多个分片,每个分片都是一个独立的Lucene索引。
  • 类型‌:
    • 主分片(Primary Shard)‌:主分片是原始的数据分片,所有的写操作(如索引和删除)都首先作用于主分片。
    • 副本分片(Replica Shard)‌:副本分片是主分片的冗余副本,用于提高数据的可用性和查询性能。副本分片接收来自主分片的数据更新,并在主分片不可用时提供冗余。
  • 重要性‌:分片机制使Elasticsearch能够支持水平扩展,通过增加分片数量来提高存储容量和处理能力。同时,分片还提供了数据并行处理的能力,多个节点可以并行处理查询和索引请求,提高系统的性能和吞吐量。

副本(Replica)

  • 定义‌:副本是对主分片的完整复制,用于提供数据的冗余和容错能力。
  • 重要性‌:副本分片可以分担查询负载,减少主分片的压力,提高系统的查询性能和响应速度。同时,在主分片所在节点发生故障时,副本分片可以接管服务,确保数据的连续性和服务的可用性。
  • 配置‌:默认情况下,Elasticsearch为每个主分片创建一个副本分片。但用户可以根据需要动态调整副本分片的数量。

索引(Index)

  • 定义‌:索引是Elasticsearch中用于存储和组织文档的地方,类似于传统数据库中的数据库。
  • 分片与索引‌:每个索引都可以分成多个分片,这些分片可以分布在不同的节点上。索引的创建、删除和查询等操作都是基于分片进行的。
  • 重要性‌:索引是Elasticsearch进行搜索和分析的基础。通过索引,Elasticsearch能够快速定位到相关的文档并返回结果。
以上是Elasticsearch架构的简单描述方便我们后续理解,下面我们就这些来展开深入描述
 

节点(Node)

在Elasticsearch中,节点(Node)是构成集群的基本单元,扮演着至关重要的角色是集群中的一个运行实例,可以是一个独立的服务器或虚拟机上的一个进程。负责存储数据、处理搜索请求、参与集群的协调和管理等。它是Elasticsearch执行各种操作的基本单位。

节点类型

💡
在Elasticsearch中,一个节点Node可以同时扮演多个角色。例如,一个节点可以同时是数据节点、主可选举节点和预处理节点。但是,为了优化性能和资源使用,通常建议将这些角色分开,特别是在大型集群中。出于多可用的考虑,可以增加Ingest Node节点,通过读负载均衡将读写请求分发到不同节点,从而提高集群性能
 

主节点(Master Node)

负责集群的元数据管理和变更,如索引的创建、删除、分片的分配等。主节点还负责选举新的主节点和维护集群状态。
  • Master Node 主节点负责管理集群级别的操作,比如创建或删除索引、跟踪哪些节点是集群的一部分以及决定哪些分片分配给哪些节点。 它们还处理集群范围内的变更,如创建或删除索引、跟踪集群中的节点以及管理集群的状态。 主节点不承担数据相关的任务,如存储或搜索文档。
  • Matser eligible Node 主可选举节点是指有资格被选举为master节点的节点。在默认配置下,集群中的每个节点都可以成为master节点。 这些节点参与master节点的选举过程,当当前的master节点不可用时,它们可以被选举为新的master节点。 它们也可以执行数据节点的任务,如存储数据和执行搜索。
 
💡
在Elasticsearch集群中,主节点扮演着至关重要的角色,它负责集群层面的管理和决策。以下是主节点具体职责的详细描述:
1. 集群管理
  • 维护集群状态‌:主节点负责维护集群的元数据,包括集群的配置信息、节点的健康状态、索引的分配和路由规则等。
  • 选举与协调‌:在集群启动时,主节点通过选举机制从候选节点中选出。一旦选举完成,主节点将负责协调集群内的各种活动,确保集群的稳定运行。
2. 索引管理
  • 索引的创建与删除‌:当需要创建或删除索引时,客户端的请求首先会发送到主节点,由主节点来处理这些请求,并更新集群的元数据。
  • 分片分配‌:主节点负责将索引的分片分配到集群中的不同节点上,以平衡负载和确保数据的可用性。
3. 节点管理
  • 节点加入与离开‌:当新节点加入集群或现有节点离开时,主节点会收到通知并更新集群的元数据,以反映这些变化。
  • 故障检测与恢复‌:主节点还负责监控集群中节点的健康状态,一旦发现节点故障,会触发相应的恢复机制,如重新分配故障节点上的分片。
4. 集群优化
  • 性能调优‌:虽然主节点不直接参与数据的处理,但它会收集集群的性能指标,并据此进行调优决策,如调整分片数、副本数等。
  • 资源分配‌:主节点会考虑集群中节点的资源状况(如CPU、内存、磁盘空间等),来优化索引和查询的分片分配,以提高集群的整体性能。
5. 集群安全性
  • 访问控制‌:在一些高级配置中,主节点还负责实现集群的访问控制策略,确保只有授权的用户才能访问集群。
  • 加密通信‌:为了保护集群免受未授权访问和数据泄露的风险,主节点可能会配置集群以使用加密通信协议。
 
 

数据节点(Data Node)

主要负责存储数据和相关的索引文件,执行数据的索引、搜索和恢复 如CRUD(创建、读取、更新、删除)操作和搜索等操作。数据节点是集群中最常见的节点类型。
它们还负责执行集群的分片分配和数据的复制。数据节点是Elasticsearch集群中工作负载最重的节点,因为它们负责处理数据和搜索请求。节点启动后,默认就是数据节点。可以设置node.data: false禁止
 
💡
官方定义:
数据节点保存包含您已索引的文档的分片。数据节点处理数据相关操作,例如 CRUD、搜索和聚合。这些操作是 I/O、内存和 CPU 密集型操作。监视这些资源并在过载时添加更多数据节点非常重要。
拥有专用数据节点的主要好处是主角色和数据角色的分离。
要创建专用数据节点,请设置:node.roles: [data]
在多层部署体系结构中,您可以使用专门的数据角色将数据节点分配到特定层:data_content、data_hot、data_warm、data_cold或data_frozen。一个节点可以属于多个层,但具有专用数据角色之一的节点不能具有通用data角色。
 

协调节点(Coordinating Node)

接收客户端的搜索请求,将请求分发到合适的节点,并将结果汇总后返回给客户端。每个节点都可以充当协调节点,但也可以设置专门的协调节点。通常是一个接受客户端请求并向其他节点转发请求的节点。它们不存储数据,但负责聚合来自不同节点的搜索结果并返回给客户端。  协调节点可以是任何节点,因为任何节点都可以转发请求,但通常,客户端直接连接的节点就充当协调节点的角色。
💡
官方定义:
诸如搜索请求或批量索引请求之类的请求,它们可能涉及不同数据节点上保存的数据。例如,搜索请求分两个阶段执行,这两个阶段由接收客户端请求的节点(协调节点)协调。
  1. 在分散阶段,协调节点将请求转发到保存数据的数据节点。每个数据节点在本地执行请求并将其结果返回给协调节点
  1. 在收集阶段,协调节点将每个数据节点的结果缩减为单个全局结果集
每个节点都是隐式的协调节点。这意味着具有显式空角色列表的节点 node.roles 将仅充当协调节点,无法禁用。因此,这样的节点需要有足够的内存和 CPU 才能处理收集阶段。
 

预处理节点(Ingest Node)

在数据索引之前对数据进行预处理,如数据转换、提取、规范化等操作。负责处理传入数据的预处理工作,如解析、转换和丰富数据。  它们使用预处理管道(Ingest pipelines)来处理文档,这些管道可以在索引之前对文档进行修改。Ingest节点可以与数据节点和协调节点的功能重叠,因为预处理可以在索引数据之前在任何节点上执行。
💡
官方定义:
在实际的文档索引发生之前,使用摄取节点对文档进行预处理。摄取节点拦截批量和索引请求,应用转换,然后将文档传递回索引或批量 api。
默认情况下,所有节点都启用摄取,因此任何节点都可以处理摄取任务。您还可以创建专用的摄取节点。如果要禁用节点的摄取,请在 elasticsearch. conf 中配置以下配置。yml 文件:node.ingest: false
要在索引之前对文档进行预处理,请定义一个指定一系列处理器的管道。每个处理器都以某种特定的方式转换文档。例如,管道可能有一个处理程序从文档中删除字段,然后有另一个处理程序重命名字段。然后,集群状态存储配置的管道。
要使用管道,只需在索引或批量请求上指定 pipeline 参数。这样,摄取节点就知道要使用哪个管道。
 

其他特定节点

如机器学习节点、快照节点等,根据集群的具体需求配置不同类型的节点。
 
 

分片(Shard)

在创建索引时,可以指定分片的个数和副本个数,多分片分部在集群各个节点,分片分为主分片Primary Shard和副本分片Replica Shard。  副分片不会被分配到与主分片相同的节点上。这是为了确保如果一个节点发生故障,主分片和其副分片不会同时丢失,分配情况如下图。
notion image
 

主分片(Primary Shard)

  • 存储和索引:每个文档都存储在一个主分片上。主分片负责处理文档的索引(即插入、更新和删除操作)。
  • 查询处理:主分片也负责处理查询请求,返回与查询条件匹配的文档。
  • 数量固定:在创建索引时,需要指定主分片的数量,这个数量在索引创建后不能更改。
  • 负载均衡:主分片在集群中的节点上分布,以实现负载均衡。

副分片(Replica Shard)

  • 数据复制:副分片是主分片的复制品,它们包含了与主分片相同的数据。副分片的主要目的是提供数据的冗余,以防主分片所在的节点发生故障。
  • 查询负载分担:副分片可以处理查询请求,从而分担主分片的负载,提高查询性能。
  • 数量可变:副分片的数量可以在索引创建后动态调整,以适应集群的负载和可用性需求。
  • 故障恢复:如果一个主分片所在的节点发生故障,Elasticsearch会从副分片中选举一个新的主分片,以保证数据的可用性。

功能区别

  • 数据写入:只有主分片负责处理数据的写入操作,副分片不参与数据写入,它们只是主分片的复制品。
  • 数据读取:主分片和副分片都可以处理数据的读取操作,包括查询和获取文档。副分片可以分担读取负载,提高查询性能。
  • 故障恢复:副分片的主要作用之一是提供故障恢复能力。如果主分片丢失,Elasticsearch会从副分片中选择一个新的主分片,以保证数据的可用性和一致性。
  • 负载均衡:副分片有助于负载均衡,因为它们可以处理部分查询请求,从而减轻主分片的压力。
 
 
在Elasticsearch中,数据分片的默认策略是围绕提高数据的可处理性、可扩展性和容错性而设计的。以下是Elasticsearch数据分片的默认策略的一些关键点
 

默认策略

1. 分片数量
  • 主分片(Primary Shards)‌:在Elasticsearch 7.x及之后的版本中,默认情况下,每个新创建的索引会被分配‌1个‌主分片。这个数量在索引创建时确定,之后不能更改。主分片负责存储和索引数据,是数据写入和更新的主要单元。
  • 副本分片(Replica Shards)‌:对于每个主分片,Elasticsearch默认会创建‌1个‌副本分片。副本分片是主分片的冗余副本,用于提供数据的备份和查询的负载均衡。在主分片故障时,副本分片可以接管主分片的角色,确保数据的可用性和服务的连续性。
2. 分片分配
  • 均衡分配‌:Elasticsearch会尝试在集群中的不同节点间均衡地分配分片,以优化集群的性能和负载均衡。这意味着分片会尽可能地分散到不同的节点上,以避免单个节点成为热点或瓶颈。
  • 自动迁移‌:当新节点加入集群或现有节点离开时,Elasticsearch会自动迁移分片以重新平衡集群。这种自动迁移是透明的,不需要用户干预。
3. 容错性
  • 数据冗余‌:通过副本分片,Elasticsearch实现了数据的冗余存储。这意味着即使某个节点或主分片发生故障,数据仍然可以从副本分片中恢复,从而保证了数据的可用性和服务的连续性。
  • 故障转移‌:在主分片故障时,Elasticsearch会自动将副本分片升级为主分片,并重新分配新的副本分片以确保数据的冗余。这种故障转移机制是自动的,并且通常不会对用户产生明显的中断。
4. 查询性能
  • 并行处理‌:Elasticsearch支持在多个分片上并行处理查询请求,从而加快查询速度。当客户端发起查询请求时,Elasticsearch会将请求分发到包含所需数据的分片上,并将结果合并后返回给客户端。
  • 负载均衡‌:通过副本分片,Elasticsearch可以在多个节点上分散查询负载,从而实现负载均衡。这有助于避免单个节点成为查询热点,并提高整体查询性能。
 

数据分片的原理

💡
Elasticsearch数据分片的原理是其分布式架构的核心,旨在提高数据的可处理性、可扩展性和容错性。以下是Elasticsearch数据分片的详细解释:
1. 分片的概念
  • 分片(Shard)‌:在Elasticsearch中,一个索引可以被分成多个分片,每个分片都是一个Lucene索引的实例,包含索引数据的一部分。分片是Elasticsearch分发和并行处理数据的单元。
2. 分片的类型
  • 主分片(Primary Shards)‌:每个索引在创建时都会分配一定数量的主分片,用于存储和索引数据。主分片的数量在索引创建时确定,之后不能更改。主分片负责处理数据的写入和更新操作。
  • 副本分片(Replica Shards)‌:每个主分片都可以有一个或多个副本分片,副本分片是主分片的复制,用于提供数据的冗余和查询的负载均衡。副本分片不处理数据的写入,但可以处理读请求,以提高查询性能和系统的容错性。
3. 分片的分配
  • 分配原则‌:Elasticsearch会自动将分片分配到集群中的不同节点上,以实现数据的分布式存储和并行处理。默认情况下,Elasticsearch会尝试在节点间均衡分配分片,以优化集群的性能和负载均衡。
  • 节点角色‌:在Elasticsearch集群中,节点可以根据其功能和角色分为不同类型,如主节点、数据节点和协调节点。数据节点负责存储和处理分片数据,而主节点则负责集群的管理和协调。
4. 分片数量的确定
  • 索引创建时指定‌:分片的数量只能在索引创建前指定,并且索引创建后不能更改。这是因为Elasticsearch使用取模算法来确定文档应该存储在哪个分片中,如果更改了分片数量,之前的路由值将变得无效,导致无法查询旧数据。
  • 默认分片数‌:在Elasticsearch的不同版本中,默认分片数可能有所不同。例如,在Elasticsearch 7.x版本中,默认索引分片数调整为1个主分片。
5. 分片与数据扩展
  • 水平扩展‌:通过增加更多的节点,Elasticsearch集群可以水平扩展以处理更多的数据和查询请求。新节点加入集群后,Elasticsearch会自动将部分分片迁移到新节点上,以实现负载均衡和数据的分布式存储。
  • 容错性‌:副本分片的存在使得Elasticsearch集群具有容错性。当某个节点或主分片发生故障时,可以从副本分片中恢复数据,确保数据的可用性和系统的稳定运行。
6. 分片与查询性能
  • 查询优化‌:Elasticsearch的查询操作可以在多个分片上并行执行,从而加快查询速度。当客户端发起查询请求时,Elasticsearch会将请求分发到包含所需数据的分片上,并将结果合并后返回给客户端。
  • 路由机制‌:Elasticsearch使用路由机制来确定文档应该存储在哪个分片中。路由值(默认为文档的ID)通过哈希函数计算得到一个数字,然后该数字除以主分片数量得到余数,余数即为文档所在分片的位置。
 
 

如何保证数据一致性的

Elasticsearch通过一系列精心设计的机制来确保数据的一致性,这些机制涵盖了分布式系统的各个方面。以下是对Elasticsearch如何保证数据一致性的详细解释:

1. 分布式一致性协议

Elasticsearch采用了分布式一致性协议(如Raft或Zen的变种)来确保数据在不同节点间的一致性。这些协议通过选举和协商机制,保证了数据分片的副本在集群中的一致性。具体来说,它们能够确保在分布式环境下,当数据发生更新时,所有相关的副本都能被同步更新,以保持数据的一致性。

2. 乐观锁和版本号控制

Elasticsearch在处理文档时,会利用乐观锁和版本号控制来确保数据的一致性。每个文档都有一个版本号,每当文档被修改时,版本号就会递增。当多个请求同时对同一文档进行更新时,Elasticsearch会检查请求中的版本号是否与当前文档的版本号一致。如果版本号不一致,说明文档已经被其他请求修改过,此时Elasticsearch会拒绝执行更新操作,并返回错误。这种方式确保了同一文档在多个请求之间的操作具有原子性,从而保持了数据的一致性。

3. 序列号处理

除了版本号控制外,Elasticsearch还使用文档的序列号来保证数据一致性。每当文档被修改时,其序列号也会发生变化。在并发修改的场景下,Elasticsearch会根据序列号来确定操作的顺序,从而避免冲突并确保数据的一致性。

4. 复制策略

Elasticsearch中的索引可以设置备份和复制策略。每个主分片都可以有多个副本分片,这些副本分片存储在不同的节点上。当主分片发生故障时,副本分片可以自动接管服务,确保数据的连续性和可靠性。此外,通过复制策略,Elasticsearch还可以实现数据的冗余存储,进一步提高数据的可用性和一致性。

5. 分布式事务

虽然Elasticsearch本身并不直接支持传统意义上的ACID事务(原子性、一致性、隔离性、持久性),但它支持基于乐观并发控制(Optimistic Concurrency Control)的事务处理。在分布式事务中,Elasticsearch会确保所有相关的分片都在同一时间进行更新,从而保持数据的一致性。这种机制在处理复杂的分布式事务时非常有用。

6. 索引刷新和刷新策略

Elasticsearch提供了索引刷新机制,通过将内存中的数据定期刷新到磁盘上,来保证数据的持久性和一致性。用户可以根据实际需求配置刷新策略,以在写入性能和数据一致性之间取得平衡。
 
综上所述,Elasticsearch通过分布式一致性协议、乐观锁和版本号控制、序列号处理、复制策略、分布式事务以及索引刷新和刷新策略等多种机制来确保数据的一致性。这些机制共同作用,使得Elasticsearch成为一个可靠、稳定且高效的分布式搜索和分析引擎。
 

数据分片的影响因素

Elasticsearch数据分片设置的影响因素是多方面的,这些因素共同决定了分片在集群中的分布和性能。以下是对这些影响因素的详细归纳和分点表示:

1. 数据量与索引设置

  • 数据量‌:索引的数据量大小直接影响分片的数量和分布。当索引的数据量很大时,需要更多的分片来分散存储和查询的压力。索引的数据量大小是决定分片数量的一个重要因素。较大的数据量需要更多的分片来分散存储和查询的压力。
  • 索引设置‌:在创建索引时,可以通过number_of_shards参数指定分片数量。一旦索引创建,主分片的数量就不能更改(除非重新创建索引)。合理的分片数量能够平衡存储和查询性能。高查询负载的索引可能需要更多的分片来并行处理查询请求,以提高查询性能。

2. 集群规模与硬件性能

  • 集群规模‌:集群中节点的数量和性能决定了能够处理的数据量和查询负载。较大的集群可以容纳更多的分片和副本,提高系统的可扩展性和容错性。
  • 硬件性能‌:节点的硬件性能(如CPU、内存、磁盘IO等)直接影响分片的存储和查询效率。高性能的节点能够处理更多的分片和数据。

3. 副本与冗余

  • 副本数量‌:每个主分片可以有多个副本分片,这些副本分片分布在集群的不同节点上,用于提高数据的冗余和查询性能。副本数量可以通过number_of_replicas参数在索引创建时指定,并可以在索引创建后动态调整。
  • 数据冗余‌:副本分片的存在使得在部分节点故障时,数据仍然可以从其他节点恢复,保证了数据的可靠性和服务的连续性。

4. 分片分配策略

  • 默认分配策略‌:Elasticsearch默认会尽量将分片均匀地分配给所有可用节点,以实现负载均衡。但是,在某些情况下(如节点故障、网络延迟等),分片分布可能会出现不均衡的情况。
  • 自定义分配策略‌:用户可以根据需要自定义分片分配策略,如设置特定的节点来存储特定的分片,或者调整分片分配时的权重等。这可以通过设置索引的分配属性(如index.routing.allocation.includeindex.routing.allocation.exclude等)来实现。

5. 集群状态与动态管理

  • 集群状态‌:Elasticsearch集群的状态(如绿色、黄色、红色)反映了集群的健康状况。在集群状态异常时,分片分配可能会受到影响。
  • 动态管理‌:Elasticsearch支持动态管理分片,包括添加、删除和重新分配分片等。这些操作可以在不中断服务的情况下进行,提高了系统的灵活性和可用性。

6. 可用磁盘空间

  • 磁盘空间‌:Elasticsearch在向节点分配分片时,会考虑节点的可用磁盘空间。如果节点的磁盘空间不足,Elasticsearch会避免将新的分片分配给它,以防止数据丢失或服务中断。
  • 低水位线设置‌:用户可以通过设置disk.watermark.low等参数来定义磁盘使用率的低水位线,当节点磁盘使用率超过该阈值时,Elasticsearch将不会向该节点分配新的分片。

7. 注意事项

  • 分片数量限制‌:Elasticsearch对单个索引的分片数量有上限限制(例如,在Elasticsearch 7.x中,每个索引最多可以有1024个分片)。因此,在选择分片数量时,需要考虑到这一限制。
  • 分片调整‌:虽然主分片的数量在索引创建后不能更改,但可以通过调整副本数量来应对数据增长和查询负载的变化。此外,如果确实需要更改主分片的数量,可能需要考虑重新创建索引并迁移数据。
 

故障转移

集群的master节点会监控集群中的节点状态,如果发现有节点宕机,会立即将宕机节点的分片数据迁移到其它节点,确保数据安全,这个叫做故障转移。
默认情况下,每个节点都是master eligible节点,因此一旦master节点宕机,其它候选节点会选举一个成为主节点。当主节点与其他节点网络故障时,可能发生脑裂问题。
为了避免脑裂,需要要求选票超过 ( eligible节点数量 + 1 )/ 2 才能当选为主,因此eligible节点数量最好是奇数。对应配置项是discovery.zen.minimum_master_nodes,在es7.0以后,已经成为默认配置,因此一般不会发生脑裂问题。
 
notion image
  • master宕机后,EligibleMaster选举为新的主节点。
  • master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。

分片与副本

  • 分片(Shard)‌:是Elasticsearch中存储数据的基本单位。每个索引可以分成多个分片,这些分片可以分布在不同的节点上。主分片负责存储原始数据,而副本分片是主分片的冗余副本,用于提高数据的可用性和查询性能。
  • 故障转移机制‌:当主分片所在的节点发生故障时,副本分片会接管服务,确保数据的连续性和服务的稳定性。这种机制使得Elasticsearch能够在部分节点故障时自动进行故障转移,无需人工干预。

选举新主节点

  • 当主节点发生故障时,集群中的其他节点会开始选举新的主节点。选举过程基于一定的规则和算法,通常会选择状态最健康、资源最丰富的节点作为新的主节点。
  • 选举完成后,新的主节点会接管集群的管理权,继续维护集群的元数据和状态,确保集群的正常运行。

数据迁移与重建

  • 在故障转移过程中,如果需要恢复丢失的数据或重建索引,Elasticsearch会自动从其他可用的副本分片中迁移数据,并重建索引。
  • 数据迁移和重建的过程是透明的,对用户来说几乎感知不到,从而保证了服务的连续性和可用性。

注意事项

  • 配置合理的副本数量‌:为了确保在节点故障时能够有足够的副本分片接管服务,建议配置合理的副本数量。
  • 监控集群状态‌:定期监控集群的状态和性能指标,及时发现并解决问题,避免故障的发生。
  • 备份数据‌:定期备份数据是防止数据丢失的重要手段之一。即使发生了严重的故障,也可以通过恢复备份数据来恢复服务。
 
Elasticsearch — 索引(Mapping Index)Java算法 — 快速排序(Quick Sort)
Loading...
Honesty
Honesty
人道洛阳花似锦,偏我来时不逢春
最新发布
Java IO — NIO Buffer
2024-10-21
Java IO — NIO Channel
2024-10-21
Java IO — IO/NIO模型
2024-10-21
Java异步编程方式介绍
2024-10-21
Elasticsearch — 索引(Mapping Index)
2024-10-19
Elasticsearch — 如何存储数据并保持一致性?
2024-10-19