Elasticsearch 重要参数配置

通过阅读官方文档了解到其中重要参数的配置及其说,下面将逐步进行了解。

一、 ElasticSearch参数配置

1. data和logs路径配置

如果使用.zip或.tar.gz归档文件,则数据和日志目录是$ES_HOME的子文件夹。如果这些重要的文件夹保留在它们的默认位置,则在将Elasticsearch升级到新版本时,删除它们的风险很高,建议进行修改
path:logs: /var/log/elasticsearch data: /var/data/elasticsearch
其中 data目录可以设置多个路径
path: data: - /mnt/elasticsearch_1 - /mnt/elasticsearch_2 - /mnt/elasticsearch_3

2. 集群名称

默认的集群名称均为elasticsearch,如有多套集群,则必须修改
cluster.name: syslogs-dev

3. 节点名称

默认情况下,Elasticsearch将使用随机生成的UUID的前七个字符作为节点id。请注意,节点id是持久化的,在节点重启时不会更改,因此默认的节点名称也不会更改。建议配置一个更有意义的名称,它还具有在重新启动节点后持久化的优点。
node.name: syslogs-data-2
或者用主机名(hostname)作为节点名
node.name: prod-data-2

4. network.host

默认情况下,Elasticsearch只绑定到环回地址,例如。127.0.0.1 (::1)。但此配置只能在同一服务器上运行单个节点。为了在其他服务器上形成具有节点的集群,节点需要绑定到一个非环回地址。虽然有许多网络设置,但通常只需要配置network.host
network.host: 192.168.1.10

5. 发现方式设置

Elasticsearch使用名为“Zen discovery”的自定义发现实现节点到节点的集群选择。生产上,应该配置两个重要的发现设置:

discovery.zen.ping.unicast.hosts: [192.168.1.10:9300, 192.168.1.11,http://seeds.mydomain.com]
discovery.zen.minimum_master_nodes: 2

其中,discovery.zen.ping.unicast.hosts 可以设置为ip:port 、ip(使用默认端口时)、域名(可解析的)其中任意一种均可;
discovery.zen.minimum_master_nodes 设置的值建议设置为 (master_eligible_nodes / 2) + 1

6. 堆大小设置

默认情况下,Elasticsearch告诉JVM使用大小为最小和最大1 GB的堆。在 jvm.options 文件里 通过Xms(最小堆大小)和Xmx(最大堆大小)设置的选项。通常设置规则如下:

  • a) 让最小堆大小(Xms)和最大堆大小(Xmx)相等;
  • b) Elasticsearch可用的堆越多,用于缓存的内存就越多。但是请注意,过多的堆会导致长时间的垃圾收集暂停;
  • c) 将Xmx设置为不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存;
  • d) 不要将Xmx设置为JVM用于压缩对象指针的截止值之上(压缩的oops);确切的界限有所不同,但接近32 GB。
    例如:
    -Xms2g-Xmx2g
    还可以通过环境变量设置堆大小,例如,通过ES_JAVA_OPTS设置这些值
    ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearchES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch

7. JVM堆转储路径

可以在 jvm.options 中的 -XX:HeapDumpPath=…进行配置,如果指定一个目录,JVM将根据运行实例的PID为堆转储生成一个文件名。如果指定一个固定的文件名而不是目录,那么当JVM需要对内存不足异常执行堆转储时,该文件必须不存在,否则堆转储将失败。

8. GC 日志

默认情况下,Elasticsearch启用GC日志。这些都是在jvm中配置的。选项并默认为与Elasticsearch日志相同的默认位置。默认配置每64 MB旋转一次日志,最多可以消耗2 GB的磁盘空间

9. temp路径

默认情况下,Elasticsearch使用一个私有临时目录,启动脚本在系统临时目录下创建该临时目录,默认情况为/tmp。但如果最近没有访问/tmp中的文件和目录,系统实用程序将清除这些文件和目录。但是,如果您打算在Linux上长时间运行.tar.gz发行版,那么应该考虑为Elasticsearch创建一个专用的临时目录,而不是在清除旧文件和目录的路径下。这个目录应该设置权限,这样只有运行Elasticsearch的用户才能访问它。然后,在开始Elasticsearch之前,将$ES_TMPDIR环境变量设置为指向它

