Elasticsearch集群管理原理

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。

Elasticsearch 不仅仅是一个全文搜索引擎,它还提供了分布式的多用户能力,实时的分析,以及对复杂搜索语句的处理能力,使其在众多场景下,如企业搜索,日志和事件数据分析等,都有广泛的应用。

本文将向你详细介绍 Elasticsearch 集群的基本概念、以及 Elasticsearch 集群 节点、分片、副本的工作原理和 Elasticsearch 涉及到相关节点的相关原理。


文章目录

        • 1、Elasticsearch集群的基本概念
          • 1.1、节点
          • 1.2、分片
        • 2、Elasticsearch集群节点工作原理
          • 2.1、选举过程
          • 2.2、状态监测和管理过程
          • 2.3、节点发现
        • 3、Elasticsearch集群数据工作原理
          • 3.1、数据分布
          • 3.2、关于分片管理
          • 3.3、关于副本管理
          • 3.4、数据恢复
        • 4、Elasticsearch其他工作节点及原理
          • 4.1、协调节点
          • 4.2、数据处理节点
          • 4.3、机器学习节点


1、Elasticsearch集群的基本概念
1.1、节点

在 Elasticsearch 集群中,节点(Node)是最基本的工作单元,每个节点都属于一个集群,并且拥有一个全局唯一的节点 ID 和一个可以自定义的节点名称。Elasticsearch 节点设计支持多种角色,这个是实现集群最重要的前提,节点角色各司其职,也可以任意组合,职责重合。

image-20231013174749654

Elasticsearch 的节点可以分为以下几种类型:

  1. 候选主节点(Master-eligible Node):也被称作选举节点(Voting Node),是指在集群中,可以被选为主节点的节点;
  2. 主节点(Master Node):主节点负责集群级别的操作,如创建或删除索引,跟踪哪些节点是集群的一部分,并决定哪些分片分配给相关节点。主节点被选举产生,一个集群中只有一个主节点;
  3. 数据节点(Data Node):数据节点存储数据,执行数据相关的 CRUD 操作和搜索聚合等;
  4. 协调节点(Coordinating Node):协调节点主要负责分发搜索请求、聚合搜索结果等,它不存储数据,也不参与集群的主节点选举;
  5. 数据处理节点(Ingest Node):数据处理节点负责预处理文档,比如解析日志行并将其转换为 JSON 文档;
  6. 机器学习节点(Machine Learning Node):机器学习节点用于运行机器学习作业,这是 X-Pack 插件提供的功能。

每个节点都可以通过配置来设定其角色,一个节点也可以同时担任多个角色。例如,一个节点可以同时是主节点和数据节点。

1.2、分片

在 Elasticsearch 中,“分片” 是数据存储和处理的基本单位。一个索引可以分为多个分片,每个分片是索引数据的一个子集。

分片有两种类型:主分片和副本分片。

  1. 主分片:创建索引时确定,用于存储索引的原始数据。每个索引至少有一个主分片。一个索引的数据会被分散在多个主分片上,但是每个主分片上的数据是不同的,不会出现冗余。每个主分片都存储索引数据的一部分,所有的主分片 together 存储了索引的全部数据;

  2. 副本分片:主分片的复制品,主要作用是提供数据冗余和增加查询容量。每个主分片可以有一个或多个副本分片。值得注意的是,Elasticsearch 会自动将主分片和副本分片分布在不同的节点上,以防止单个节点故障导致数据丢失。同时,Elasticsearch 也会自动处理副本的创建和同步等工作,无需用户手动干预。

分片的数量在创建索引时设定,并且主分片的数量在索引创建后不能更改。副本分片的数量可以在索引创建后动态更改。

分片可以分布在集群中的任何节点上,Elasticsearch 会自动处理分片的分布和负载均衡。当一个节点失败时,Elasticsearch 会自动将该节点上的分片迁移到其他节点上,以保证数据的可用性。


2、Elasticsearch集群节点工作原理
2.1、选举过程

Elasticsearch 集群的主节点选举过程主要涉及到两种节点角色:主节点和候选主节点。

  1. 主节点:负责处理集群级别的操作,如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定哪些分片分配给相关节点等;
  2. 候选主节点:可以被选为主节点的节点。在 elasticsearch.yml 配置文件中,通过 node.master: true 设置节点为主-eligible 节点。

