Elasticsearch原理(上)

Elasticsearch原理

  1. ES是啥:
    在这里插入图片描述
  • Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;
  1. ES应用场景:
    在这里插入图片描述
  • 站内搜索
  • 日志解析:日志,事物数据,分析和挖掘,趋势,统计,摘要和异常
  • 价格提醒
  • 商业统计:快速调查,分析,可视化,从一堆数据中获取问题答案
  1. 倒排索引:在这里插入图片描述
  • 倒排索引:一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射
    是一种将词项映射到文档的数据结构
  1. Lucence简介:在这里插入图片描述
  • Lucence:高效、可扩展、全文检索库(开发工具包),java编写,支持跨平台
  • 特征:
    • 可扩展,高性能索引
    • 强悍,准确,高效的搜索算法
    • 跨平台
    • Apache软件基金
      在这里插入图片描述
  1. ES基本概念:
    在这里插入图片描述
  • 集群:由多个节点组成,提供一个完整的数据索引,并结合所有节点进行查询,一个集群有唯一的集群名(cluster_name),默认为elasticsearch,配置文件中指定
  • 节点:集群一部分,是一个单独的服务器,参与索引并查询数据,通过集群名加入集群
  • 索引:一些有相似特征的文档的集合,数据索引结构是倒排索引
  • 类型:一个索引中可以有多个类型,每个类型有自己的映射结构
  • 文档:是一个可被索引的基础信息单元
  • 分片:把一个索引分成多个部分,水平分割扩展内容,分布式并行操作分片
  • 副本;分片的备份,提高分片和节点的容错性,但是占空间
  1. 基本概念:
    在这里插入图片描述
  • Master node:有资格成为master
  • Data node:存储数据并执行数据操作
  • Ingets node:在真正对文档进行索引之前对文件进行预处理,通过定义包含了多个process的pipeline来实现
  • Coordinnating node:负责转发请求到对应数据节点,然后汇总各个节点返回的结果,每个节点隐含都是一个coordinating node,如果其他三个参数都是false,那他就单纯是个coordinating node
    在这里插入图片描述
  1. ES相关概念与关系型数据库对应关系:
    在这里插入图片描述
  2. 为什么要移除type:
    在这里插入图片描述
  3. REST介绍:
    在这里插入图片描述
  4. REST典型应用:
    在这里插入图片描述
  5. 集群扩容:
    在这里插入图片描述
  6. 集群健康状态:
    在这里插入图片描述
  • 绿色:所有主分片和副本分片都可用
  • 黄色:所有主分片可用,但不是所有副本分片可用
  • 红色:不是所有主分片可用
  1. ES分布式架构:
    在这里插入图片描述
  • Gateway代表ElasticSearch索引的持久化存储方式, ElasticSearch默认先把索引存储在内存中,然后当内存满的时候,再持久化到Gateway里。
    当集群关闭或者再次重新启动时就会从Gateway中读取索引数据。Gateway的类型,默认为local即为本地文件系统,可以设置为本地文件系统,分布式文件系统,hadoop的HDFS,和amazon的s3服务器。
  • Directory 存储模块
    Directory模块它是Lucene里的一些列索引文件组成的目录。它负责管理这些索引文件。包括数据的读取、写入,以及索引的添加和合并等。
  • Index 索引模块
    每个索引产生一个。下有Analysis(文本分析),Shard allocation(索引分片分配),Field data(域数据)等子模块。
  • Search 检索模块
    全文搜索、短语搜索等各种搜索方式的支持。
  • Mapper 映射
    Mapper模块主要负责将类型映射的定义添加到索引上。同时也支持预先没有定义的动态映射类型。
    动态映射:
    当遇到一个新的字段类型时,Elasticsearch可以自动检测数据类型并能自动添加类型_default_映射。任何建索引或者添加映射时指定的映射将覆盖掉默认值。
  • River 数据源
    River代表的是一个数据源,这也是其它存储方式(比如:数据库)同步数据到Elasticsearch 的一个方法。它是以插件方式存在的一个 Elasticsearch 服务,通过读取River中的数据并把它索引到Elasticsearch当中去。
  • Discovery节点发现模块
    Discovery节点发现模块,主要是负责集群的master节点发现。比如某个节点突然离开或进来的情况,进行一个分片重新分片等。这里有个发现机制。
    其中Zen发现机制是ElasticSearch中默认的用来发现新节点的功能模块。首先它会通过以广播的方式去寻找存在的节点,然后再通过多播协议来进行节点之间的通信,于此同时也支持点对点的交互操作。
    发现机制默认的实现方式是单播和多播的形式,即Zen,同时也支持点对点的实现。另外一种是以插件的形式,即EC2。
  • Scripting即脚本语言。包括很多,这里不多赘述。如mvel、js、python等。
  • Transport交互模块
    Transport代表Elasticsearch内部的节点或者集群与客户端之间的交互方式。
    默认的内部是使用 TCP 协议来进行交互的,同时它支持HTTP 协议(json格式)、thrift、servlet、memcached、zeroMQ等多种的传输协议(通过插件方式集成)。
  • RESTfull Stype通过RESTful方式来实现API编程
  • 3rd plugins:代表第三方插件。
  • Java(Netty),开发框架
  • JMX:监控
  1. ES启动:
    在这里插入图片描述
  • 集群启动是通过discoverty模块发现同一个集群下的其他节点
    • Es节点向网络中发送广播请求,已找到同集群名其他节点
    • 根据请求响应建立连接
  1. 故障检测:
    在这里插入图片描述
  • 管理节点监控所有节点,检查是否正常工作
  • 管理节点发送ping请求到其他节点,若无响应(ping多少次无响应为失效可定义,超时时间也可定义)
  • 所有节点也会向主节点发送ping来确定主节点是否正常
  • 若实效则移出节点,重新平衡集群分片或者选择新主节点
  1. master选举:
    在这里插入图片描述
  • Master作用
    Elasticsearch中的Master并不像mysql、hadoop集群的master那样,它既不是集群数据的唯一流入点,也不是所有元数据的存放点。所以,一般情况下Elasticsearch的Master负载是很低的。
    Elasticsearch的Master有一项工作是其他节点做不到的,那就是维护集群状态。
  • 集群状态中包括以下信息:
    集群层面的设置
    集群内有哪些节点
    各索引的设置,映射,分析器和别名等
    索引内各分片所在的节点位置
    上述的集群状态信息,由Master节点进行维护,并且同步到集群中所有节点。也就是说集群中的任何节点都存储着集群状态信息,但只有Master能够改变信息。
  • 选举过程:
    Ping所有节点,过滤出有master资格的候选节点
    看当前集群是否有master,有的话就选为临时master,没有就从候选节点中选出一个临时master,参选人不够重新选
    判断选的mater是否是自己,
    如果不是就向master发送请求申请加入集群,加入群后获取集群状态发现集群master鱼选的不一致就重选
    如果是就等别人选自己的票数过半时,成为matster
  1. 脑裂:
    在这里插入图片描述
  • 这个配置的意思是说在选举Master的过程中,需要多少个节点通信,说白点就是票数。如果达不到N/2+1,就是超过半数,就会选举失败,重新选举。

资料都是自己从网上查询总结,能力有限,望大家多指导交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值