【DevOps】深入剖析Elasticsearch的分片与副本对性能的影响

目录

一、分片 (Shards)

1、什么是分片?

2、分片的类型

3、分片对性能的影响

二、副本 (Replicas)

1、什么是副本?

2、副本对性能的影响

三、最佳实践

1、主分片数量的选择

2、副本分片的设置

3、监控和调整

4、考虑使用 Shrink 和 Split API

四、优化实战

1、副本数量配置建议

2、推荐配置

3、其他注意事项

在 Elasticsearch 中,**分片(Shards)副本(Replicas)**是确保数据分布和高可用性的核心概念。正确地配置分片和副本对于优化搜索和索引性能至关重要。以下是对这两个概念的详细解释以及它们如何影响 Elasticsearch 的性能。

一、分片 (Shards)

1、什么是分片?

分片是 Elasticsearch 中数据存储的基本单位。当你创建一个索引时,你可以指定它被分割成多少个分片。每个分片本身是一个完全功能的、独立的 "Lucene" 索引。这些分片允许 Elasticsearch 将数据分布式存储,提供数据的水平扩展和并行处理能力。

2、分片的类型
  • 主分片(Primary Shards)

    • 主分片负责存储数据和处理写操作(如索引或更新文档)。
    • 索引创建时设置的分片数量决定了主分片的数量,创建后这个数字不能更改(除非重新索引)。
  • 副本分片(Replica Shards)

    • 副本分片是主分片的拷贝,用于提供高可用性和负载均衡。
    • 副本分片可以处理读请求(如搜索和检索文档),并提供数据冗余以防主分片失败。
3、分片对性能的影响
  • 写入性能

    • 写入性能(索引、更新、删除)主要受主分片的数量影响。
    • 更多的主分片可以提高写入吞吐量,因为操作可以并行化到多个分片上。但是,每个分片都会消耗资源(CPU、内存、磁盘),过多的分片会导致资源竞争,反而降低性能。
  • 读取性能

    • 读取性能(搜索、检索)可以通过增加副本分片来提高,因为更多的副本可以处理更多的并发读请求。
    • 副本分片还可以减少单个分片的读负载,因为请求可以在多个副本之间均匀分配。
  • 容错和可用性

    • 增加副本分片数量可以提高系统的容错能力。如果一个节点或分片失败,Elasticsearch 可以从副本中恢复数据。
    • 在分布式环境中,副本是保证数据不丢失和持续可用的关键。
  • 资源使用

    • 无论是主分片还是副本分片,都需要计算和存储资源。分片数量的增加会直接增加内存和CPU的使用,因为每个分片都有自己的索引结构和缓存。
    • 分片过多会导致小文件问题,增加文件系统的压力,并降低 I/O 效率。

二、副本 (Replicas)

1、什么是副本?

副本是数据的冗余拷贝,存储在副本分片中。在 Elasticsearch 中,你可以指定每个主分片有多少个副本分片。这些副本分片可以在不同的节点上,以支持高可用性和扩展性。

2、副本对性能的影响
  • 读取性能提升

    • 副本最直接的性能提升是在读操作上。因为 Elasticsearch 可以从主分片或任何副本分片中读取数据,多个副本分片意味着可以处理更多的并发读请求。
  • 写入性能影响

    • 每次写入(索引、更新、删除)不仅要在主分片上执行,还要在所有副本分片上重复。因此,副本分片数量增加会增加写操作的负担,每次写操作需要同步到更多的副本上。
  • 系统资源使用

    • 更多的副本意味着更多的数据拷贝和更多的索引结构,这会增加对资源(如内存和CPU)的需求。在资源有限的情况下,过多的副本可能会降低性能。
  • 高可用性和故障恢复

    • 副本的主要目的是提供高可用性。在某个分片或节点失败时,Elasticsearch 可以从副本中恢复数据,几乎不影响用户查询。
    • 更多的副本可以更快地恢复数据,因为 Elasticsearch 有更多选项来重新分配和平衡网络中的数据。

三、最佳实践

1、主分片数量的选择
  • 主分片的理想数量取决于数据量、硬件资源和使用场景。通常建议将每个主分片的大小保持在几十GB到几百GB之间。
  • 对于静态数据或只增加不修改的数据,更大的分片(接近50GB)通常更有效。
  • 对于需要频繁更新或删除的数据,较小的分片(10GB-20GB)可能更合适,因为这样可以减少段合并的开销。
2、副本分片的设置
  • 副本分片的数量通常根据读取负载来调整。如果系统是读取密集型的(例如,搜索或分析应用),增加副本分片可以提供更好的读取性能。
  • 在决定副本数量时,也要考虑集群的节点数量。至少应该有足够的节点来分配这些副本,而不是所有副本都在同一个节点上。
3、监控和调整
  • 使用 Elasticsearch 的监控工具(如 Elastic Stack 中的 Kibana)定期检查分片的健康和性能。
  • 如果检测到性能瓶颈,可以根据具体情况调整分片和副本的数量。
