【Elasticsearch】Elasticsearch的分片和副本机制

news2024/9/27 5:57:42

文章目录

  • 📑前言
  • 一、分片(Shard)
    • 1.1 分片的定义
    • 1.2 分片的重要性
    • 1.3 分片的类型
    • 1.4 分片的分配
  • 二、副本(Replica)
    • 2.1 副本的定义
    • 2.2 副本的重要性
    • 2.3 副本的分配
  • 三、分片和副本的机制
    • 3.1 分片的创建和分配
    • 3.2 数据写入过程
    • 3.3 数据读取过程
  • 四、分片和副本的配置
    • 4.1 配置分片数量
    • 4.2 配置副本数量
    • 4.3 分片和副本的最佳实践
  • 五、分片和副本的故障恢复
    • 5.1 主分片故障恢复
    • 5.2 副本分片故障恢复
    • 5.3 故障恢复的配置
  • 六、分片和副本的监控
    • 6.1 监控分片状态
    • 6.2 监控集群健康状态
    • 6.3 监控指标
  • 七、小结

📑前言

Elasticsearch是一种分布式搜索和分析引擎,它具有高扩展性和高可用性。为了实现这些特性,Elasticsearch引入了分片(Shard)和副本(Replica)的概念。本文将详细介绍Elasticsearch中的分片和副本机制,帮助读者理解它们的重要性及其实现方法。

一、分片(Shard)

image.png

1.1 分片的定义

分片是Elasticsearch中存储数据的基本单位。一个索引可以由多个分片组成,每个分片都是一个独立的Lucene索引。通过分片,Elasticsearch可以将数据分布到多个节点上,从而实现数据的分布式存储和并行处理。

1.2 分片的重要性

分片机制使Elasticsearch具有以下优势:

  • 水平扩展:通过增加分片数量,可以水平扩展索引的存储容量和处理能力。
  • 并行处理:分片可以分布在不同的节点上,允许多个节点并行处理查询和索引请求,提高系统的性能和吞吐量。
  • 数据分布:分片机制使数据可以分布在集群的多个节点上,减少单点故障的风险,提高数据的可用性和可靠性。

1.3 分片的类型

Elasticsearch中的分片分为两种类型:

  • 主分片(Primary Shard):主分片是原始的数据分片,所有的写操作(如索引和删除)都首先作用于主分片。
  • 副本分片(Replica Shard):副本分片是主分片的复制品,用于提高数据的可用性和查询性能。副本分片接收来自主分片的数据更新,并在主分片不可用时提供冗余。

1.4 分片的分配

Elasticsearch在创建索引时,用户可以指定索引的分片数量。默认情况下,一个索引包含5个主分片。分片的数量一旦设置,主分片的数量是无法更改的(除非重新创建索引)。然而,副本分片的数量可以在索引创建后动态调整。

二、副本(Replica)

2.1 副本的定义

副本是主分片的完整复制品,它用于提高系统的容错能力和查询性能。每个主分片可以有多个副本分片,这些副本分片分布在集群的不同节点上。

2.2 副本的重要性

副本机制带来了以下好处:

  • 高可用性:副本分片提供了数据冗余,当主分片所在节点出现故障时,副本分片可以提升为主分片,保证数据的可用性。
  • 负载均衡:副本分片可以分担查询负载,减少主分片的压力,提高系统的查询性能和响应速度。
  • 数据恢复:当节点发生故障时,副本分片可以用于快速恢复数据,减少系统的停机时间。

2.3 副本的分配

副本分片的数量可以在索引创建时指定,默认情况下,每个主分片有一个副本分片。与主分片不同,副本分片的数量可以在索引创建后动态调整。Elasticsearch会自动管理分片和副本的分配,确保它们分布在集群的不同节点上,以最大限度地提高系统的容错能力和性能。

三、分片和副本的机制

3.1 分片的创建和分配

当创建一个新索引时,Elasticsearch会根据用户指定的分片数量创建主分片,并将这些分片分配到集群中的不同节点上。分片的分配过程如下:

  1. 分片创建:Elasticsearch根据索引的分片设置,创建指定数量的主分片。
  2. 分片分配:Elasticsearch将主分片分配到集群中的不同节点上,确保分片均匀分布。
  3. 副本创建:Elasticsearch根据索引的副本设置,为每个主分片创建副本分片。
  4. 副本分配:Elasticsearch将副本分片分配到与主分片不同的节点上,确保数据冗余。

