系统调优

  • 禁用swap

    使用swapoff命令可以暂时关闭swap。永久关闭需要编辑/etc/fstab,注释掉swap设备的挂载项。

    swapoff -a

如果完全关闭swap不可行,可以试着降低swap使用的优先级,执行

sysctl vm.swappiness = 1

并编辑/etc/sysctl.conf,加入swappiness设置。

如果因为一些原因,无法对swap进行操作,可以将ES配置中的memory_lock设置为true,从JVM层面保证内存数据交换到swap中。

bootstrap.memory_lock: true

要注意的是,linux系统对lock memory的大小有限制(调整方法见下),可以通过ES接口查看是否设置成功。

GET /_nodes?filter_path=**.mlockall&pretty

  • 调整io策略

    推荐使用的调度策略如下:

    HDD: cfq

    SSD: noop / deadline

    NVMe: none

io策略通过block scheduler接口查看和调整。

/sys/block/sd*/queue/scheduler

  • 关闭Access Time更新

    挂载目录时,指定文件系统选项"noatime","nodiratime",关闭文件access time更新,可以节省大量的io带宽。

  • 调整系统限额

    调整打开文件数量限制

    ulimit -n 65535

调整lock memory大小限制

ulimit -l unlimited

调整stack大小限制

ulimit -s unlimited

ES使用mmapfs方式,将磁盘文件映射到内存上,这会导致占用大量的虚拟地址空间。系统默认值并不能满足要求,可以通过sysctl调整。

sysctl -w vm.max_map_count=262144

以上命令只是暂时生效,想要持久化配置可以编辑/etc/security/limits.conf,/etc/sysctl.conf。

ES调优

  • 集群规划

    分离master节点,data节点和client节点。data节点只用来存储,索引数据,外部的索引和查询请求全部导向client节点,降低data节点的压力。(data节点故障和恢复时,涉及到分片的恢复和迁移,会造成比较大的io负载,影响集群整体索引和查询性能。)

  • 内存!内存!

    对于ES的jvm内存设置,推荐不要超过32G,超过32G一方面会降低内存利用效率,降低GC效率,消耗cpu带宽(参见jvm compressed oops机制),另一方面可能导致不可知的问题。

    同时,要为ES所依赖的底层索引库Lucene预留同等大小的内存。例如,一台内存64G(官方推荐配置,ideal sweet spot)大小的机器,可以为ES配置32G内存,另外32G预留给Lucene使用。

    对于大配置的机器,也不推荐为ES配置超过32G的内存,仍要坚持50%策略,通过单台多node的方式充分利用配置。例如,内存128G的机器,可以配置两个node节点,每个node节点分配32G内存。

    同一台机器配置有多个data节点时,要防止单个分片的主副本都落在同一个机器上,失去副本的意义。设置如下:

    cluster.routing.allocation.same_shard.host:true

另外,内存32G大小的限制,目前是为了触发jvm的compressed oops机制,提高内存使用效率,但是由于平台和jvm版本的差异,这个阈值并不是恰好为32G,需要自行进行测试,获取一个最佳值。

java -Xmx32600m -XX:+PrintFlagsFinal 2> /dev/null | grep UseCompressedOops

  • 分片建议

    分片的大小和数量之间需要一个平衡:分片过小数量过大会产生更大的集群状态信息,更多的segment文件,占用更多jvm内存,分片过大数量过小则会影响查询性能。
  1. 使用time-base的索引格式,控制索引(分片)大小,便于动态调整。
  2. 单分片平均大小在20G~40G之间,不要超过50G。
  3. 保证每GB内存对应20~25分片
  4. 通过测试获取最佳值benchmark using realistic data and queries
  • 集群发现使用单播

    出于可靠和安全考虑,使用单播方式做集群发现。

    discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]

  • 关闭Data节点http

    对于数据加点,关闭http功能,同时也不要安装head, bigdesk, marvel等监控插件,保证数据节点只处理索引,查询,合并等相关数据操作。

    http.enabled: false

  • 设置最小选举数

    防止脑裂,将最小选举数

    discovery.zen.minimum_master_nodes:

设置为

(number of master-eligible nodes / 2) + 1

  • 设置故障恢复阈值

    ES集群在故障恢复的初期,由于部分节点还未恢复服务,ES会检测到大量分片处于非健康状态,而进行分片的重建,迁移,造成不需要的资源开销。通过合理设置恢复参数,可以有效避免上述问题:

    最小恢复节点数(存活节点数达到这个阈值,才会进行恢复)

    gateway.recover_after_nodes: 80