10. JVM致命错误日志

默认情况下,Elasticsearch配置JVM将致命错误日志写入默认日志目录/var/log/elasticsearch。如果此路径不适合接收日志,则应修改jvm.options 条目-XX:ErrorFile=…

二、 重要的系统参数配置

1 . ulimit设置

建议设置为65535,修改的2种方式如下:

  • a) 修改/etc/security/limits.conf.文件
    elasticsearch - nofile 65536
  • b) root用户直接命令行修改
    sudo suulimit -n 65536su elasticsearch

2. 禁用swapping

  • a) 可以通过关闭swap方式防止使用swap,例如临时运行命令行处理
    sudo swapoff -a
    要永久禁用它,您需要编辑/etc/fstab文件并注释掉包含swap的任何行
  • b) Linux系统上的另一个方式修改vm.swappiness为1。这减少了内核交换的趋势,并且在正常情况下不应该导致交换,同时仍然允许整个系统在紧急情况下交换。
  • c)在Linux/Unix系统上使用mlockall,或者在Windows上使用VirtualLock,尝试将进程地址空间锁定到RAM中,防止任何Elasticsearch内存被交换出去,这可以通过在config/elasticsearch.yml文件中配置一行来实现
    bootstrap.memory_lock: true

3. 系统控制文件设置

Elasticsearch默认使用mmapfs目录存储索引。默认操作系统对mmap计数的限制可能太低,这可能导致内存异常。修改方式如下:

  • a) 修改 /etc/sysctl.conf文件
    系统控制文件是管理系统中的各种资源控制的配置文件。ES需要开辟一个65536字节以上空间的虚拟内存。Linux默认不允许任何用户和应用直接开辟虚拟内存。 新增内容为:
    vm.max_map_count=262144
    使用命令: sysctl -p 让系统控制权限配置生效。
  • b) root用户下命令行方式临时设置
    sysctl -w vm.max_map_count=262144

4. 线程数设置

Elasticsearch为不同类型的操作使用不同的线程池。需要确保Elasticsearch用户可以创建的线程数至少为4096。可以用如下方式设置:
修改/etc/security/limits.d/90-nproc.conf 设置为 4096
* soft nproc 4096root soft nproc unlimited

5. DNS cache设置

在 JVM options中设置 es.networkaddress.cache.ttl 和 es.networkaddress.cache.negative.ttl,默认为60s和10s

Elasticsearch 其他参数配置

