2021年大数据elk:elasticsearch架构原理(代码片段)

Lansonli Lansonli     2023-02-08     305

关键词:

全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 

新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点。

目录

Elasticsearch架构原理

一、Elasticsearch的节点类型

1、Master节点

2、DataNode节点

二、分片和副本机制

1、分片(Shard)

2、副本

3、指定分片、副本数量

三、Elasticsearch重要工作流程

1、Elasticsearch文档写入原理

2、Elasticsearch检索原理

四、Elasticsearch准实时索引实现

1、溢写到文件系统缓存

2、写translog保障容错

3、flush到磁盘

4.、segment合并


Elasticsearch架构原理

一、Elasticsearch的节点类型

在Elasticsearch有两类节点,一类是Master,一类是DataNode。

1、Master节点

在Elasticsearch启动时,会选举出来一个Master节点。当某个节点启动后,然后使用Zen Discovery机制找到集群中的其他节点,并建立连接。

discovery.seed_hosts: ["node1", "node2", "node3"]

并从候选主节点中选举出一个主节点。

cluster.initial_master_nodes: ["node1", "node2"]

Master节点主要负责:

  • 管理索引(创建索引、删除索引)、分配分片
  • 维护元数据
  • 管理集群节点状态
  • 不负责数据写入和查询,比较轻量级

一个Elasticsearch集群中,只有一个Master节点。在生产环境中,内存可以相对小一点,但机器要稳定。

2、DataNode节点

在Elasticsearch集群中,会有N个DataNode节点。DataNode节点主要负责:

  • 数据写入、数据检索,大部分Elasticsearch的压力都在DataNode节点上
  • 在生产环境中,内存最好配置大一些

​​​​​​​二、分片和副本机制

​​​​​​​1、分片(Shard)

  • Elasticsearch是一个分布式的搜索引擎,索引的数据也是分成若干部分,分布在不同的服务器节点中
  • 分布在不同服务器节点中的索引数据,就是分片(Shard)。Elasticsearch会自动管理分片,如果发现分片分布不均衡,就会自动迁移
  • 一个索引(index)由多个shard(分片)组成,而分片是分布在不同的服务器上的

2、​​​​​​​副本

为了对Elasticsearch的分片进行容错,假设某个节点不可用,会导致整个索引库都将不可用。所以,需要对分片进行副本容错。每一个分片都会有对应的副本。在Elasticsearch中,默认创建的索引为1个分片、每个分片有1个主分片和1个副本分片。

  • 每个分片都会有一个Primary Shard(主分片),也会有若干个Replica Shard(副本分片)
  • Primary Shard和Replica Shard不在同一个节点上

3、指定分片、副本数量

// 创建指定分片数量、副本数量的索引
PUT /job_idx_shard

    "mappings": 
        "properties": 
            "id":  "type": "long", "store": true ,
            "area":  "type": "keyword", "store": true ,
            "exp":  "type": "keyword", "store": true ,
            "edu":  "type": "keyword", "store": true ,
            "salary":  "type": "keyword", "store": true ,
            "job_type":  "type": "keyword", "store": true ,
            "cmp":  "type": "keyword", "store": true ,
            "pv":  "type": "keyword", "store": true ,
            "title":  "type": "text", "store": true ,
            "jd":  "type": "text"

        
    ,
    "settings": 
        "number_of_shards": 3,
        "number_of_replicas": 2
    
// 查看分片、主分片、副本分片
GET /_cat/indices?v

 

三、Elasticsearch重要工作流程

1、​​​​​​​Elasticsearch文档写入原理

1、选择任意一个DataNode发送请求,例如:node2。此时,node2就成为一个 coordinating node(协调节点)

2、计算得到文档要写入的分片

  • `shard = hash(routing) % number_of_primary_shards`
  • routing 是一个可变值,默认是文档的 _id

3、coordinating node会进行路由,将请求转发给对应的primary shard所在的DataNode(假设primary shard在node1、replica shard在node2)

