【Elasticsearch】Elasticsearch的分片和副本机制
文章目录
- 📑前言
- 一、分片(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)
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会根据用户指定的分片数量创建主分片,并将这些分片分配到集群中的不同节点上。分片的分配过程如下:
- 分片创建:Elasticsearch根据索引的分片设置,创建指定数量的主分片。
- 分片分配:Elasticsearch将主分片分配到集群中的不同节点上,确保分片均匀分布。
- 副本创建:Elasticsearch根据索引的副本设置,为每个主分片创建副本分片。
- 副本分配:Elasticsearch将副本分片分配到与主分片不同的节点上,确保数据冗余。
3.2 数据写入过程
在Elasticsearch中,数据的写入过程包括以下步骤:
- 写请求发送到主分片:所有的写操作(如索引和删除)首先发送到主分片。
- 主分片处理写请求:主分片处理写请求,将数据写入到分片中。
- 写请求同步到副本分片:主分片将写操作同步到所有的副本分片,确保数据的一致性。
- 写操作完成:当所有副本分片确认写操作后,Elasticsearch返回写操作的结果。
3.3 数据读取过程
在Elasticsearch中,数据的读取过程包括以下步骤:
- 读请求发送到协调节点:客户端将查询请求发送到Elasticsearch集群中的任意节点,该节点作为协调节点处理请求。
- 协调节点路由请求:协调节点将查询请求路由到相关的主分片和副本分片。
- 分片并行处理查询:主分片和副本分片并行处理查询请求,返回查询结果。
- 协调节点汇总结果:协调节点汇总所有分片的查询结果,并返回给客户端。
四、分片和副本的配置
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会自动将对应的副本分片提升为主分片,确保数据的可用性。故障恢复过程如下:
- 节点故障检测:Elasticsearch检测到节点故障,标记节点上的分片为不可用。
- 副本提升为主分片:Elasticsearch将副本分片提升为主分片,确保数据的可用性。
- 重新分配副本分片:Elasticsearch在集群中的其他节点上创建新的副本分片,恢复数据冗余。
5.2 副本分片故障恢复
当副本分片所在节点发生故障时,Elasticsearch会在集群中的其他节点上重新创建副本分片,确保数据的冗余。故障恢复过程如下:
- 节点故障检测:Elasticsearch检测到节点故障,标记节点上的副本分片为不可用。
- 重新创建副本分片: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能够在大规模数据处理和高并发访问的场景下提供稳定高效的性能。同时,分片和副本机制也为系统提供了容错能力和数据冗余,确保在节点故障时数据的可用性。
相关文章:

【Elasticsearch】Elasticsearch的分片和副本机制
文章目录 📑前言一、分片(Shard)1.1 分片的定义1.2 分片的重要性1.3 分片的类型1.4 分片的分配 二、副本(Replica)2.1 副本的定义2.2 副本的重要性2.3 副本的分配 三、分片和副本的机制3.1 分片的创建和分配3.2 数据写…...

鸿蒙开发入门指南
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 引言 一、鸿蒙系统概述 1.1 简介 1.2 鸿蒙开发的优势 二、鸿蒙开发环境搭建 2.1 安装鸿蒙DevEco Studi…...

从分散到整合,细说比特币发展史
原文标题:《Layered Bitcoin》 撰文:Saurabh Deshpande 编译:Chris,Techub News 古往今来,货币在社会中都具有三个关键的功能:财富的储存手段、交换媒介和计量单位。虽然货币的形式在不断变化,…...

TreeSelect增加可筛选功能
TreeSelect官方可筛选示例 <template><el-tree-selectv-model"value":data"data"filterablestyle"width: 240px"/><el-divider /><el-divider />filter node method:<el-tree-selectv-model"value":data&q…...

星环科技与宁夏银行“大数据联合实验室”揭牌,持续打造金融科技新范式
5月30-31日,2024向星力未来数据技术峰会期间,在峰会现场来宾共同见证下,星环科技与宁夏银行“大数据联合实验室”正式揭牌,宁夏银行股份有限公司首席信息官崔彦刚与星环科技副总裁邱磊共同为联合实验室揭牌。 星环科技与宁夏银行借…...
React native页面突然白屏
背景:某个时间段突然收到破100的用户反馈,商品详情(React native页面)打不开,一片空白,无法正常使用 设备:部分华为手机Harmoney4.0,华为相关Android系统 可临时恢复方案ÿ…...

