【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)

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.rhkb.cn/news/389298.html

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

相关文章

Github Benefits 学生认证/学生包 新版申请指南

本教程适用于2024年之后的Github学生认证申请,因为现在的认证流程改变了很多,所以重新进行了总结这方面的指南。 目录 验证教育邮箱修改个人资料制作认证文件图片转换Base64提交验证 验证教育邮箱 进入Email settings,找到Add email address…

【一图学技术】5.OSI模型和TCP/IP模型关系图解及应用场景

OSI模型和TCP/IP模型关系图解 OSI模型和TCP/IP模型都是网络通信的参考模型,用于描述网络协议的层次结构和功能。下面是它们的定义和区别: OSI模型(Open Systems Interconnection Model) OSI模型是一个理论上的七层模型&#xff…

揭秘线性代数秩的奥秘:从理论到机器学习的跨越

一、线性代数中的秩:定义与性质 1.1 定义 在线性代数中,秩是一个核心概念,用于描述矩阵或向量组的复杂性和独立性。具体而言,一个矩阵的秩定义为该矩阵中非零子式的最高阶数,而一个向量组的秩则是其最大无关组所含的…

双 Token 三验证解决方案

更好的阅读体验 \huge{\color{red}{更好的阅读体验}} 更好的阅读体验 问题分析 以往的项目大部分解决方案为单 token: 用户登录后,服务端颁发 jwt 令牌作为 token 返回每次请求,前端携带 token 访问,服务端解析 token 进行校验和…

Ubuntu配置项目环境

目录 一、Xshell连接云服务器 二、切换到root用户 三、安装jdk 四、安装tomcat 五、安装mysql 1、安装mysql服务器 2、卸载mysql服务器 六、正式进行程序的部署 一、Xshell连接云服务器 要想使用xshell连接上云服务器就需要明确云服务器的几个信息: 1&…

科研绘图系列:R语言GWAS曼哈顿图(Manhattan plot)

介绍 曼哈顿图(Manhattan Plot)是一种常用于展示全基因组关联研究(Genome-Wide Association Study, GWAS)结果的图形。GWAS是一种研究方法,用于识别整个基因组中与特定疾病或性状相关的遗传变异。 特点: 染色体表示:曼哈顿图通常将每个染色体表示为一个水平条,染色体…

tarojs项目启动篇

TaroJS 是一个开放式跨端开发解决方案,使用 React 语法规范来开发多端应用(包括小程序、H5、React Native 等)。它可以帮助开发者高效地构建出在不同端上运行一致的应用。以下是启动 TaroJS 项目(本来就有的旧项目)的步…

⭐️2024年7月全球排名前二十开发语言全面对比横向竖向PK(TIOBE指数榜单)编程语言介绍 适用场景 优势 举例 详细说明 编写第一个语言程序Hello world源代码

2024年7月全球排名前二十开发语言全面对比横向竖向PK(TIOBE指数榜单)编程语言介绍 适用场景 优势 举例 详细说明 编写第一个语言程序Hello world源代码 2024年7月全球排名前二十开发语言全面对比横向竖向PK(TIOBE指数榜单)编程语言…

反序列化靶机serial

1.创建虚拟机 2.渗透测试过程 探测主机存活(目标主机IP地址) 使用nmap探测主机存活或者使用Kali里的netdicover进行探测 -PS/-PA/-PU/-PY:这些参数即可以探测主机存活,也可以同时进行端口扫描。(例如:-PS&#xff0…

【python】Python中采集Prometheus数据,进行数据分析和可视化展示

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

如何在 Debian 上安装运行极狐GitLab Runner?【二】

极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…

本地生活服务商公司有哪些?一文教你搭建本地生活系统!

当前,本地生活领域群雄环伺,日益激烈的竞争推动各家互联网大厂调整布局模式的同时,也让本地生活市场持续迸发新的活力。在此背景下,想要通过本地生活服务商身份入局的创业者数量不断增多,以本地生活服务商公司有哪些等…

BEVGPT展示自动驾驶的“全知视角”,预测决策规划三合一的革新之作!

前言 本篇文章由原paper一作Pengqin Wang(王鹏钦)全权翻译分享,王鹏钦为香港科技大学博士生,师从沈劭劼教授、朱美新教授。他的研究方向为自动驾驶和机器人系统中的决策、预测和规划。他的研究成果发表于TMECH、RAL、IROS、TRB等…

互联网政务应用安全管理规定

互联网政务应用安全管理规定 (2024年2月19日中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部制定 2024年5月15日发布) 第一章 总则 第一条为保障互联网政务应用安全,根据《中华人民共和国网络安全法…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…

内网穿透的应用-Windows系统如何ssh连接群晖nas使用docker安装内网穿透软件

文章目录 前言1. 检查安装Container Manager2. 检查开启群晖SSH连接3. Windows SSH 连接群晖4. 下载Cpolar 镜像5. 群晖Docker安装Cpolar 前言 在某些群晖NAS型号版本,无法使用套件安装的时候,我们可以采用Docker的方式进行安装cpolar内网穿透工具&…

MySQL:Prepared Statement 预处理语句

预处理语句(Prepared Statement) 是一种在数据库管理系统中使用的编程概念,用于执行对数据库进行操作的 SQL 语句。 使用预处理语句的具体方式和语法依赖于所用的编程语言和数据库管理系统。常见的编程语言如 Java、PHP、Python 和 C# 都提供…

CNN卷积网络实现MNIST数据集手写数字识别

步骤一:加载MNIST数据集 train_data MNIST(root./data,trainTrue,downloadFalse,transformtransforms.ToTensor()) train_loader DataLoader(train_data,shuffleTrue,batch_size64) # 测试数据集 test_data MNIST(root./data,trainFalse,downloadFalse,transfor…

GBase8c psycopg2安装(centos6)

GBase8c psycopg2安装(centos6) 安装步骤: [rootcentos6 ~]# cd /opt/python/ [rootcentos6 python]# ls psycopg2-2.7.7.tar.gz [rootcentos6 python]# tar -zxf psycopg2-2.7.7.tar.gz [rootcentos6 python]# cd psycopg2-2.7.7 # 安装命令 [rootcentos6 psycop…

B站安全开发流程落地实践

一. 什么是安全开发生命周期(SDL) 1.1 SDL诞生背景 随着互联网技术的快速发展,网络系统及应用在给人们的生活带来巨大便利的同时,信息安全问题也逐渐成为用户和企业关注的焦点。然而,安全问题的管理和解决需要一个系统…