4、node1节点上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到 Replica shard

5、Primary Shard和Replica Shard都保存好了文档,返回client

 

2、​​​​​​​Elasticsearch检索原理

 

  • client发起查询请求,某个DataNode接收到请求,该DataNode就会成为协调节点(Coordinating Node)
  • 协调节点(Coordinating Node)将查询请求广播到每一个数据节点,这些数据节点的分片会处理该查询请求。协调节点会轮询所有的分片来自动进行负载均衡
  • 每个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点
  • 协调节点将所有的结果进行汇总,并进行全局排序
  • 协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端

四、Elasticsearch准实时索引实现

1、​​​​​​​溢写到文件系统缓存

  • 当数据写入到ES分片时,会首先写入到内存中,然后通过内存的buffer生成一个segment,并刷到文件系统缓存中,数据可以被检索(注意不是直接刷到磁盘)
  • ES中默认1秒,refresh一次

2、写translog保障容错

  • 在写入到内存中的同时,也会记录translog日志,在refresh期间出现异常,会根据translog来进行数据恢复
  • 等到文件系统缓存中的segment数据都刷到磁盘中,清空translog文件

3、flush到磁盘

  • ES默认每隔30分钟会将文件系统缓存的数据刷入到磁盘

4.、​​​​​​​segment合并

  • Segment太多时,ES定期会将多个segment合并成为大的segment,减少索引查询时IO开销,此阶段ES会真正的物理删除(之前执行过的delete的数据)

  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢大数据系列文章会每天更新,停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

2021年大数据elk:elasticsearch安装ik分词器插件(代码片段)

...面的知识重点。目录系列历史文章安装IK分词器一、下载ElasticsearchIK分词器二、切换到lanson用户,并在es的安装目录下/plugins创建ik三、将下载的ik分词器上传并解压到该目录四、将plugins下的ik目录分发到每一台服务器五、重启... 查看详情

2021年大数据elk:安装elasticsearch(代码片段)

...0c;帮助大家回顾前面的知识重点。目录系列历史文章安装Elasticsearch一、创建普通用户二、为普通用户添加sudo权限三、上传压缩包并解压四、修改配置文件1、修改elasticsearch.yml2、修改jvm.option五、将安装包分发到其他服务器上面... 查看详情

2021年大数据elk:elasticsearch简单介绍

...;帮助大家回顾前面的知识重点。目录系列历史文章 一、Elasticsearch简介1、介绍2、创始人二、Elasticsearch可以做什么1、信息检索2、企业内部系统搜索3、数据分析引擎三、Elasticsearch特点1、海量数据处理2、开箱即用 3、作为传统... 查看详情

2021年大数据elk:elasticsearch架构原理(代码片段)

...历史文章目录,帮助大家回顾前面的知识重点。目录Elasticsearch架构原理一、Elasticsearch的节点类型1、Master节点2、DataNode节点二、分片和副本机制1、分片(Shard)2、副本3、指定分片、副本数量三、Elasticsea 查看详情

2021年大数据elk:安装elasticsearch(代码片段)

...0c;帮助大家回顾前面的知识重点。目录系列历史文章安装Elasticsearch一、创建普通用户二、为普通用户itcast添加sudo权限三、上传压缩包并解压四、修改配置文件1、修改elasticsearch.yml2、修改jvm.option五、将安装包分发到其他服务器... 查看详情

2021年大数据elk:elasticsearch中的核心概念

...,帮助大家回顾前面的知识重点。目录系列历史文章Elasticsearch中的核心概念一、索引index二、映射mapping三、字段Field四、类型Type五、文档document六、集群cluster七、节点node八、分片和副本shards&replicas​ 查看详情

2021年大数据elk:安装elasticsearch-head插件

...0c;帮助大家回顾前面的知识重点。目录系列历史文章安装Elasticsearch-head插件一、安装nodejs1、下载安装包2、创建软连接3、修改环境变量二、在线安装(网速慢,不推荐)1、在线安装必须依赖包2、从git上面克隆编译包 查看详情