主节点选举过程如下:

  1. 当一个候选主节点发现主节点失效或者集群启动时,会发起选举;
  2. 发起选举的节点会将自己的节点 ID 和集群状态版本号发送给集群中的候选主节点。
  3. 其他候选主节点收到选举请求后,会比较自己的集群状态版本号和请求中的版本号。如果自己的版本号更高,就拒绝投票;如果版本号相同或者更低,就投票给请求节点。
  4. 发起选举的节点收集投票结果。如果得到了集群中半数以上的候选主节点的投票,就成为新的主节点。
  5. 新的主节点会向集群中的其他节点发送新的集群状态。

这种投票机制可以确保集群在主节点失效时,能够快速选举出新的主节点,保证集群的高可用性。同时,通过比较集群状态版本号,可以确保新的主节点拥有最新的集群状态。

2.2、状态监测和管理过程

Elasticsearch 集群的状态监测和管理主要涉及到两种节点角色:主节点和数据节点。

  1. 主节点:负责处理集群级别的操作,如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定哪些分片分配给相关节点等。
  2. 数据节点:存储数据,执行数据相关的 CRUD 操作和搜索聚合等。

状态监测和管理过程如下:

  1. 主节点定期向集群中的所有节点发送心跳消息,检查节点的健康状态。
  2. 如果主节点在一定时间内没有收到某个节点的响应,会认为该节点失效,然后将其从集群状态中移除。
  3. 当有新节点加入集群,或者已经移除的节点重新恢复,主节点会更新集群状态,并将新的集群状态广播给所有节点。
  4. 数据节点会定期向主节点发送其上的分片信息,主节点根据这些信息决定是否需要重新分配分片。
  5. 主节点还会根据集群的负载情况,动态调整分片的分配,以保证集群的负载均衡。

对于主节点自身,如果主节点因为某种原因无法继续提供服务,例如进程崩溃或者网络故障,那么集群中的其他节点在一定时间内没有收到主节点的心跳消息,就会认为主节点已经下线,并开始主节点的选举过程。

2.3、节点发现

Elasticsearch 的节点发现主要依赖于其内置的 Zen Discovery 模块。这个模块负责节点之间的通信,以及主节点的选举。

节点发现的过程如下:

  1. 当一个新节点启动并加入到集群时,它会向集群中已知的节点发送 ping 请求。这些已知的节点可以是在配置文件中静态定义的,也可以是通过其他发现插件获取的。

  2. 收到 ping 请求的节点会回复自己的集群名称和当前的主节点信息。

  3. 新节点收到回复后,会检查集群名称是否和自己的一致。如果一致,就将回复中的主节点信息添加到自己的已知节点列表中,并尝试与主节点建立连接。

  4. 新节点成功连接到主节点后,主节点会将新节点添加到集群状态中,并将更新后的集群状态广播给所有节点。

  5. 其他节点收到新的集群状态后,也会尝试与新节点建立连接。


3、Elasticsearch集群数据工作原理
3.1、数据分布

Elasticsearch 集群的数据分布主要依赖于其分片(Shard)机制。每个索引的数据被分成多个分片,这些分片被分布在集群的各个节点上。每个分片都可以有一个或多个副本,副本也被分布在集群的各个节点上。

以下是 Elasticsearch 数据分布的主要原理:

  1. 分片分布:当创建索引时,你可以指定主分片的数量。Elasticsearch 会将这些主分片均匀地分布在集群的所有节点上。如果后续增加了节点,Elasticsearch 也会自动重新分布分片,以保持分片在各个节点上的均衡。

  2. 副本分布:你可以为每个索引设置一个或多个副本。Elasticsearch 会将副本分布在不存储对应主分片的节点上,以提供数据冗余。如果后续增加了节点或者增加了副本数量,Elasticsearch 也会自动重新分布副本。

  3. 数据平衡:Elasticsearch 会持续监控集群的状态,如果发现分片在节点间的分布不均,或者某个节点的负载过高,它会自动迁移分片,以达到负载均衡。

  4. 故障恢复:如果某个节点发生故障,Elasticsearch 会将该节点上的所有主分片和副本分片重新分配到其他健康的节点上,以保证数据的可用性。

通过这种方式,Elasticsearch 可以有效地管理大量数据的存储和查询,同时提供高可用性和良好的性能。

3.2、关于分片管理

Elasticsearch 集群的分片管理主要包括分片分配、分片平衡和分片恢复。

分片分配:在创建索引时,可以指定主分片的数量。每个主分片都会存储索引数据的一部分,所有的主分片 together 存储了索引的全部数据。主节点负责跟踪集群中的所有分片,并决定将哪些分片分配给哪些节点(一致性哈希算法)。主节点会根据集群的状态和负载情况,动态地进行分片分配和重新分配。