集群节点数

gateway.expected_nodes: 100

恢复等待时间(达到节点规模阈值后,多久后开始执行恢复)

gateway.recover_after_time: 5m

参考文献:

Elasticsearch Reference

Elasticsearch集群调优的更多相关文章

  1. Elasticsearch 6.x版本全文检索学习之集群调优建议

    1.系统设置要到位,遵照官方建议设置所有的系统参数. https://www.elastic.co/guide/en/elasticsearch/reference/6.7/setup.html 部署 ...

  2. hadoop集群调优-OS和文件系统部分

    OS and File System 根据Dell(因为我们的硬件采用dell的方案)关于hadoop调优的相关说明,改变几个Linux的默认设置,Hadoop的性能能够增长大概15%. open f ...

  3. hadoop 集群调优实践总结

    调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...

  4. hadoop集群调优-hadoop settings and MapReduce

    Hadoop Settings 由于Hadoop节点的系统配置,一些hadoop的设置可以减少运行系统中的瓶颈.首先,提高Java运行时的堆内存容量,也要和系统中的整体内存容量相关:其次,保持hado ...

  5. Elasticsearch集群架构的部署和调优(一)

    [root@es-node1 ~]# mkdir /usr/java[root@es-node1 ~]# tar zxvf jdk1.8.0_131.tar.gz -C /usr/java/ [roo ...

  6. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

  7. Elasticsearch 集群和索引健康状态及常见错误说明

    之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思. 一.  ...

  8. Elasticsearch 集群 单服务器 超级详细教程

    前言 之前了解了Elasticsearch的基本概念.将spring boot + ElasticSearch + head插件 搞通之后.紧接着对es进行下一步的探索:集群.查阅资料的过程中,找到了 ...

  9. Elasticsearch学习总结 (Centos7下Elasticsearch集群部署记录)

    一.  ElasticSearch简单介绍 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticse ...

随机推荐

  1. JSON和java对象的互转

    先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...

  2. [转]HDFS HA 部署安装

    1. HDFS 2.0 基本概念 相比于 Hadoop 1.0,Hadoop 2.0 中的 HDFS 增加了两个重大特性,HA 和 Federaion.HA 即为 High Availability, ...

  3. Spring 5:以函数式方式注册 Bean

    http://www.baeldung.com/spring-5-functional-beans 作者:Loredana Crusoveanu 译者:http://oopsguy.com 1.概述 ...

  4. Windows下如何创建低权限进程

       1.  前言 在使用 Sysinternals 出品的 Process Explorer 过程中,对 “Run as Limited User” 功能的实现方式颇感兴趣,一番搜寻之下发现Mark ...

  5. linux备份文件脚本

    #!/bin/sh #Author: Opal TODAY=`date +%Y%m%d` YESTERDAY=`date -d"-1 day" +%Y%m%d` mkdir -p ...

  6. CoreData归纳使用

    1.CoreData简介 2.CoreData数据模型 3.CoreData的主要对象 4.使用CoreData实现数据存储 一.CoreData简介 CoreData用做数据持久化,是数据持久化的最 ...

  7. MYSQL数据库引擎区别详解

    数据库引擎介绍 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译MYSQL.在缺省情况下,MYSQL支持三个引擎:ISAM.MYISAM和HEAP.另 ...

  8. 【笔记】【VSCode】Windows下VSCode编译调试c/c++

    转载自http://m.2cto.com/kf/201606/516207.html 首先看效果 设置断点,变量监视,调用堆栈的查看: 条件断点的使用: 下面是配置过程: 总体流程: 下载安装vsco ...

  9. win10 uwp 无法附加到CoreCLR

    本文说的是在vs调试无法附加到CoreCLR.拒绝访问.已经如何去解决,可能带有一定的主观性和局限性,说的东西可能不对或者不符合每个人的预期.如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章, ...

  10. UVa12325, Zombie's Treasure Chest

    反正书上讲的把我搞得晕头转向的,本来就困,越敲越晕...... 转网上一个大神写的吧,他分析的很好(个人感觉比书上的清楚多了) 转:http://blog.csdn.net/u010536683/ar ...