一段直接路径读取文件LINUX C代码
最近搞个MYBATIS-PLUS里面的MAPPER DAO方法审计.就是把里面的SQL提取出来,然后使用SQL质量工具进行审计! SQLE 在这方面功能强大,就是细节不够完美,它有SCANDR工具可以把某个目录下XML文件扫描并上传到SQLE里面进行审计. 通过自由裁剪的MYSQL 审核规则,一条条SQL进行! 问题是那…...
Android让所有APK横屏显示
在Android6.0.1里面,Box产品的HDMI输出都是以横屏显示,而有些APK会申请竖屏显示,此时通过修改frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java文件里面的updateRotationUncheckedLocked函数的如下语句&…...
【智能制造-26】PLC标准-SICAR
什么是SICAR? SICAR 是西门子基于 TIA Portal 的汽车行业自动化标准。 SICAR 标准具有以下特点和优势: 提供了统一的硬件和软件标准,以及统一的接口。涵盖了从 PLC 程序、HMI 画面到特定工艺功能块(如机器人、阀岛、视觉系统等&…...
浅学爬虫-处理复杂网页
在处理实际项目时,网页通常比示例页面复杂得多。我们需要应对分页、动态加载和模拟用户行为等问题。以下是一些常见的场景及其解决方案。 处理分页 许多网站将内容分成多个页面,称为分页。要抓取这些数据,需要编写一个能够遍历所有分页的爬…...

nginx反向代理严重错误[crit] (13: Permission denied) while reading upstream问题
nginx作为使用最广泛的一款反向代理软件,其性能也是非常优秀的,一般情况下,直接配置就可以使用,而且也都是稳定高效的,但是在实际应用中,对于不同的应用场景,总是会出现各种各样的问题ÿ…...
精通Python爬虫中的XPath:从安装到实战演示
🔸 插件安装 首先,我们需要安装用于处理XPath的库lxml。在命令行中运行以下命令: pip install lxml🔹 lxml是一个强大的库,支持XPath查询和XML处理,是爬虫开发中的重要工具。 🔸 DOM节点学习 …...

redis的使用场景
目录 1. 热点数据缓存 1.1 什么是缓存? 1.2 缓存的原理 1.3 什么样的数据适合放入缓存中 1.4 哪个组件可以作为缓存 1.5 java使用redis如何实现缓存功能 1.5.1 需要的依赖 1.5.2 配置文件 1.5.3 代码 1.5.4 发现 1.6 使用缓存注解完成缓存功能 2. 分布式锁…...
记录new Date()的各种方法以及时间差的计算方法
new Date().toLocaleDateString() —— 2024/8/2new Date().toLocaleTimeString() —— 10:21:48new Date().toLocaleString() —— 2024/8/2 10:21:48new Date().toLocaleDateString() —— Fri Aug 02 2024new Date().toDateString() —— Fri Aug 02 2024new Date…...

vue项目创建+eslint+Prettier+git提交规范(commitizen+hooks+husk)
# 步骤 1、使用 vue-cli 创建项目 这一小节我们需要创建一个 vue3 的项目,而创建项目的方式依然是通过 vue-cli 进行创建。 不过这里有一点大家需要注意,因为我们需要使用最新的模板,所以请保证你的 vue-cli 的版本在 4.5.13 以上ÿ…...
从Docker拉取镜像一直失败超时?这些解决方案帮你解决烦恼
设置国内源: 提示:常规方案(作用不大) 阿里云提供了镜像源:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登录后你会获得一个专属的地址 使用命令设置国内镜像源:通过vim /etc/docker/d…...

R语言大尺度空间数据分析模拟预测及可视化:地统计与空间自相关、空间数据插值、机器学习空间预测、空间升降尺度、空间模拟残差订正、空间制图等
目录 专题一 R语言空间数据介绍及数据挖掘关键技术 专题二 R语言空间数据高级处理技术 专题三 R语言多维时空数据处理技术、数据清洗整合和时间序列分析 专题四 R语言地统计与空间自相关、空间插值方法 专题五 R语言机器学习与空间模型预测及不确定性评估 专题六 R语言空…...
深入理解Java内存管理机制
Java内存管理是Java开发中一个至关重要的主题。理解内存管理机制不仅有助于编写高效的代码,还可以帮助我们避免常见的内存问题,如内存泄漏和内存不足。本篇博客将详细介绍Java内存管理机制,并通过代码示例帮助读者更好地理解这一过程。 1. J…...

Helm 学习之路,一文弄懂
1. 什么是 Helm 1.1 概述 Helm 是 Kubernetes 应用程序的包管理器,和redhat中yum 管理包类似. 1.2 架构图v3 1.3 下载 官当 最新版本 官方github curl -LO https://get.helm.sh/helm-v3.15.2-linux-amd64.tar.gz 1.4 安装 解压 #由于是二进制,直接解压到/usr/local/b…...

【面试题解答】一个有序数组 nums ,原地删除重复出现的元素
面试题解答 仅供学习 文章目录 面试题解答题目一、python代码1.1 代码1.2 示例用法1.2.1 示例11.2.2 示例2 二、讲解2.1 初始化2.2 遍历2.3 返回 题目 要解决这个问题,可以使用双指针方法进行原地修改,以确保每个元素最多出现两次。 一、python代码 1.1…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...

华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...

MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...