es汇总

https://blog.csdn.net/feifeidepop/article/details/83281050

 

es 集群搭建 https://www.cnblogs.com/jstarseven/p/6803054.html

 

https://blog.csdn.net/airfish20000/article/details/77131280

 

https://www.jianshu.com/p/700bf669d951

 

1、es是如何实现master选举的

 

(1)、elasticsearch的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping通)

(2)、对所有可以成为master的节点(node.master:true)根据nodeid字典排序,每次选举每个节点都把自己所知道的节点排一次序,然后选出第一个(第0个)节点,暂且认为它是master节点

(3)、如果对某个节点的投票数达到一定的值(一般认为n/2+1)并且该节点自己也选举自己,那这个节点就是master,否则重新选举一直到满足上述条件

补充:master节点的职责主要包含集群、节点和索引的管理,不负责文档级别的管理;data节点可以关闭http功能。

 

2、es中的节点(比如20个),其中10个选了一个节点作为master,另外10个选了另一个节点作为master

 

   (1) 、当集群master候选数量不小于3时,可以通过设置最少投票通过数量(discovery.zen.minimum_master_nodes)超过所有候选节点一半以上来解决脑裂问题

 (2)、当候选数量为两个时,只能修改为唯一的一个master候选,其他作为data节点,避免脑裂问题

 

3、辨析es索引和lucence索引

 

es索引是组织数据的逻辑空间(好比数据库),1个Elasticsearch的索引有1个或者多个分片(默认5个),分片对应实际存储数据的Lucene的索引,分片自身就是一个搜索引擎,每个分片0或者多个副本。

es索引还包含“type”,用于逻辑上隔离索引中的数据。在es索引中,给定一个type,它的所有文档会拥有相同的属性,就像表的schema

Index == Database Types == Tables Properties == Schema

4、节点类型

 

(1)、主节点:控制es集群,负责集群中的操作,比如创建/删除一个索引,跟踪集群中的节点,分配分片到节点。主节点处理集群的状态并广播到其他节点,并接受其他节点的确认响应。

每个节点都可以通过设置node.master 为true 成为主节点

(2)、数据节点:持有数据和倒排索引。默认情况下,每个节点都可以通过设置node.data为true成为数据节点。如果使用一个专门的主节点,应该设置node.data为false。

(3)、客户端节点:node.master和node.data都设置为false,那么该节点就是一个客户端节点,扮演一个负载均衡的角色,将到来的请求路由到集群中的各个节点。

es 集群中作为客户端接入的节点叫协调节点。协调节点会将客户端请求路由到集群合适的分片上。对于读请求来说,协调节点每次会选择不同的分片处理请求,以实现负载均衡。

 

5、存储模型

 

es使用了Apache Lucene,后者是使用java开发的全文检索工具库,其内部使用的是被称为倒排索引的数据结构,其设计是为全文检索结果的低延迟提供服务。文档是es的是数据单位,对文档中的此项进行分词,并创建区重词项的有序列表,将词项与其在文档中出现的位置列表管理立案,便形成了倒排索引。

 

6、详细描述一下es索引文档的过程

 

这里的索引文档应该理解为文档写入es,即创建索引的过程

 

文档写入包括单文档写入和bulk批量写入,这里只解释单文档写入

 

注:

(1)、协调节点默认使用文档ID参与计算(也支持通过routing),以便为路由提供合适的分片

shard = hash(document_id) % (num_of_primary_shards)

(2)、当分片所在的节点接收到来自协调节点的请求后,会将请求写入Memory Buffer,然后定时(默认每隔1秒)写入到Filesystem Cache,这个从Memory Buffer到Filesystem Cache的过程叫做refresh

(3)、当然在某些情况下,存在Memory Buffer和Filesystem Cache数据可能会丢失,ES通过translog极致保证数据的可靠性。实现极致是接收到请求后,同时也会写入translog中,当Filesystem Cache中数据写入到磁盘中时,才会清除掉,这个过程叫做flush。

(4)、在flush过程中,内存中的缓存将被请出,内容被写入一个新段,段的fsync将创建一个新的提交点,并将内容刷新到磁盘,旧的translog将被删除并开始一个新的translog

flush出发的时机是定时触发(默认30分钟)或者translog变得太大(521M)时。

 

7、更新和删除过程

 

磁盘上每个段都有一个相应的.del文件,当伤处请求发送后,文档并没有真正被删除,而是在.del文件被标记为删除。该文档依然能匹配查询,但是会在结果中被过滤掉。当段合并时,在.del文件中被标记为删除的文档将不会被写入新段。

在新的文档创建时,es会为该文档指定一个版本号。执行更新时,旧版的文档在.del文件被标记会删除。

 

 

8、搜索过程

 

两阶段过程 Query+Fetch

query

(1)、协调节点将查询请求路由到索引的全部分片

(2)、每个分片独立查询(from+size),并为查询结果创建一个优先队列,以相关性得分排序,全部分片都将匹配文档的ID及其相关性得到返回给协调节点。

(3)、协调节点创建一个优先队列并对所有结果进行全局排序

 

fetch

当协调节点在生成的全局有序的文档列表中,为全部结果排好序后,它将向包含原始文档的分片发起请求。全部分片填充文档信息并将其返回给协调节点。

 

 

9、倒排索引

 

通过分词策略,形成词和文章的映射关系表,这种词和映射表即为倒排索引

 

底层实现: FST 数据结构

1)空间占用小 通过对词典中单词前缀和后缀重复利用,压缩了存储空间

2)查询速度快 O(len(str))的查询时间复杂度

 

原理示例

 

10、es部署时,对Linux的设置有哪些调优方法(考察对es的运维能力)

 

(1)、关闭缓存swap

(2)、堆内存设置为min (节点内存/2, 32G)

(3)、设置最大文件句柄数

(4)、线程池+队列大小根据业务需要做调整

(5)、磁盘存储raid方式-----存储有条件使用RAID10,增加单节点性能以及比秒单节点存储故障

 

11、在并发情况下,es如何保证读写一致

1)、可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突

2)、另外对于写操作,一致性级别支持quonum/one/all,默认为quonum,即只有当大多数分片可用时才允许写操作。即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点重建。

3)、对于读操作,可以设置replication为sync,这使得操作在主分片和副本分片都完成才会返回。

 

 

12、es 了解多少,说说你们公司的es集群架构,索引数据大小,分片有多少,以及一些调优手段。

 

es 集群架构13个节点,索引根据通道不同共20+索引,根据日期,每日递增20+,索引:10分片,每日递增1亿+数据。每个通道每天索引大小控制:150G左右

 

仅索引层次调优手段

一、设计阶段调优

1)、根据业务增量需求,采取基于日期模板创建索引,通过roll_over API滚动索引

2)、使用别名进行索引管理

3)、每天凌晨定时对索引force_merge操作,以释放空间

4)、采取冷热分离机制,热数据存储到SSD,提高索引效率;冷数据顶起进行shrink操作,以缩减存储。

5)、采用curator进行索引的生命周期管理;

6)、仅针对需要分词的字段,合理设置分词器。

 

二、写入调优

1)、写入前副本数设置为0

2)、写入前关闭refresh_interval设置为-1,禁用刷新机制

3)、写入过程,采用bulk批量写入

4)、写入后恢复副本数和刷新间隔

5)、尽量使用自动生成的id

 

三、查询调优

1)、禁用wildcard --- 类似mysql like

2)、禁用批量terms(成百上千的场景)

3)、充分利用倒排索引机制,能keyword类型尽量keyword

4)、数据量大时候,可以先基于时间敲定索引再检索。

5)、设置合理的路由机制

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值