Elasticsearch关键配置点

系统参数

  1. 修改系统文件句柄数

    sed -e '/^* soft nofile/d' \
        -e '/^* hard nofile/d' \
        -e '/^elasticsearch soft nofile/d' \
        -e '/^elasticsearch hard nofile/d' \
        -e '/^* soft memlock/d' \
        -e '/^* hard memlock/d' \
        -e '/^elasticsearch soft memlock/d' \
        -e '/^elasticsearch hard memlock/d' \
        -i.bak \
        /etc/security/limits.conf
    
    sed -e '$a * soft nofile 655350' \
        -e '$a * hard nofile 655350' \
        -e '$a elasticsearch soft nofile 655350' \
        -e '$a elasticsearch hard nofile 655350' \
        -e '$a * soft memlock unlimited' \
        -e '$a * hard memlock unlimited' \
        -e '$a elasticsearch soft memlock unlimited' \
        -e '$a elasticsearch hard memlock unlimited' \
        -i.bak \
        /etc/security/limits.conf; 
    

系统要求

  1. 关闭swap,频繁的使用swap会大大降低性能

    swapoff -a

  2. ES在启动时默认不允许使用root账户,所以需要先创建ES自己的账户

    useradd -m elasticsearch

内存配置

  1. ES的最大/最小堆栈内存建议不超过31G,否则会因为指针压缩的原因,白白浪费内存资源,甚至可能出现数据存取更慢的情况。

  2. 如果服务器内存大小超过64G,可以考虑在一个服务器部署多个ES实例。

  3. ES配置的内存是jvm的最大堆内存,并未涉及lucene的内存配置,而lucene在倒排索引时会进行缓存(占用大量内存),官方建议预留系统一般的内存给lucene,所以综合下来一个ES实例在不论内存资源多大的服务器上面,jvm配置最大为31G。

  4. 开启内存锁定的配置

    sed -e '/^vm.max_map_count/d' -i.bak /etc/sysctl.conf
    
    sed -e '$a vm.max_map_count=655360' -i.bak /etc/sysctl.conf
    
    sysctl -p
    

星霜荏苒 居诸不息