分片平衡:主节点会根据集群的负载情况,动态调整分片的分配,以保证集群的负载均衡。当新的节点加入集群时,主节点会将一部分分片分配给新节点。当节点失效或移除时,主节点会将其上的分片重新分配给其他节点。

分片恢复:当节点失效或移除时,主节点会将其上的分片重新分配给其他节点,以保证数据的可用性和冗余。同时,Elasticsearch 也支持手动恢复分片。例如,如果一个分片因为某种原因无法使用,可以使用 _recovery API 来手动恢复分片。

通过这种方式,Elasticsearch 能够实时监测和管理集群的状态,确保集群的高可用性和性能。同时,分片的冗余和自动分配机制也保证了数据的可靠性和容错能力。

3.3、关于副本管理

Elasticsearch 集群的副本管理主要包括副本分配、副本同步和副本恢复。

副本分为两种类型:主副本和从副本。

  1. 主副本:创建索引时生成的原始副本,负责处理写操作(如:增、删、改)。

  2. 从副本:主副本的复制品,可以处理读操作(如:查询和聚合)。

副本分配:在创建索引时,可以指定副本的数量。每个副本都是主分片的一个完整复制品,存储的数据和对应的主分片完全相同。主节点负责跟踪集群中的所有副本,并决定将哪些副本分配给哪些节点。主节点会根据集群的状态和负载情况,动态地进行副本分配和重新分配。

副本同步:当主分片的数据发生变化时,对应的副本也需要进行同步。Elasticsearch 会自动将主分片的变化同步到所有的副本。副本同步是异步进行的,不会阻塞主分片的写操作。

副本同步/数据复制流程如下:

  1. 客户端发送写请求到集群。

  2. 集群中的协调节点将请求路由到对应的主副本。

  3. 主副本执行写操作,并将操作记录到 translog(事务日志)。

  4. 主副本将操作同步到所有从副本。

  5. 从副本执行操作,并将操作记录到各自的 translog。

  6. 所有从副本都确认操作成功后,主副本向协调节点发送成功响应。

  7. 协调节点向客户端返回操作成功。

副本恢复:当主分片失效时,Elasticsearch 会自动从副本中选取一个提升为新的主分片。同时,Elasticsearch 也会创建新的副本,以替代提升为主分片的副本。副本恢复是自动进行的,无需人工干预。

通过这种方式,Elasticsearch 能够实现数据的高可用性和容错能力。即使某个主分片失效,也可以通过副本快速恢复,保证服务的连续性。同时,副本也可以提高查询性能,因为查询请求可以在多个副本之间进行负载均衡。

3.4、数据恢复

Elasticsearch 集群的数据恢复主要包括两个方面:节点恢复和快照恢复。

  1. 节点恢复:当 Elasticsearch 集群中的某个节点因为故障停止服务,然后又重新加入到集群中时,该节点上的数据需要进行恢复。Elasticsearch 会自动将该节点上的分片复制到其他健康的节点上,以保证数据的完整性和可用性。当故障节点恢复后,Elasticsearch 会将这些分片再复制回来,完成数据恢复。
  2. 快照恢复:Elasticsearch 支持创建索引的快照,并存储在外部存储系统中。当需要恢复数据时,可以从快照中恢复。恢复过程包括两个步骤:首先,从快照中恢复索引的元数据;然后,将数据分片恢复到集群中的节点上。

这两种恢复方式都是自动进行的,无需人工干预。通过这种方式,Elasticsearch 能够在节点故障或数据丢失的情况下,快速恢复数据,保证服务的可用性。


4、Elasticsearch其他工作节点及原理
4.1、协调节点

在 Elasticsearch 中,协调节点(Coordinating Node)主要负责接收客户端的请求,将请求路由到对应的节点,并收集各个节点的响应,最后将结果返回给客户端。协调节点不存储数据,也不参与数据处理,主要负责请求的协调和结果的汇总。

协调节点的工作过程如下:

  1. 客户端发送请求到协调节点。
  2. 协调节点根据请求类型和目标数据,将请求路由到对应的主节点或数据节点。
  3. 主节点或数据节点处理请求,并将结果返回给协调节点。
  4. 协调节点收集所有结果,进行汇总或处理,然后将最终结果返回给客户端。
4.2、数据处理节点

在 Elasticsearch 中,数据处理节点(Data Node)主要负责存储数据,执行数据相关的 CRUD 操作和搜索聚合等。

