irpas技术客

ElasticSearch优化_让梦冬眠@_elasticsearch ssd

irpas 7998

ElasticSearch优化 硬件选择 使用ssd使用RAID0使用多个硬盘,并允许ES通过多个path.data目录配置把数据条带化分配到他们上面 不要使用远程挂载的存储,比如NFS或者SMB/CIFS。这个引入的延迟对性能来说是背道而驰 分片策略 合理设置分片数 控制每个分片占用的硬盘容量不超过ES的最大JVM的堆空间(一般设置不超过32G),因此,如果索引的总量在500G左右,那分片大小在16个左右即可,最好同时考虑原则2考虑一下node数量,一般一个节点有时候就是一台物理机,如果分片数量过多,大大超过了节点数,很可能会导致一个节点上存在多个分片,一旦该节点故障,即使保持了一个以上的副本,同样有可能会导致数据丢失,集群无法恢复。所以, 一般都设置分片数不超过节点数的3倍。主分片,副本和节点最大数之间数量,分配参考关系 节点数 <= 主分片数 * (副本数+1) 推迟分片分配 写入速度优化 加大TranslogFlush,目的是降低Iops,Writeblock.增加Index Refresh间隔,目的是减少segment Merge的次数调整Bulk线程池和队列优化节点间的任务分布优化Lucene层的索引建立,目的是降低cpu及io 批量数据提交 ES提供了BulkAPI支持批量操作,当我们有大量的写任务时,可以使用Bulk来进行批量写入 通用的策略:如果Bulk默认设置批量提交的数据量不能超过100M.数据条数一般时 根据文档的大小和服务器性能而定的,但是单词批处理的数据大小应从5MB~15MB 逐渐增加,当性能没有提升时,把这个数据量作为最大值 减少Refresh的次数 Lucene在新增数据时,采用了延迟写入的策略,默认情况下索引的refresh_interval为1秒 Lucene将待写入的数据优先写到内存中,超过1秒(默认)时就会触发一次Refresh,然后Refresh 会把内存中的数据刷新到操作系统的文件缓存系统中,如果我们对搜索的时效性要求不高,可以将Refresh周期延长,例如30秒 加大Flush设置 Flush的主要目的是把文件缓存系统中的段持久化到硬盘,当Translog的数据量达到512MB 或者30分钟时,会触发一次Flushindex.translog.flush_threshold_size参数的默认值为512MB,我们进行修改。 增加参数值以为值文件缓存系统中可能需要 存储更多的数据,所以我们需要为操作系统的文件 缓存系统留下足够的空间 减少副本的数量 S为了保证集群的可用性,提供了Replicas(副本)支持,然后每个副本也会执行分析、索引及可能的 合并过程,索引Replicas的数量会严重有影响索引的效率 内存设置 ES堆内存的分配原则: 不要超过物理内存的50% Lucene的设计母的是把底层os里的数据缓存到内存中 Lucene的段是分别存储到单个文件中的,这些文件都是不会变化的,所以很利于缓存,同时操作系统也会把这些文件缓存起来,以便更快的的访问 如果我们设置的堆内存过大,Lucene可用的内存将会减少,就会严重影响降低Lucene的全文本查询性能堆内存的大小最好不要超过32GB 在java中,所有对象都分配在堆上,然后有一个Klass Pointer指针指向它的类元数据。 这个指针在64位的操作系统上为64位,64位的操作系统可以使用更多的内存2的64次方。在32位的系统上位32位, 32位的操作系统的最大寻址空间位4GB 2的32次方 但是64位的指针意味着更大的浪费,以为你的指针本身大了,浪费内存不算,更糟糕的是,更大的指针在主内存和缓存器(例如LLC,L1等) 之间移动数据的时候,会占用更多的带宽。 最终采用31G -Xms31g -Xmx31g 重要参数设置


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ElasticSearch #SSD