4、考虑使用 Shrink 和 Split API
  • 对于需要减少分片数量的旧索引,可以使用 Shrink API 来减少分片数量。
  • 对于需要增加分片以支持更多数据的场景,可以使用 Split API 来增加分片数量。

通过合理配置分片和副本,可以显著提高 Elasticsearch 的性能和可靠性。这需要根据你的具体数据量、查询类型和硬件资源来动态调整和优化。

四、优化实战

在一个包含 3 个节点的 Elasticsearch 集群中,合理配置副本数量取决于数据的可用性需求和性能要求。对于数据量较小的情况,副本数量的合理配置考虑如下:

1、副本数量配置建议

1.1、 副本数设置为 1:

  • 可用性: 保证每个主分片有一个副本分片。如果一个节点故障,其他两个节点仍有完整的数据副本。
  • 性能: 副本可以分担读请求,提高查询性能。
  • 优点:
    • 提供高可用性。
    • 提高读性能。
  • 缺点:
    • 写入性能略有下降,因为每次写入都需要同步到副本分片。
  • 适用场景: 数据量较小,需要高可用性和良好的读取性能。

1.2、 副本数设置为 2:

  • 可用性: 每个主分片有两个副本分片,即每个节点都持有一份数据。在这种配置下,即使两个节点故障,剩余节点仍然可以提供服务。
  • 性能: 可以平衡读请求,提高查询性能。
  • 优点:
    • 最高级别的高可用性。
    • 最佳的读性能。
  • 缺点:
    • 写入性能会受到更明显的影响,因为写入操作需要同步到两个副本分片。
  • 适用场景: 数据量较小,但对高可用性要求极高,并且查询请求量大。
2、推荐配置

在 3 节点的集群中,通常建议将副本数量设置为 1。这意味着每个主分片将有一个副本分片,实现数据的高可用性和读取性能的平衡。

示例配置:

PUT /your_index/_settings
{
  "number_of_replicas": 1
}
3、其他注意事项
  1. 分片数量: 对于数据量较小的情况,主分片数量不宜过多。建议设置主分片数量为 1 或 2。
  2. 数据均衡: 确保主分片和副本分片在 3 个节点之间均匀分布,以避免负载不均衡问题。
  3. 监控与调整: 使用监控工具(如 Kibana Monitoring 或 Prometheus/Grafana)持续监控性能并根据负载调整配置。

通过合理配置副本数量和分片数量,可以在确保高可用性的同时优化性能。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MCU做死循环时,到底应该用for(;;) 还是wihile(1)