# ---------------------------------- Cluster -----------------------------------
# Use a descriptive name for your cluster:# 集群名称,用于定义哪些elasticsearch节点属同一个集群。
cluster.name: bigdata# ------------------------------------ Node ------------------------------------
# 节点名称,用于唯一标识节点,不可重名
node.name: server3# 1、以下列出了三种集群拓扑模式,如下:
# 如果想让节点不具备选举主节点的资格,只用来做数据存储节点。
node.master: false
node.data: true# 2、如果想让节点成为主节点,且不存储任何数据,只作为集群协调者。
node.master: true
node.data: false# 3、如果想让节点既不成为主节点,又不成为数据节点,那么可将他作为搜索器,从节点中获取数据,生成搜索结果等
node.master: false
node.data: false# 这个配置限制了单机上可以开启的ES存储实例的个数,当我们需要单机多实例,则需要把这个配置赋值2,或者更高。
#node.max_local_storage_nodes: 1# ----------------------------------- Index ------------------------------------
# 设置索引的分片数,默认为5 "number_of_shards" 是索引创建后一次生成的,后续不可更改设置
index.number_of_shards: 5# 设置索引的副本数,默认为1
index.number_of_replicas: 1# 索引的刷新频率,默认1秒,太小会造成索引频繁刷新,新的数据写入就慢了。(此参数的设置需要在写入性能和实时搜索中取平衡)通常在ELK场景中需要将值调大一些比如60s,在有_template的情况下,需要设置在应用的_template中才生效。
index.refresh_interval: 120s# ----------------------------------- Paths ------------------------------------
# 数据存储路径,可以设置多个路径用逗号分隔,有助于提高IO。 # path.data: /home/path1,/home/path2
path.data: /home/elk/server3_data# 日志文件路径
path.logs: /var/log/elasticsearch# 临时文件的路径
path.work: /path/to/work# ----------------------------------- Memory -------------------------------------
# 确保 ES_MIN_MEM 和 ES_MAX_MEM 环境变量设置为相同的值,以及机器有足够的内存分配给Elasticsearch
# 注意:内存也不是越大越好,一般64位机器,最大分配内存别才超过32G# 当JVM开始写入交换空间时(swapping)ElasticSearch性能会低下,你应该保证它不会写入交换空间
# 设置这个属性为true来锁定内存,同时也要允许elasticsearch的进程可以锁住内存,linux下可以通过 `ulimit -l unlimited` 命令bootstrap.mlockall: true# 节点用于 fielddata 的最大内存,如果 fielddata
# 达到该阈值,就会把旧数据交换出去。该参数可以设置百分比或者绝对值。默认设置是不限制,所以强烈建议设置该值,比如 10%。
indices.fielddata.cache.size: 50mb# indices.fielddata.cache.expire 这个参数绝对绝对不要设置!indices.breaker.fielddata.limit 默认值是JVM堆内存的60%,注意为了让设置正常生效,一定要确保 indices.breaker.fielddata.limit 的值
大于 indices.fielddata.cache.size 的值。否则的话,fielddata 大小一到 limit 阈值就报错,就永远道不了 size 阈值,无法触发对旧数据的交换任务了。#------------------------------------ Network And HTTP -----------------------------
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0
network.bind_host: 192.168.0.1# 设置其它节点和该节点通信的ip地址,如果不设置它会自动设置,值必须是个真实的ip地址
network.publish_host: 192.168.0.1# 同时设置bind_host和publish_host上面两个参数
network.host: 192.168.0.1# 设置集群中节点间通信的tcp端口,默认是9300
transport.tcp.port: 9300# 设置是否压缩tcp传输时的数据,默认为false,不压缩
transport.tcp.compress: true# 设置对外服务的http端口,默认为9200
http.port: 9200# 设置请求内容的最大容量,默认100mb
http.max_content_length: 100mb# ------------------------------------ Translog -------------------------------------
#当事务日志累积到多少条数据后flush一次。
index.translog.flush_threshold_ops: 50000# --------------------------------- Discovery --------------------------------------
# 这个参数决定了要选举一个Master至少需要多少个节点,默认值是1,推荐设置为 N/2 + 1,N是集群中节点的数量,这样可以有效避免脑裂
discovery.zen.minimum_master_nodes: 1# 在java里面GC是很常见的,但在GC时间比较长的时候。在默认配置下,节点会频繁失联。节点的失联又会导致数据频繁重传,甚至会导致整个集群基本不可用。# discovery参数是用来做集群之间节点通信的,默认超时时间是比较小的。我们把参数适当调大,避免集群GC时间较长导致节点的丢失、失联。
discovery.zen.ping.timeout: 200s
discovery.zen.fd.ping_timeout: 200s
discovery.zen.fd.ping.interval: 30s
discovery.zen.fd.ping.retries: 6# 设置集群中节点的探测列表,新加入集群的节点需要加入列表中才能被探测到。
discovery.zen.ping.unicast.hosts: ["10.10.1.244:9300",]# 是否打开广播自动发现节点,默认为true
discovery.zen.ping.multicast.enabled: false
indices.store.throttle.type: merge
indices.store.throttle.max_bytes_per_sec: 100mb