3.2 数据写入过程

在Elasticsearch中,数据的写入过程包括以下步骤:

  1. 写请求发送到主分片:所有的写操作(如索引和删除)首先发送到主分片。
  2. 主分片处理写请求:主分片处理写请求,将数据写入到分片中。
  3. 写请求同步到副本分片:主分片将写操作同步到所有的副本分片,确保数据的一致性。
  4. 写操作完成:当所有副本分片确认写操作后,Elasticsearch返回写操作的结果。

3.3 数据读取过程

在Elasticsearch中,数据的读取过程包括以下步骤:

  1. 读请求发送到协调节点:客户端将查询请求发送到Elasticsearch集群中的任意节点,该节点作为协调节点处理请求。
  2. 协调节点路由请求:协调节点将查询请求路由到相关的主分片和副本分片。
  3. 分片并行处理查询:主分片和副本分片并行处理查询请求,返回查询结果。
  4. 协调节点汇总结果:协调节点汇总所有分片的查询结果,并返回给客户端。

四、分片和副本的配置

4.1 配置分片数量

在创建索引时,可以通过number_of_shards参数指定分片数量。例如:

PUT /my_index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  }
}

上述配置将创建一个包含3个主分片和每个主分片有1个副本分片的索引。

4.2 配置副本数量

副本数量可以在索引创建后动态调整。例如:

PUT /my_index/_settings
{
  "number_of_replicas": 2
}

上述配置将my_index索引的副本数量调整为2。

4.3 分片和副本的最佳实践

为了优化Elasticsearch的性能和可用性,建议遵循以下最佳实践:

  • 合理设置分片数量:分片数量应根据数据量和集群节点数量进行设置,避免分片过多导致管理开销过大。
  • 均匀分布分片:确保分片和副本均匀分布在集群的不同节点上,避免单点故障。
  • 监控和调整:定期监控分片和副本的状态,根据需要调整配置,确保系统的稳定性和性能。

五、分片和副本的故障恢复

5.1 主分片故障恢复

当主分片所在节点发生故障时,Elasticsearch会自动将对应的副本分片提升为主分片,确保数据的可用性。故障恢复过程如下:

  1. 节点故障检测:Elasticsearch检测到节点故障,标记节点上的分片为不可用。
  2. 副本提升为主分片:Elasticsearch将副本分片提升为主分片,确保数据的可用性。
  3. 重新分配副本分片:Elasticsearch在集群中的其他节点上创建新的副本分片,恢复数据冗余。

5.2 副本分片故障恢复

当副本分片所在节点发生故障时,Elasticsearch会在集群中的其他节点上重新创建副本分片,确保数据的冗余。故障恢复过程如下:

  1. 节点故障检测:Elasticsearch检测到节点故障,标记节点上的副本分片为不可用。
  2. 重新创建副本分片:Elasticsearch在集群中的其他节点上创建新的副本分片,恢复数据冗余。

5.3 故障恢复的配置

Elasticsearch允许用户配置故障恢复的行为,以满足不同的应用需求。例如,可以通过index.unassigned.node_left.delayed_timeout参数设置节点故障后重新分配分片的延迟时间:

PUT /my_index/_settings
{
  "index.unassigned.node_left.delayed_timeout": "5m"
}

上述配置将设置在节点故障后延迟5分钟重新分配分片,以防止短暂的网络问题导致不必要的分片重新分配。

六、分片和副本的监控

6.1 监控分片状态

Elasticsearch提供了多种工具和API来监控分片和副本的状态。例如,可以使用_cat/shards API查看索引的分片分配情况:

GET /_cat/shards/my_index?v

该命令将显示my_index索引的所有分片及其所在节点的信息。

6.2 监控集群健康状态

Elasticsearch的_cluster/health API可以用于监控集群的健康状态,包括分片和副本的状态:

GET /_cluster/health

该命令将返回集群的健康状态,包括分片和副本的数量、状态和分配情况。

6.3 监控指标

