热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Elasticsearch之allocation模块分析(1)

序这一章节主要分析allocation模块的结构和原理,分析allocation模块的工作过程前言在此之前先看看什么是分片,它在磁盘上是以什么形式

这一章节主要分析allocation模块的结构和原理,分析allocation模块的工作过程


前言

在此之前先看看什么是分片,它在磁盘上是以什么形式存储的

首先用postman发起创建索引请求

PUT localhost:9200/test02{"settings":{"number_of_shards":2,"number_of_replicas":1}
}

test02在后台代码中用随机UUID生成对应的index.uuid;

indexSettingsBuilder.put(SETTING_INDEX_UUID, UUIDs.randomBase64UUID());

请求结束后,本地节点data目录下:产生如下数据目录 

他们的相关参数在代码中对应的key如下json所示


{

    "client.type": "node", 

    "cluster.election.strategy": "supports_voting_only", 

    "cluster.name": "es-source-demo", 

    "http.type": "security4", 

    "http.type.default": "netty4", 

    "node.attr.ml.machine_memory": "16934494208", 

    "node.attr.ml.max_open_jobs": "20", 

    "node.attr.transform.node": "true", 

    "node.attr.xpack.installed": "true", 

    "node.name": "es-source-node", 

    "path.home": "E:\\installations\\es_tools\\elasticsearch-7.8.0-windows-x86_64\\elasticsearch-7.8.0", 

    "path.logs": "E:\\installations\\es_tools\\elasticsearch-7.8.0-windows-x86_64\\elasticsearch-7.8.0\\logs", 

    "transport.features.x-pack": "true", 

    "transport.type": "security4", 

    "transport.type.default": "netty4"

}


将数据目录梳理成树形结构如下所示: 


  • node.lock:该文件用于确保一次只能从一个数据目录读取/写入一个Elasticsearch实例。
  • index.uuid:对应的是索引的唯一标识,Elasticsearch内部是根据这个唯一标识来区分不同索引的。
  • shard_id:即为分片编号,从0开始递增
  • state-0.st:保存索引状态文件,如索引创建时间、设置等。也是二进制文件。state后面的编号是版本号,类似集群状态文件。

上面图片中的0/1就是所谓的分片,分片是一个物理概念,对应节点上的一个具体路径;其中分片0/1中也保存当前分片是主分片还是副本分片信息


一、什么是allocation

        分片分配就是把一个分片分配到集群中某个节点的过程。分配决策由主节点完成,分片决策包含两个方面


  • 哪些分片应该分配给哪些节点
  • 哪个分片作为主分片,哪些分片作为副分片

        对于新建索引和已有索引,分片分配过程不同;ES通过allocatorsdeciders两个组件完成分配工作;其中allocator尝试寻找最优节点分配分片,deciders负责判断并决定是否要进行这次分配

对于新建索引(分配)


  • allocators负责找出拥有分片数最少的节点列表,并按照节点拥有的分片数量升序排序,因此在这个列表中,分片较少的节点会被优先选择;
  • 对于新建索引,allocators的目标就是以更均衡的方式把新索引的分片分配到集群的节点中;deciders依次遍历allocators给出的节点,并判断是否把分片分配到该节点。
  • 注意allocator只关心每个节点上的分片数,而不关心每个分片的大小;因此deciders还有一部分职责就是阻止把分片分配到将超出节点磁盘容量阈值的节点上

对于已有索引


  • 对于主分片,allocators只允许把主分片指定在已经拥有该分片完整数据的节点上;这里作者也有疑问,该分片指什么?完整数据作何理解?
  • 对于副本分片,allocators则是先判断其他节点上是否已有该分片的数据的副本(即便数据不是最新的)。如果有这样的节点,则allocators优先把分片分配到其中一个节点。
  • 因为副本分片一旦分配,就需要从主分片中进行数据同步,所以当一个节点只拥有分片中的部分数据时,也就意味着哪些未拥有的数据必须从主分片中复制得到,这样可以提高副本分片的数据恢复速度


推荐阅读
  • 本文详细介绍了Elasticsearch中的分页查询机制,包括基本的分页查询流程、'from-size'浅分页与'scroll'深分页的区别及应用场景,以及两者在性能上的对比。 ... [详细]
  • 构建Elasticsearch环境与课程索引
    本章节详细介绍了如何在开发环境中搭建Elasticsearch (ES) 环境,包括安装、启动服务端以及创建索引和映射的具体步骤。对于旧版ES环境的清理方法也进行了说明。 ... [详细]
  • 本文介绍了 JSON Schema 和 XML Schema 的基本概念,并详细讲解了如何使用 AJV 进行 JSON 数据校验。通过具体的示例和扩展方法,帮助读者更好地理解和应用这些工具。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 本文将在前几篇关于Android测试理论知识的基础上,通过ApiDemoTest实例详细探讨如何使用ApplicationTestCase进行Android应用测试。建议读者先阅读Android测试教程系列中的相关内容,以便更好地理解本文的实践部分。 ... [详细]
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • Django与Python及其他Web框架的对比
    本文详细介绍了Django与其他Python Web框架(如Flask和Tornado)的区别,并探讨了Django的基本使用方法及与其他语言(如PHP)的比较。 ... [详细]
  • MySQL Administrator: 监控与管理工具
    本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ... [详细]
  • 现在越来越多的人使用IntelliJIDEA,你是否想要一个好看的IDEA主题呢?本篇博客教你如何设置一个美美哒IDEA主题,你也可以根据 ... [详细]
  • Java毕业设计项目:“传情旧物”网站(含源码与数据库)
    本项目介绍了如何配置和运行“传情旧物”网站,包括所需的技术栈、环境配置以及具体的操作步骤。 ... [详细]
  • 本文详细介绍了如何将Spring框架与Hibernate ORM框架进行集成,包括配置文件的设置和数据持久化操作的实现。 ... [详细]
author-avatar
零摄氏度玫瑰_460
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有