数据处理节点的工作过程如下:

  1. 数据处理节点接收来自协调节点或客户端的请求。

  2. 根据请求类型,数据处理节点执行相应的操作。例如,如果是写入请求,数据处理节点会将数据写入到对应的分片中;如果是查询请求,数据处理节点会在本地分片中执行查询,并返回结果。

  3. 数据处理节点将操作结果返回给协调节点或客户端。

在这个过程中,涉及到的其他角色节点主要有:

  1. 主节点:负责处理集群级别的操作,如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定哪些分片分配给相关节点等。

  2. 协调节点:接收客户端的请求,将请求路由到对应的节点,并收集各个节点的响应,最后将结果返回给客户端。

数据处理节点是 Elasticsearch 集群中最重要的角色之一,它直接负责数据的存储和处理。在大规模集群中,通常会有大量的数据处理节点,以提供足够的存储空间和处理能力。

4.3、机器学习节点

在 Elasticsearch 中,机器学习节点(Machine Learning Node)主要负责执行机器学习相关的任务,如数据分析和模型训练等。

机器学习节点的工作过程如下:

  1. 机器学习节点接收来自协调节点或客户端的请求。

  2. 根据请求类型,机器学习节点执行相应的操作。例如,如果是数据分析请求,机器学习节点会对数据进行分析,并返回结果;如果是模型训练请求,机器学习节点会使用数据训练模型,并保存模型。

  3. 机器学习节点将操作结果返回给协调节点或客户端。

在这个过程中,涉及到的其他角色节点主要有:

  1. 主节点:负责处理集群级别的操作,如创建或删除索引,跟踪哪些节点是集群的一部分,以及决定哪些分片分配给相关节点等。

  2. 协调节点:接收客户端的请求,将请求路由到对应的节点,并收集各个节点的响应,最后将结果返回给客户端。

  3. 数据节点:存储数据,执行数据相关的 CRUD 操作和搜索聚合等。

机器学习节点是 Elasticsearch X-Pack 插件提供的功能,它可以帮助用户在 Elasticsearch 中直接进行复杂的数据分析和机器学习任务,无需将数据导出到其他系统。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法练习13——跳跃游戏II

LeetCode 45 跳跃游戏 II 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回…

[Python进阶] 操纵鼠标:pyuserinput

6.2 操纵鼠标&#xff1a;pyuserinput 6.2.1 说明 在安装pyuserinput库时会自动安装PyMouse和PyKeyboard库。前者主要用来操作鼠标&#xff0c;包括鼠标的点击、移动等。后者主要用来操作键盘&#xff0c;包括键盘按键的按下、弹起等。 这两个库还可以同时对鼠标和键盘的事件…

idea一些不太常用但是能提升编码效率的快捷键

Ctrl Shift V&#xff1a;从历史选择粘贴 从历史剪粘版中选择要粘贴的内容。Ctrl Shift Z&#xff1a;重做 恢复上一步撤销内容Shift F4&#xff1a;在新窗口中打开 比如要从另一个类中复制代码 可以把这个类在新窗口单独打开 用AltTab 来回切换复制Ctrl PageUp&#xff…

前端、后端开发者常用到的免费API整理

以下是我整理的前端、后端工程师在开发中经常使用到的API接口&#xff0c;希望能帮到大家~ 手机号码归属地&#xff1a;可根据手机号码查询其省市区、运营商区号行政区划代码等信息。 上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。空号检测&#…

应变能力差怎么办?如何提高应变能力?

应变能力说的是人的反应能力&#xff0c;尤其是当环境&#xff0c;或者是事物在发生变化&#xff0c;如何做出快速反应&#xff0c;并且尽量确保这个反应是适当的&#xff0c;是最优的。这个反应有可能是本能反应&#xff0c;也有可能是基于快速思考后得出的。 良好的应变能力…

【漏洞复现】安全云平台存在任意文件下载getshell

漏洞描述 深圳市强鸿电子有限公司鸿运主动安全云平台存在任意文件下载漏洞,攻击者可通过此漏洞下载敏感文件信息。 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权…

el-table合计行合并

