题记由于之前已经梳理过Elasticsearch基础概念且在项目中实战过Elasticsearch的增删改查、聚类、排序等相关操作,对ES算是有了一定的认知。 但是,仍然对于一些底层的原理认知模糊,特买来《深入理解Elasticsearch》过了一遍,将书中一些细节知识点结合官网文档梳理如下。 1——4章偏应用,跟着敲一遍代码基本就能理解原理。 第5章 分布式索引架构1、如何选择合适的分片和副本数?目的:规划索引及配置,适应应用的变化。 正确认知:分片数索引创建后不可以修改,副本数索引创建后可以通过API随时修改。 多副本的缺点:额外副本占据了额外的存储空间,构建索引副本的开销也随之增大。 同时要注意:如果不创建副本,当主分片发生问题时,可能会造成数据的丢失。 配置参考:最理想的分片数量应该依赖于节点的数量。
举例:你计划5个分片和1个副本,那么所需要的最大的节点数为:5*(1+1)=10个节点。 2、可不可以基于时间构建索引?目的:选择感兴趣的索引上进行查询,历史索引(时间比较久)的定期删除。 第6章 底层索引控制1、什么是段?Elasticsearch中的每个分片包含多个segment(段),每一个segment都是一个倒排索引;在查询的时,会把所有的segment查询结果汇总归并为最终的分片查询结果返回。 在创建索引的时候,ES会把文档信息写到内存bugffer中(为了安全,也一起写到translog),定时(可配置)把数据写到segment缓存小文件中,然后刷新查询,使刚写入的segment可查。 虽然写入的segment可查询,但是还没有持久化到磁盘上。因此,还是会存在丢失的可能性的。所以,ES会执行flush操作,把segment持久化到磁盘上并清除translog的数据(因为这个时候,数据已经写到磁盘上,不再需要了)。
2、什么是段合并?由于自动刷新流程每秒会创建一个新的段,这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。 1)消耗资源:每一个段都会消耗文件句柄、内存和cpu运行周期; ES通过在后台进行段合并来解决这个问题。小的段被合并到大的段,然后这些大的段再被合并到更大的段。 3、段合并做了什么?段合并的时候会将那些旧的已删除文档从文件系统中清除。 启动段合并不需要你做任何事。进行索引和搜索时会自动进行。 4、为什么要进行段合并?1)索引段的个数越多,搜索性能越低并且消耗更多的内存; 5、段合并的好处是什么?1)减少索引段的数量并提高检索速度; 6、段合并可能带来的问题?1)磁盘IO操作的代价; 第7章 管理Elasticsearch1、有了副本机制为什么还需要集群备份?Elasticsearch 副本提供了高可靠性;它们让你可以容忍零星的节点丢失而不会中断服务。 2、集群如何备份?使用 snapshot API备份你的集群。
3、集群备份分类?完整备份——你的第一个快照会是一个数据的完整拷贝。 4、集群可以备份到哪里?要使用这个功能,你必须首先创建一个保存数据的仓库。有多个仓库类型可以供你选择:
5、备份操作API?
注意:共享文件系统路径必须确保集群所有节点都可以访问到。 第8章 提高性能1、什么情况下会出现堆内存泄漏?如果没有足够的堆内存来供你的应用在堆上创建新对象,JVM会抛出一个OutOfMemeory异常,这是一个内存出了问题的迹象,要么是没有足够的内存给它,要么是有内存泄漏,导致没有释放不再使用的对象。 2、推荐的性能测试工具?
3、ES需要优化的原因?1)硬件问题——如机械硬盘和固态硬盘; 4、后台什么在运行导致CPU飙升?如何排查?热点线程APi能向你提供查找问题根源所必需的信息。
5、如何扩展集群? 1)垂直扩展 2)水平扩展 优点:降低运行集群的成本。 6、集群架构设计考虑因素?当你在设计架构、决定节点数量、有多少个索引以及每个索引的分片数量时,你需要把能接受的出现故障的节点数量考虑进去。 当然了,你还需要考虑性能,只不过冗余和高可用应该是进行扩展时的一个因子。 7、大规模集群节点角色如何设定?为了有一个完全容错和高可用的集群,我们应该区分节点,为每个节点一个设计好的角色,角色分类如下:
候选主节点禁用Http协议是为了避免意外地在这些节点上进行查询。这样候选主节点相比于数据节点和路由节点可以使用更少的资源,可以确保它们仅仅被用来处理和主节点相关的工作。 8、高负载场景Elasticsearch优化的常规建议?这里是建议,不是准则。 (2)按需设定刷新频率 (3)线程池优化 (4)调整合并过程 (5)合理数据分布 如果你的节点无法处理查询带来的负载,你可以增加更多的ES节点,并增加副本的数量,于是主分片的物理拷贝会部署到新增节点上。这样会使得文档索引慢一些,但是会给你同时处理更多查询的能力。 9.高负载、高查询频率场景的建议(1)启动过滤器缓存和分片查询缓存 (2)优化查询语句结构 (3)使用路由 (4)并行查询 (5)字段数据缓存和断路 (6)控制size和shard_size 10、高负载、高索引吞吐量场景(1)批量索引 (2)doc values和索引速度的取舍 (3)控制文档字段 (4)索引的结构和副本 (5)调整预写日志。 (6)存储优化 (7)索引期间的内存缓存 小结书中基于ES1.X版本的一些优化细节,可能在5.X、6.X甚至更高版本中有所不同,需要根据实战需要、并结合最新官网文档更新相关知识。
|
|