Elasticsearch基本概括

Elasticsearch基本概括

一、基本概述

  1. 强大的全文检索能力,基于Lucene实现,内部有倒排索引的数据结构。

二、什么是倒排索引

三、ES的集群架构

  1. 集群节点
  • 一个节点就是一个ES服务实例,通过配置服务集群名称cluster.name加入集群。

  • ES节点角色区分:通过配置文件conf/elasticsearch.yml,进行角色区分,例如:

*   node.master: true/false 
    
*   node.data: true/false
  • 单个节点既可以是候选主节点也可以是数据节点,所以节点角色分为四大类:

    • 只是候选主节点

    • 只是数据节点

    • 既是候选主节点,也是数据节点

    • 既不是候选主节点,也不是数据节点

  • 节点分类:

    • 候选主节点:可参与选票,选举成为主节点;

    • 主节点:负责索引的添加、删除;跟踪集群节点情况,对分片进行分配,收集各节点状态;

    • 数据节点:负责数据CRUD和聚合等操作;对机器性能要求较高;

    • 协调节点:其本身不是通过设置来分配的,用户的请求可以随机发往任何一个节点,并由该节点负责分发请求、收集结果等操作,而不需要主节点转发。这种节点可称之为协调节点,集群中的任何节点都可以充当协调节点的角色。每个节点之间都会保持联系。

  1. 发现机制
  • ES的特殊发现机制:ZenDiscovery

  • ZenDiscovery作用:节点发现和选举Master节点

*   多播(组播):指一个节点可以向多台机器发送请求,ES中不建议这么使用。
    
*   单播:当一个加入一个集群时,请求发送到一台机器上,就能获取到整个集群所有节点信息了,然后联系Master节点,加入集群。
  1. 选主
  • 候选主节点,选举投票变成Master节点。
  1. 脑裂
  • 由于其他原因,选举出多个Master节点

四、索引是如何写入的?

  1. 分片
  • 背景:数据量很大的时候;

  • 方式:ES通过水平拆分,将一个索引上的数据进行拆分出来,分配到不同的数据块上,拆分出来的数据块叫shard

  • 数据拆分方式:不能乱拆分,需要一个路由策略

  1. 副本
  • 概念:对分片的复制

  • 组成:主分片和副本分片

  • 作用:防止数据丢失

  • 流程:对doc的新建、索引和删除操作,都必须在主分片上进行,然后再被复制到副分片上;为了解决并发写操作冲突,使用乐观锁进行控制,每个文档都有_version号,当文档被修改之后_version号进行递增、一旦所有副分片写完,就会报告协调节点,协调节点告诉客户端成功。

  1. ES写索引原理
  • 路由规则,计算主分片

  • 请求发送到 node1上,通过路由计算得到 s1主分片(node2上)

  • 然后s1写好后,并发到副分片,进行数据写入

  • 所有副分片写好后,报告给node2写好了,node2报告给协调节点node1,node1告诉客户端完成

  1. 存储原理
  • 背景:数据写入到主分片和副分片中之后,还是在内存中,为了防止数据丢失,还需要存储到磁盘中去。

  • Lucene工作原理:

*   新添加一个文档时,进行分词预处理,然后将文档索引写入内存中,并将这次操作写入事务日志(transLog)
    
*   默认Lucene每隔1秒(refresh\_interval配置项)将内存中的数据刷新到文件系统缓存中,称为一个segment(段),segment段中是无法修改的。这时候才能被检索到,在这之前是无法被检索的,因此说 ES 是准实时的;因此 refresh\_interval决定了ES的实时性。
    
*   随着segment越来越大,默认情况下是Lucene每隔 30min或者数据大于 512M,将缓存中的segment数据持久化到磁盘中,称为一个commit point,此时会删除掉transLog。
    
*   可以通过设置 refresh\_interval = 30s 来提高性能。
  • 索引文件分段存储并且不可修改,那如何进行新增、删除、更新?

    • 新增:直接增加一个segment就可以了

    • 删除:由于不可修改,所以删除操作,不会把文档从旧的段中移除,而是通过新增一个.del文件,文件中会列出这些被删除的段信息,这个被标记删除的段信息,仍然会被查询到,但是会在返回结果集的时候移除掉。

    • 更新:删除和新增的组合。是先通过.del文件将文档删除,然后再新增新的段。

  • 段合并:将小的segment合并成大的segment。

五、自动嗅探

  1. 客户端访问节点,获取节点列表信息,然后将请求平均地发送到各个节点上。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值