Elasticsearch 常用配置参数总结相关推荐

  1. Elasticsearch常用配置及性能参数

    Elasticsearch常用配置及性能参数 cluster.name: estest   集群名称 node.name: "testanya"  节点名称 node.master ...

  2. Redis常用配置参数详解及查看修改命令

    目录 Redis常用配置参数 Redis配置参数查看命令 语法 举例 说明: Redis配置参数修改命令 语法 举例 说明: Redis常用配置参数 序号 配置项 说明 1 daemonize no ...

  3. Sybase常用配置参数

    Sybase常用配置参数 可以采用sp_configure查看SYBASE所有的配置,也可以在sybase根目录下面有"[库名].cfg"配置,该文件中用户没有更改的项全部显示值为 ...

  4. JVM 常用配置参数(Java 8)

    日志 -XX:+PrintFlagsFinal,打印JVM所有参数的值 -XX:+PrintGC,打印GC信息 -XX:+PrintGCDetails,打印GC详细信息 -XX:+PrintGCTim ...

  5. Hadoop与Spark常用配置参数总结

    背景 MapReduce和Spark对外提供了上百个配置参数,用户可以为作业定制这些参数以更快,更稳定的运行应用程序.本文梳理了最常用的一些MapReduce和Spark配置参数. MapReduce ...

  6. spring cloud(九):各组件常用配置参数

    1.Eureka的常用配置     Eureka Server端 eureka.server.enable-self-preservation # 设为false,关闭自我保护 eureka.serv ...

  7. Redis 服务器常用配置参数

    恰当地设定 Redis 服务器参数,才能保证服务器正确.高性能.安全地运转.通过这些参数,我们还能了解 Redis 服务器内部运转的机制和细节.同时,主从复制和 Redis 集群的部署也要掌握相关配置 ...

  8. moco常用配置参数及实战

    VOL 182 14 2020-12 今天距2021年17天 这是ITester软件测试小栈第182次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周上午 08:30准 ...

  9. elasticsearch常用配置

    一.关于elasticsearch的基本概念 每一个运行实例称为一个节点,每一个运行实例既可以在同一机器上,也可以在不同的机器上. 所谓运行实例,就是一个服务器进程,在测试环境中可以在一台服务器上运行 ...

最新文章

  1. 解决KeyError: ‘acc‘ 和KeyError: ‘val_acc‘错误
  2. 数据结构与算法详解目录
  3. java xml字符串提取元素,如何从Java中将子元素从XML提取到字符串?
  4. 任正非公开信:投入 20 亿美元全面提升华为软件质量
  5. C++多重继承师生类复盘
  6. 曾经的python爬虫挣钱生活_聊一聊,这些年我用Python爬虫挣钱的那些事
  7. 【Codeforces Round #442 (Div. 2) C】Slava and tanks
  8. Asp.net SQL注入实例分享
  9. python打包成exe文件
  10. 工程项目管理(EPC)系统全套流程详细解读(含流程图)
  11. PHP是世界上最好的语言
  12. 记一次磁盘PV丢失事件
  13. python编程求一个数的平方根_用Python求一个数的平方根.
  14. 蛋花花:人类与“人工智能”相比,人类还有优势吗
  15. c# 中 event 和 delegate 的区别
  16. 那些年你追过的女神:开发人员应该懂多少运维
  17. linux 系统 Shell语言 基础
  18. 大数据测试指标(二)
  19. uci数据集中的缺失数据_从uci早期糖尿病风险预测数据集中创建分类器
  20. android java 指针异常处理,Android程序员日常开发中异常总结

热门文章

  1. SPIEC-EASI的微生物网络构建示例
  2. python使用matplotlib可视化、使用英文单次或者缩写指定使用的颜色、使用16进制的RGB字符串指定颜色、使用RGB或者RGBA数字元组指定颜色
  3. Python为图像添加文本内容(Writing Text on Image)
  4. R语言dplyr包sample_n函数、sample_frac函数数据采样实战
  5. R语言dplyr包cumall函数、cumany函数和cummean函数实战
  6. fsl线性配准实践+核磁共振影像数据处理
  7. 顺序特征选择器(SequentialFeatureSelector (SFS))
  8. Evaluation of long read error correction software 长读纠错软件的评估
  9. 编译报错field has incomplete type
  10. 二代数据 模拟软件wgsim