MCU做死循环时 for while stm32中老工程师用forfor while背景for版本while版本正方观点:哪有好的编译器:反方观点:这种代码过时了工程师实地测试:和编译器和优化有关 建议还是用for参考 stm32中老工程师用for /* Start scheduler …

MS2107 宏晶微 音视频采集芯片 提供开发资料

1. 基本介绍 MS2107 是一款视频和音频采集芯片,内部集成 USB2.0 控制器和数据收发模块、视频 ADC模块、音频 ADC 模块和音视频处理模块。MS2107可以将 CVBS、S-Video 和音频信号通过 USB接口传送到 PC、智能手机和平板电脑上预览或采集。MS2107 输出支持 YUV422 和 MJPEG 两种…

css: hover 划过显示/隐藏 div 样式

1. 图例: 划过用display: block;和 display: none; 显示div和隐藏div div: <div class="sectorBox"> <div v-for="(item, index) in sectorList" :key="index" class="sill"> <div class="si…

三维点云处理-聚类(下)

接着前一部分数据聚类方法的介绍&#xff0c;由于K-means和GMM方法都是基于欧式距离信息处理的&#xff0c;两者分别以圆形和椭圆形来作为数据的聚类分割方式&#xff0c;这种情况下会导致环形图和月牙图数据分割不准确&#xff0c;因此进一步的介绍一种谱聚类方法&#xff0c;…

Elastic 通过 AI 驱动的安全分析改变 SIEM 游戏

作者&#xff1a;Santosh Krishnan, Jennifer Ellard 借助由搜索 AI 提供支持的新攻击发现功能&#xff0c;优先考虑攻击&#xff0c;而不是警报。 传统的安全信息与事件管理系统&#xff08;SIEM&#xff09;在很大程度上依赖屏幕背后的人类才能取得成功。警报、仪表盘、威胁…

Python高级编程-DJango2

Python高级编程-DJango2 没有清醒的头脑&#xff0c;再快的脚步也会走歪&#xff1b;没有谨慎的步伐&#xff0c;再平的道路也会跌倒。 目录 Python高级编程-DJango2 1.显示基本网页 2.输入框的形式&#xff1a; 1&#xff09;文本输入框 2&#xff09;单选框 3&#xff…

我用 GitHub 9.8k 的 Go 语言 2D 游戏引擎写了个游戏

前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个 GitHub &#x1f31f;9.8k 的 Go 语言 2D 游戏引擎。 https://github.com/hajimehoshi/ebiten 引擎的贡献者依旧在积极维护&#xff0c;是一个兼具学习 & 娱乐的项目&#xff01; 为此我也用这个…

数据结构-线性表-应用题-2.2-11

1)算法的基本设计思想&#xff1a; 分别求两个升序序列的中位数a,b 若ab&#xff0c;则a或b即为所求中位数 若a<b&#xff0c;则舍弃A中较小的一半&#xff08;中位数偏小&#xff0c;往后面找&#xff09;&#xff0c;同时舍弃序列B中较大的一半&#xff0c;两次舍弃长度…

meshlab: pymeshlab保存物体的横截面(compute planar section)

一、关于环境 请参考&#xff1a;pymeshlab遍历文件夹中模型、缩放并导出指定格式-CSDN博客 二、关于代码 本文所给出代码仅为参考&#xff0c;禁止转载和引用&#xff0c;仅供个人学习。 # pymeshlab需要导入&#xff0c;其一般被命名为ml import pymeshlab as ml# 本案例所…

C++ | Leetcode C++题解之第74题搜索二维矩阵

题目&#xff1a; 题解&#xff1a; class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m matrix.size(), n matrix[0].size();int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 l…

YOLOv8的训练、验证、预测及导出[目标检测实践篇]

这一部分内容主要介绍如何使用YOLOv8训练自己的数据集&#xff0c;并进行验证、预测及导出&#xff0c;采用代码和指令的两种方式&#xff0c;参考自官方文档&#xff1a;Detect - Ultralytics YOLOv8 Docs。实践篇不需要关注原理&#xff0c;只需要把流程跑通就行&#xff0c;…

白色或类白色的粉末/固体,DOTA-Ala-Ala-Tyr-COOH,是一种具有特定氨基酸序列的多肽,具有良好的稳定性和溶解性

一、试剂信息 英文名&#xff1a;DOTA-Ala-Ala-Tyr-COOH&#xff0c;DOTA-AAY-OHCAS号&#xff1a;N/A分子式&#xff1a;C31H47N7O12分子量&#xff1a;709.74结构式&#xff1a; 纯度标准&#xff1a;≥95%包装规格&#xff1a;1g&#xff0c;5g&#xff0c;10g&#xff08…

Selenium——获取元素和操纵元素的方法

1、获取元素的方法 1、通过id获取 element wd.find_element(By.ID,"id")2、通过classname获取 elements wd.find_elements_by_class_name("plant") for element in elements:print(element.text)3、通过tagname获取元素 elements wd.find_elements_…

SpringBoot2 仿B站高性能前端+后端项目(wanjie)

SpringBoot2 仿B站高性能前端后端项目(完结) Spring Boot 2 仿B站高性能前端后端项目&#xff1a;打造高效、稳定、可扩展的应用 在当今的互联网时期&#xff0c;网站的性能、稳定性和可扩展性成为了权衡一个项目胜利与否的关键要素。本文将引见如何运用 Spring Boot 2 构建一…

AIGC-3D数字人技术:高效助推各行业数字化水平升级

从“互联网”到“人工智能”&#xff0c;数字员工作为一种全新的交互形式&#xff0c;对企业有着重要的作用&#xff0c;企业、品牌通过数字人的AI语音交互、AI播报等核心功能&#xff0c;可以有效推动企业提升数字水平。 作为3D、AI虚拟数字人技术服务商及方案提供商&#xff…

鸿蒙内核源码分析(工作模式篇) | CPU的七种工作模式

本篇说清楚CPU的工作模式 工作模式(Working mode) 也叫操作模式&#xff08;Operating mode&#xff09;又叫处理器模式&#xff08;Processor mode&#xff09;&#xff0c;是 CPU 运行的重要参数&#xff0c;决定着处理器的工作方式&#xff0c;比如如何裁决特权级别和报告异…

【IP:Internet Protocol,子网(Subnets),IPv6:动机,层次编址:路由聚集(rout aggregation)】

文章目录 IP&#xff1a;Internet Protocol互联网的的网络层IP分片和重组&#xff08;Fragmentation & Reassembly&#xff09;IP编址&#xff1a;引论子网&#xff08;Subnets&#xff09;特殊IP地址IP 编址: CIDR子网掩码&#xff08;Subnet mask&#xff09;转发表和转发…

【verilog-语法】编译命令( compiler directives )

一、前言 编译器指令的范围是从它的出现的点延伸到处理的所有文件&#xff0c;直到另一个编译器指令取代它或处理结束。编所有的编译命令都有重音符 " "引出。在IEEE std1364-2005中共介绍了19条编译命令&#xff0c;这19条命令又可分为12组命令进行独立或组合使用…

Unity射击游戏开发教程:(12)使用后处理

后处理 后期处理是向您的游戏场景添加一个或多个滤镜,确实可以为您的游戏提供精美的外观。在本文中,我们将讨论如何在 Unity 中设置后处理系统,从那里您可以探索和试验 Unity 提供的所有过滤器。 首先,我们需要从包管理器添加后处理器堆栈。包管理器是 Unity 产品的集合,…

【LAMMPS学习】八、基础知识(5.11)磁自旋

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…
最新文章