【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.mzph.cn/diannao/8017.shtml

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

相关文章

vue3中用 let a= b赋值会改变b的值

注意b是reactive const paramreactive({ pageSize:12, }) 在JavaScript中,基本类型(比如String,Number,Boolean,undefined,null)是按值传递的,这意味着当你将一个基本类型变量赋值给…

k8s部署Kubeflow v1.7.0

文章目录 环境介绍部署访问kubeflow ui问题记录 环境介绍 K8S版本:v1.23.17,需要配置默认的sc 参考:https://github.com/kubeflow/manifests/tree/v1.7.0 部署 #获取安装包 wget https://github.com/kubeflow/manifests/archive/refs/tag…

faiss 原理和使用总结

FAISS(Facebook AI Similarity Search)是由 Facebook AI Research 开发的一个高效的相似性搜索和密集向量索引库。它主要用于大规模向量搜索和高维数据的聚类。下面,我将为你概述 FAISS 的工作原理和使用方法。 ### 原理 1. **向量量化&…

致远M3 Session 敏感信息泄露漏洞复现

0x01 产品简介 M3移动办公是致远互联打造的一站式智能工作平台,提供全方位的企业移动业务管理,致力于构建以人为中心的智能化移动应用场景,促进人员工作积极性和创造力,提升企业效率和效能,是为企业量身定制的移动智慧协同平台。 0x02 漏洞概述 致远M3 server多个日志文…

函数练习.

1.打印乘法口诀表 口诀表的行数和列数自己指定如&#xff1a;输入9&#xff0c;输出99口诀表&#xff0c;输出12&#xff0c;输出1212的乘法口诀表。 multiplication(int index) { ​if (index 9) { ​int i 0; ​for (i 1; i < 10; i) { ​int j 0; ​for (j 1; j &…

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-04-软件架构演化原则

文章目录 1. 演化成本控制原则2. 进度可控原则3. 风险可控原则4. 主体维持原则5. 系统总体结构优化原则6. 平滑演化原则7. 目标一致原则8. 模块独立演化原则9. 影响可控原则10. 复杂性可控原则11. 有利于重构原则12. 有利于重用原则13. 设计原则遵从性原则14. 适应新技术原则15…

Django 4.x 智能分页get_elided_page_range

Django智能分页 分页效果 第1页的效果 第10页的效果 带输入框的效果 主要函数 # 参数解释 # number: 当前页码&#xff0c;默认&#xff1a;1 # on_each_side&#xff1a;当前页码前后显示几页&#xff0c;默认&#xff1a;3 # on_ends&#xff1a;首尾固定显示几页&#…

html5基础知识——表单

表单由三个部分组成&#xff0c;分别是表单域、表单控件、提示信息&#xff08;也就是默认显示的内容&#xff09; 表单域 使用form标签定义 将所有的元素信息定义在一块区域中 用于将表单中的所有元素信息提交给服务器 其中&#xff1a;action表示该表单将要提交到哪个地址&am…

5. DNS 记录和报文

DNS 服务器中以资源记录的形式存储信息&#xff0c;每一个 DNS 响应报文一般包含多条资源记录。一条资源记录的具体的格式为 &#xff08;Name&#xff0c;Value&#xff0c;Type&#xff0c;TTL&#xff09; 其中 TTL 是资源记录的生存时间&#xff0c;它定义了资源记录能够…

LWIP+TCP客户端

一、TCP API函数 其中tcp_poll()函数的第三个参数表示隔几秒调用一次这个周期性函数 二、修改服务器的IP 三、TCP客户端编程思路 申请套接字绑定服务器IP和端口号等待客户端连接 进入连接回调函数在连接回调函数中 配置一些回调函数&#xff0c;如接收回调函数&#xff0c;周期…

ADC STM32

/// STM32ADC模拟/数字转换详解 FOC控制库MCSDK5.4.4梳理(2)——电流采样 ///

Numpy库介绍

NumPy&#xff08;Numerical Python的缩写&#xff09;是Python中用于科学计算的一个强大的库。它提供了高性能的多维数组对象&#xff08;即ndarray&#xff09;、用于处理这些数组的工具以及用于数学函数操作的函数。让我为你介绍一下它的一些主要功能&#xff1a; 1. 多维数…

牛客 | 字符金字塔

请打印输出一个字符金字塔&#xff0c;字符金字塔的特征请参考样例 #include <stdio.h> #include <string.h> using namespace std; int main() {char c;scanf("%c", &c);for (int i 1; i < (c - 64); i)//第一个循环决定了有多少行{//c:67 第三…

每日两题 / 138. 随机链表的复制 148. 排序链表(LeetCode热题100)

138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 用哈希表记录原链表中的节点是否被复制过 遍历原链表并通过哈希表维护新链表 /* // Definition for a Node. class Node { public:int val;Node* next;Node* random;Node(int _val) {val _val;next NULL;rand…

苹果研发用于数据中心的AI芯片 以ACDC项目为核心

据《华尔街日报》报道&#xff0c;苹果公司(AAPL.O)一直在研发自己的芯片&#xff0c;用于在数据中心服务器上运行人工智能软件。这一举措可能为苹果在人工智能领域的竞争中提供关键优势。知情人士透露&#xff0c;这一服务器芯片项目的内部代号为ACDC&#xff08;Apple Chips …

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

题目&#xff1a; 题解&#xff1a; class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m matrix.length, n matrix[0].length;int low 0, high m * n - 1;while (low < high) {int mid (high - low) / 2 low;int x matrix[mid / n][m…

CSS:border作用

border作用 解释方面举例 补充举例 总结 解释 在CSS&#xff08;层叠样式表&#xff09;中&#xff0c;border属性用于设置元素边框的样式、宽度和颜色。border是一个简写属性&#xff0c;它允许您在一次声明中设置以上所有属性。 方面 border-style&#xff1a;定义边框的样…

人工神经网络初步

大家好&#xff0c;这里是七七&#xff0c;由于各种比赛的缘故&#xff0c;使用了很多人工神经网络模型。但是很多的原理都不是很明白&#xff0c;就导致了不能灵活地运用┭┮﹏┭┮。为此&#xff0c;去看了些人工神经网络原理书&#xff0c;写下此专题。 在进入正文之前要先…

指针再学习笔记

概念 示例 类型 示例 作用 注意&#xff1a;有些内存地址可能系统不会允许任意访问 运算 示例 空指针

windows驱动开发-内核编程技术汇总(七)

多处理器环境出错 在基于 NT 的操作系统上&#xff0c;驱动程序是多线程的;它们可以同时接收来自不同线程的多个 I/O 请求。 在设计驱动程序时&#xff0c;必须假定它将在 SMP 系统上运行&#xff0c;并采取适当的措施来确保数据完整性。 具体而言&#xff0c;每当驱动程序更…