Elasticsearch

1、什么是elasticsearch?

elaticsearch是一个以弹性栈为核心的分页式的数据搜索和分析引擎,Logstash和Beats方便采集,聚合,和丰富你的数据并把它存储到elasticsearch中,Kibana允许你交互式的探索,可视化,和分享对数据的洞查,并管理和监控栈。

elasticsearch能对所有类型的数据提供近乎实时的搜索和分析功能。无论是结构化的和非结构化的文本,数字,和地理位置数据,elasticsearch才能以一种特别的方式存储和索引它来支持快速的搜索。你可以超越简单的搜索和聚合信息之外,发现你的数据的趋势和模式。并且随着你的数据和查询规模的增长 ,elasticsearch的分布式特性也能让你的部署一起无缝增长。

 

2、elasticsearch中的一些基本的概念

 es中的一些基本的概念包括集群,节点,索引,类型,文档,分片。

一般我们认为一台es实例就是一个节点 ,两个或者以上的网络相互联通的节点构成一个es集群。索引是es中数据存储的一种逻辑概念,使用的是倒排索引 。分片是es数据的物理存储结构,每个索引会被分割成一个或者多个分片,每个分片也可以有一个或者多个副本(这个是可配置的),在es的默认设置中,节点的分片为5,副本数为1,文档是es的最小存储和可搜索结构,文档是一个序列化的json结构。

3、elasticsearch的存储结构

elasticsearch是一个分布式的文档存储系统,它并不是将数据存储为行列格式的,而是以序列化后的json文档来存储复杂的数据结构。elasticsearch使用的是一种叫做倒置索引的的数据结构,它能支持快速的全文本搜索,倒置索引会列出所有文档中的每一个唯一的关键字,并且标识每个关键字出现过的所有文档,

索引可以被认为的一个优化的文档集合,每个文档又是字段的集合,它们心key-value对的形式保存了所有的数据,默认情况下,elasticsearch会索引字段的所有数据,每个索引字段有一个专用的,优化了的数据结构,使用每个字段的数据结构来组合和返回搜索结果的能力是elasticsearch这么快的原因。

除了默认的方式 ,我们也可以自定义规则来控制动态映射,并显示的定义映射规则来完全控制字段的存储和索引方式

3、elasticsearch集群

最小的集群的条件

1、一个主节点,2、最少一个节点拥有所有角色,3、最少一个节点拥有所有分片的副本

最小的可恢复的集群

1、最少3个拥有选举为主节点的节点,2、最少有两个节点拥有所有的角色,3、最少两个节点拥有所有分片的副本

4、es的存储过程和搜索过程

当我们向es中写入数据时,请求会先到达一个特殊的节点--协调节点(配置时这个节点为主节点,但是为非数据结点),通过计算文档id来确定文档属于哪个分片,然后分发到对应的节点(主分片所在的结点),结点接收到请求后,执行相应的操作,同时向副本分片进行同步,当主结点和副本结点都执行成功后,向请求的客户端发送执行成功的报告。

当我们向es查询数据时,请求会先进入到协调节点,协调节点会将请求转发到相关的分片本地执行,然后把相关结果的文档id返回给到协调节点,协调节点根据返回的文档id取到文档信息然后整合数据返回给到客户端

 

5、es集群节点下线处理

当集群中的节点因为任意的原因下线或者离开,主节点会做出以下的反应

1、提升副本分片为主分片来替代节点上的任意主分片

2、分配副本分片来替代丢失的副本分片(但是得确保节点中有足够的分片)

3、在剩余的节点中均匀的重新平衡分片

这些措施是通过确保每个分片都有尽快的自我复制的能力来防止集群的数据丢失,但是这样的话有一个缺点,如果丢失和节点的几分钟后重新上线了,那么会对集群造成 大量的不必要的负担--(因为在节点丢失的这个时间里面集群会重复的做两次提升副本分片为主分片 ,分配副本分片到各个结点,然后重新副平衡集群),为了防止这种情况,elasticsearch会有一种叫做延迟分配的策略。在这种策略下,如果丢失的节点的超时时间内重新回来的话,那么其中的分片会直接被重新分配到之前节点。如果延迟分配超时,那么主节点会选择其它节点启动重置,如果在重置的过程中挂失的节点重新加入,并且它的分片和主节点保持相同的同步id,那么重置会被取消,而是用这些分片来恢复,这样的代价是比较小的,基于这个原因,延迟分配的时间一般是1分钟 

 

posted @ 2022-01-18 13:28  jie的博客  阅读(108)  评论(0编辑  收藏  举报