为了更全面地监控Elasticsearch的性能和健康状态,可以使用开源的监控工具,如Elasticsearch自身的监控插件(X-Pack Monitoring)、Prometheus和Grafana。这些工具可以帮助用户实时监控集群的各种性能指标,包括分片分配、查询性能、节点资源使用情况等。

七、小结

Elasticsearch的分片和副本机制是其实现高扩展性和高可用性的核心。通过合理配置分片和副本,Elasticsearch能够在大规模数据处理和高并发访问的场景下提供稳定高效的性能。同时,分片和副本机制也为系统提供了容错能力和数据冗余,确保在节点故障时数据的可用性。

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

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

相关文章

发送邮件API接口的安全性保障措施有哪些?

发送邮件API接口的性能如何评估?API接口的使用方法? 发送邮件API接口已经成为了许多应用和服务的核心功能之一。确保发送邮件API接口的安全性对于保护用户隐私和数据完整性至关重要。AokSend将详细探讨发送邮件API接口的安全性保障措施。 发送邮件API接…

查找算法:线性查找,golang实现

目录 前言 线性查找 代码示例 1. 算法包 2. 线性查找代码 3. 模拟程序 4. 运行程序 循环次数 假如目标值正好在数组中的第一位 假如目标值正好在数组中的第五位 假如目标值正好在数组中的最后一位 假如目标值不在数组中 线性查找的思想 1. 顺序遍历 2. 比较 3.…

使用GPT-4插件增强LLM的功能

文章目录 GPT-4插件概述插件清单OpenAPI规范描述GPT-4插件 尽管包括GPT-4在内的LLM在各种任务上都现出色,但它们仍然存在面有的局限性。比如,这些模型只能从训练数据中学习,这些数据往往过时或不造用于特定的应用。此外,它们的能力仅限于文本生成。我们还发现,LLM不适应于…

人工智能深度学习系列—深度学习中的边界框回归新贵:GHM(Generalized Histogram Loss)全解析

文章目录 1. 背景介绍2. Loss计算公式3. 使用场景4. 代码样例5. 总结 1. 背景介绍 目标检测作为计算机视觉领域的核心技术之一,其精确度的提升一直是研究者们追求的目标。边界框回归作为目标检测中的关键步骤,其性能直接影响到检测的准确性。本文将详细…

“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议

7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…

25考研数据结构复习·7.3树形查找

目录 二叉排序树 平衡二叉树 平衡二叉树的删除 红黑树 红黑树的插入 红黑树的删除 二叉排序树 二叉排序树的定义 &#x1f469;‍&#x1f4bb; 左子树结点值 < 根节点值 < 右子树结点值默认不允许两个结点的关键字相同查找操作 从根节点开始&#xff0c;目标值更…

用 VS Code 开发 uni-app 项目

文章目录 1.为什么选择 VS Code &#xff1f;2.安装相关插件2.1 安装uni-app插件2.2 安装ts类型检验 3.在微信小程序中运行 1.为什么选择 VS Code &#xff1f; ⚫ HbuilderX 对 TS 类型支持暂不完善 ⚫ VS Code 对 TS 类型支持友好&#xff0c;同时VS Code 也是我们熟悉的编辑…

移远通信LTE-A模组EM060K-GL成为ChromeOS准入供应商

近日&#xff0c;全球领先的物联网整体解决方案移远通信宣布&#xff0c;其先进的LTE-A模组EM060K-GL已进入谷歌Chrome OS准入供应商名录&#xff0c;后续将作为候选模组用于搭载Chrome OS系统的笔记本电脑中&#xff0c;为其提供“始终在线”的网络连接体验。这一重要里程碑彰…

禾川Q1系列PLC通过ModbusRtu控制E600变频器

一、新建CodeSys工程项目 新建工程可以选择【File】→【New Project】,也可以直接选择【New Project】两种方式 用户可以选择需要的项目类型,命名项目工程以及存储路径,完成后选择【OK】 选择连接设备【HCQ1-1300-D】(在此之前PC已经安装Q1安装包),选择编程语言,教程示例…

Node.js(4)——模块化