效果如下 因为合计el-table的合并方法是不生效的,所以需要修改css下手 watch: {// 应急物资的合计合并planData: {immediate: true,handler() {setTimeout(() > {const tds document.querySelectorAll(".pro_table .el-table__footer-wrapper tr>td");tds[0]…

MATLAB算法实战应用案例精讲-【图像处理】机器视觉(补充篇)

目录 前言 知识储备 嵌入式视觉系统 嵌入式视觉系统的构建模块 设备接口 图像处理链

C++笔记之std::future的用法

C笔记之std::future的用法 code review! 文章目录 C笔记之std::future的用法1.C中std::future和std::async总是一起出现吗&#xff1f;2.主要特点和用法3.一个完整的例子4.std::future 存放的是一个结果吗&#xff1f;5.cppreference——std::future 1.C中std::future和std::a…

数据分析基础:数据可视化+数据分析报告

数据分析是指通过对大量数据进行收集、整理、处理和分析&#xff0c;以发现其中的模式、趋势和关联&#xff0c;并从中提取有价值的信息和知识。 数据可视化和数据分析报告是数据分析过程中非常重要的两个环节&#xff0c;它们帮助将数据转化为易于理解和传达的形式&#xff0…

C++ - git 命令行

为什么要有 git 你很可能遇到过这种情况&#xff0c;在写项目的时候&#xff0c;要我不符合 leader 的要求&#xff0c;因而修改了很多个版本&#xff0c;但是修改到最后一版的时候&#xff0c;leader 有觉得当前这版还没有之前 某一版好&#xff0c;现在又要求你在 之前的那一…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(8)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7) 上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数中的drm_get_format_info函数,讲解了该函数的第一部分暨前一部分,本文讲解后一部分。为了便于理解以及理清脉络和当前所…

OJ项目——用户的登录拦截,我是如何实现的?

目录 前言 1、关于Session该如何处理 简单session回顾&#xff1a; 回顾session的setAttribute、getAttribute : 项目中如何做&#xff1f; 2、登陆拦截器实现 自定义拦截器&#xff1a; 自定义拦截&#xff1a; 前言 博主之前也有出过一期关于拦截器的&#xff0c;大…

Zabbix监控系统详解2:基于Proxy分布式实现Web应用监控及Zabbix 高可用集群的搭建

文章目录 1. zabbix-proxy的分布式监控的概述1.1 分布式监控的主要作用1.2 监控数据流向1.3 构成组件1.3.1 zabbix-server1.3.2 Database1.3.3 zabbix-proxy1.3.4 zabbix-agent1.3.5 web 界面 2. 部署zabbix代理服务器2.1 前置准备2.2 配置 zabbix 的下载源&#xff0c;安装 za…

零代码编程:用ChatGPT批量采集bookroo网页上的英文书目列表

bookroo网页上有很多不错的英文图书书目。比如这个关于儿童花样滑冰的书单&#xff1a; https://bookroo.com/explore/books/topics/ice-skating 怎么批量下载下来呢&#xff1f; 这个网页是动态网页&#xff0c;要爬取下来比较麻烦&#xff0c;可以先查看源代码&#xff0c;…

【c++】向webrtc学AheadOf、IsNewerTimestamp比较

webrtc源码分析-rtp序列号新旧比较 大神文章分析的非常到位。大神分析:AheadOrAt(a, b)是判断a是否比b新的核心,其原理是这样的:rfc1982规定了序列号递增间隔不能超过取值范围的1/2(这是自己理解的),那么要判断a是否比b新,只要判断b到a的递增是否在1/2即可,递增超过1/2,…

Golang中gRPC使用及原理探究

文章目录 概述gRPC的优势&#xff1a; 1、gRPC入门1.1 protobuf安装1.2 使用gRPC1.2.1 定义proto文件1.2.2 编译proto文件1.2.3 编写客户端和服务端代码 2、gRPC的通信模式2.1 一元RPC模式2.2 客户端流RPC模式2.3 服务端流RPC模式2.4双向流RPC模式 3、 gRPC的底层原理探究3.1 H…

css列表

在CSS中&#xff0c;你可以使用样式规则来自定义HTML列表的外观。HTML中有两种常见的列表类型&#xff1a;无序列表&#xff08;<ul>&#xff09;和有序列表&#xff08;<ol>&#xff09;。可以用于自定义列表&#xff1a; 自定义无序列表&#xff08;无序列表符号…

P1433 吃奶酪

#include <iostream> #include <cmath> using namespace std; #define M 15 #define S(n) ((n) * (n)) double indx[M 5], indy[M 5], ans 0, sum 0;//坐标数组&#xff0c;从下标为1开始记录 int n, vis[M 5] { 0 };//vis数组&#xff0c;选过的数字标记为1…

关于pytorch不区分行向量与列向量的理解

听李沐老师讲深度学习时候解释pytorch不区分行向量和列向量&#xff0c;只相当于是一维数组&#xff0c;一维张量一定是行向量&#xff0c;相当于数组&#xff0c;而行列向量可以放到矩阵中看。 测试如下&#xff1a; rtorch.tensor([1,2,3],dtypetorch.float32) print(r,r.T…