ES 面试题总结 ---->第六章节

本文详述了Elasticsearch在使用、集群管理和优化方面的关键知识点,包括为何使用Elasticsearch以提升查询效率,master节点选举流程,解决集群脑裂问题的方法,Linux部署时的系统优化,以及保证并发下读写一致性的策略。同时,提到了监控集群状态的重要性和倒排索引的工作原理。
摘要由CSDN通过智能技术生成

1、为什么要使用Elasticsearch?

系统中的数据,随着业务的发展,时间的推移,将会非常多,而业务中往往采用模糊查询进行数据的搜索,而模糊查询会导致查询引擎放弃索引,导致系统查询数据时都是全表扫描,在百万级别的数据库中,查询效率是非常低下的,而我们使用ES做一个全文索引,将经常查询的系统功能的某些字段,比如说电商系统的商品表中商品名,描述、价格还有id这些字段我们放入ES索引库里,可以提高查询速度。

2、 Elasticsearch的master选举流程?
  • Elasticsearch 的选主是ZenDiscovery模块负责的,主要包含Ping(节点之间通过这个RPC来发现彼此)和Unicast(单播模块包含一个主机列表以控制哪些节点需要ping 通)这两部分

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

  • 如果对某个节点的投票致达到一定的值(可以成为master节点数n2+1)并且该节点自己也选举自己,
    那这个节点就是master。否则重新选举一直到满足上述条件。

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

3、 Elasticsearch集群脑裂问题?“脑裂”问题可能的成因?
  • 网络问题:集群间的网络延迟导致一些节点访问不到master,认为master 挂掉了从而选举出新的master,并对master 上的分片和副本标红,分配新的主分片
  • 节点负载:主节点的角色既为master 又为data,访问量较大时可能会导致ES停止响应造成大面积延迟,此时其他节点得不到主节点的响应认为主节点挂掉了,会重新选取主节点。
  • 内存回收: data节点上的ES进程占用的内存较大,引发JVM的大规模内存回收,造成ES进程失去响应。
脑裂问题解决方案:
  • 减少误判:discovery.zen.ping_timeout节点状态的响应时间,默认为3s,可以适当调大,如果 master
    在该响应时间的范围内没有做出响应应答,判断该节点已经挂掉了。调大参数(如6s ,
    discovery.zen.ping_timeout:6),可适当减少误判。
  • 选举触发: discovery.zen.minimum_master_nodes:1
    该参数是用于控制选举行为发生的最小集群主节点数量。当备选主节点的个数大于等于该参数的值,
    且备选主节点中有该参数个节点认为主节点挂了,进行选举。官方建议为(n/2)+1,n为主节点个数(即有资格成为主节点的节点个数)
  • 角色分离:即master节点与data节点分离,限制角色
    主节点配置为: node.master: true node.data: false
    从节点配置为: node.master: false node.data: true
4、Elasticsearch在部署时,对Linux 的设置有哪些优化方法?
  • 64 GB 内存的机器是非常理想的,但是32GB 和16 GB机器也是很常见的。少于8 GB会适得其反。
    如果你要在更快的CPUs和更多的核心之间选择,选择更多的核心更好。多个内核提供的额外并发远胜过稍微快一点点的时钟频率。

  • 如果你负担得起SSD,它将远远超出任何旋转介质。基于SSD的节点,
    查询和索引性能都有提升。
    如果你负担得起,SSD是一个好的选择。

  • 即使数据中心们近在咫尺,也要避免集群跨越多个数据中心。绝对要避免集群跨越大的地理距离。

  • 请确保运行你应用程序的JVM和服务器的JVM是完全一样的。在Elasticsearch 的几个地方,使用Java的本地序列化。

  • 通过设置gateway.recover_after_nodes、gateway.expected_nodes、gateway.recover_after_time可以在集群重启的时候避免过多的分片交换,这可能会让数据恢复从数个小时缩短为几秒钟。

  • Elasticsearch 默认被配置为使用单播发现,以防止节点无意中加入集群。只有在同一台机器上运行的
    节点才会自动组成集群。最好使用单播代替组播。

5、在并发情况下,Elasticsearch 如果保证读写一致?
  • 可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突;
  • 另外对于写操作,一致性级别支持quorum/one/all,默认为quorum,即只有当大多数分片可用时才允许写操作。但即使大多数可用,也可能存在因为网络等原因导致写入副本失败,这样该副本被认为故障,分片将会在一个不同的节点上重建。
  • 对于读操作,可以设置replication 为 syne(默认),这使得操作在主分片和副本分片都完成后才会返回;
    如果设置 replication为 async时,也可以通过设置搜索请求参数_preference为 primary来查询主分片,确保文档是最新版本。
6、如何监控Elasticsearch集群状态?

elasticsearch-head,插件
通过Kibana监控Elasticsearch。你可以实时查看你的集群健康状态和性能,也可以分析过去的集群、索引和节点指标

7、Elasticsearch中的倒排索引是什么?

倒排索引是搜索引擎的核心。搜索引擎的主要目标是在查找发生搜索条件的文档时提供快速搜索。ES中的倒排索引其实就是lucene.的倒排索引,区别于传统的正向索引,倒排索引会再存储数据时将关键词和数据进行关联,保存到倒排表中,然后查询时,将查询内容进行分词后在倒排表中进行查询,最后匹配数据即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值