2021年大数据elk:lucene的美文搜索案例(代码片段)

...​系列历史文章2021年大数据ELK(六):安装Elasticsearch2021年大数据ELK(五):Elasticsearch中的核心概念2021年大数据ELK(四):Lucene的美文搜索案例2021年大数据ELK(三):Lucene全文检索... 查看详情

2021年大数据elk:lucene全文检索库介绍

...障系列历史文章2021年大数据ELK(六):安装Elasticsearch2021年大数据ELK(五):Elasticsearch中的核心概念2021年大数据ELK(四):Lucene的美文搜索案例2021年大数据ELK(三):Lucene全文检索... 查看详情

2021年大数据elk:elasticsearch安装ik分词器插件(代码片段)

...面的知识重点。目录系列历史文章安装IK分词器一、下载ElasticsearchIK分词器二、切换到lanson用户,并在es的安装目录下/plugins创建ik三、将下载的ik分词器上传并解压到该目录四、将plugins下的ik目录分发到每一台 查看详情

2021年大数据elk:集中式日志协议栈elasticstack简介(代码片段)

...介系列历史文章2021年大数据ELK(六):安装Elasticsearch2021年大数据ELK(五):Elasticsearch中的核心概念2021年大数据ELK(四):Lucene的美文搜索案例2021年大数据ELK(三):Lucene全文检索... 查看详情

2021年大数据elk:elasticsearch架构原理(代码片段)

...历史文章目录,帮助大家回顾前面的知识重点。目录Elasticsearch架构原理一、Elasticsearch的节点类型1、Master节点2、DataNode节点二、分片和副本机制1、分片(Shard)2、副本3、指定分片、副本数量三、Elasticsearch重要工作流... 查看详情

2021年大数据elk(十三):elasticsearch编程(添加职位数据)(代码片段)

...历史文章目录,帮助大家回顾前面的知识重点。目录Elasticsearch编程一、添加职位数据1、初始化客户端连接2、实现关闭客户端连接3、编写代码实现新增职位数据4、编写测试用例测试添加方法Elasticsearch编程一、添加职位数据1... 查看详情

2021年大数据elk:elasticsearch编程(环境准备)(代码片段)

...历史文章目录,帮助大家回顾前面的知识重点。目录Elasticsearch编程一、环境准备1、准备IDEA项目结构2、准备POM依赖3、创建用于保存职位信息的实体类4、编写接口和实现类 5、创建实现类Elasticsearch编程要将搜索的功能与前端... 查看详情

2021年大数据elk:集中式日志协议栈elasticstack简介(代码片段)

...简介系列历史文章 2021年大数据ELK(二): Elasticsearch简单介绍2021年大数据ELK࿰ 查看详情

2021年大数据elk(二十五):添加elasticsearch数据源

...文章目录,帮助大家回顾前面的知识重点。目录添加Elasticsearch数据源一、Kibana索引模式添加Elasticsearch数据源一、Kibana索引模式可以通过定义索引模式(IndexPatterns)来对应匹配Elasticsearch索引。在第一次访问Kibana的时... 查看详情

2021年大数据elk(十五):elasticsearchsql简单介绍(代码片段)

...历史文章目录,帮助大家回顾前面的知识重点。目录ElasticsearchSQL简单介绍一、SQL与Elasticsearch对应关系二、ElasticsearchSQL语法ElasticsearchSQL简单介绍ElasticsearchSQL允许执行类SQL的查询,可以使用REST接口、命令行或者是JDBC,... 查看详情

2021年大数据elk(二十三):kibana简介

...源的数据分析和可视化平台,使用Kibana可以用来搜索Elasticsearch中的数据,构建漂亮的可视化图形、以及制作一些好看的仪表盘Kibana是用来管理Elasticstack组件的可视化平台。例如:使用Kibana可以进行一些安全设置、用... 查看详情