什么是模块化&#xff1f; ComminJS模块是为Node.js打包JavaScript代码的原始方式。Node.js还支持浏览器和其他JavaScript运行时使用的ECMAScript标准。在Node.js中&#xff0c;每个文件都被视为一个单独的模块。 CommonJS标准 使用&#xff1a; 导出&#xff1a;moudule.exp…

一六零、云服务器开发机配置zsh

切换shell 在Linux中默认使用/bin/bash&#xff0c;在用户创建时&#xff0c;会自动给用户创建用户默认的shell。默认的shell就是/bin/bash。要修改shell将其设置为/bin/ksh&#xff0c;有两种方法方法 # 方法一: chsh -s /bin/ksh chsh -s /bin/zsh # 方法二: usermod -s /b…

基于CIFAR10的图片识别

前言 这个算是重拾一个古早项目了&#xff0c;当时搭建神经网络对CIFAR10数据集进行训练以后&#xff0c;对训练好的网络进行了验证&#xff0c;可以参考这笔者的两篇博客&#xff1a; pytorch 模型训练&#xff08;以CIFAR10数据集为例&#xff09;_pytorch cifar10-CSDN博客…

CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法2)

在文章CAPL使用结构体的方式组装一条DoIP车辆声明消息(方法1)中,我们声明一个结构体DoIPMessage表示完整的DoIP车辆声明消息: 上半部分是DoIP报头通用部分(也就是所有类型的DoIP消息都有的),而payload是每个类型的DoIP消息独有的部分,对于车辆声明消息来说,用另一个结…

Golang | Leetcode Golang题解之第309题买卖股票的最佳时机含冷冻期

题目&#xff1a; 题解&#xff1a; func maxProfit(prices []int) int {if len(prices) 0 {return 0}n : len(prices)f0, f1, f2 : -prices[0], 0, 0for i : 1; i < n; i {newf0 : max(f0, f2 - prices[i])newf1 : f0 prices[i]newf2 : max(f1, f2)f0, f1, f2 newf0, n…

【划分字母区间】python刷题记录

R3-贪心篇. 思路&#xff1a; 1.使用dict记录S中每个字符出现的最后位置 2.从s[0]开始&#xff0c;j该元素的dict值&#xff0c;遍历s&#xff0c;如果出现s[i]>j&#xff0c;就需要更新j的值 3.i到j了&#xff0c;那就下一段 class Solution:def partitionLabels(self,…

「Unity3D」自动布局LayoutElement、ContentSizeFitter、AspectRatioFitter、GridLayoutGroup

布局元素与布局控制器 布局元素实现ILayoutElement接口&#xff0c;布局控制器实现ILayoutController接口&#xff0c;后者根据前者的属性控制具体布局——有些布局控制器也是布局元素&#xff0c;即同时实现这两个接口&#xff0c;如LayoutGroup。 public interface ILayout…

【原创教程】电气电工:电烙铁的使用方法(入门)

今天我们深入了解电烙铁的相关知识及其应用。电烙铁作为电气电工行业中的重要工具&#xff0c;它在焊接和电路维修等方面扮演着不可或缺的角色。接下来&#xff0c;我们将一起探索电烙铁的奥秘。 一、电烙铁概述 电烙铁是一种通过电能转化为热能进行焊接的工具。它具有体积小…

jenkins服务器重启,构建记录消失

1、进入系统管理查看系统运行日志&#xff0c;发现报保存构建日志失败 jenkins module java.base does not "opens java.lang.ref" to unnamed module 5276d6ee Java平台模块系统对类的可见性和访问权限进行了严格的控制。在Java 9及以上版本中&#xff0c;java.la…

武汉流星汇聚:深耕跨境电商,万企信赖之选,共绘全球贸易新蓝图

在全球化浪潮汹涌的今天&#xff0c;跨境电商作为连接世界经济的桥梁&#xff0c;正以前所未有的速度改变着国际贸易的格局。在这场充满机遇的旅途中&#xff0c;武汉流星汇聚电子商务有限公司犹如一颗璀璨的流星&#xff0c;划破长空&#xff0c;以其卓越的实力和不懈的努力&a…

JetBrains:XML tag has empty body警告

在xml文件中配置时&#xff0c;因为标签内容为空&#xff0c;出现黄色警告影响观感。 通过IDE配置关闭告警