一、 位置

ES的配置文件位于安装目录\config下面,主要有

(1) elasticsearch.yml ES系统的配置;

(2) jvm.options Java虚拟机配置;

(3) log4j2.properties log4j2日志的配置文件。

值得注意的是ES支持环境变量的配置方式,例如:

node.name: ${HOSTNAME}

当ES启动时,会将${HOSTNAME}替换成环境变量中的值,这种方式在容器环境下非常有用。

二、 jvm.options

1. jvm.options是jvm的设置,ES是基于JVM运行的,所以jvm.options配置的是JVM的启动参数。

2. jvm.options中最可能需要改变的是堆内存(heap)的设置:

-Xms1g
-Xmx1g

默认情况下jvm.options配置最小堆内存(Xms)和最大堆内存(Xmx)均是1G大小。

关于堆内存的设置,ES官方给出了如下的建议:

(1) Xms = Xmx;

(2) 堆内存越多,ES可以使用的内存缓存也就越多,但是过大的堆内存容易造成较长的GC等待;

(3) Xms = Xmx < 50%的物理内存,此举意在给系统内核留有足够的内存空间,如果你的系统同时跑了其他应用,还需酌情减少;

(4) Xms = Xmx < JVM的compressed oops内存值,关于compressed oops的说明可以参考Java官网。ES启动时的日志显示了Xms是否超过了该值:

三、elasticsearch.yml的关键配置

elasticsearch.yml是ES系统的主配置文件,它主要包括8个部分的配置,每个部分都用分割线进行了区分,看上去非常的条理:

1. Cluster

(1) cluster.name: 是指ES实例需要加入的ES集群名称,默认值是elasticsearch。

2. Node

(1) node.id:ES实例的唯一性标识,默认是取随机UUID的前7位,该值是系统初始化时分配好的,不会因实例重启而改变,所以该值可以不设置;

(2) node.name:ES实例的名称;

3. Paths

(1) path.logs:日志存放目录,默认在安装目录下的logs目录下。ES官方不建议把日志目录放在安装目录下,原因是ES升级时可能会将日志文件删除;

(2) path.data:索引文件的存放目录,默认也在安装目录下的data目录。同样,ES官方也不建议把data目录放在安装目录下;

此外,同一个ES实力可以有多个索引文件目录,属于一个数据分片(Shard)的索引文件会被存储到相同的data目录下:

path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3

4. Network

network.host:ES实例的地址,用于组建ES集群,对外广播自己的地址,默认值是“_local_”即127.0.0.1,需要注意的是如果你设置了该值ES会自动将该实例从开发模式提升到生产模式,这个我们下面再讲;

http.port:http请求的服务端口,默认是一个段9200-9300,ES会在该端口段中寻找第一个能用的端口;

transport.tcp.port:tcp传输的端口,默认也是一个段9300-9400;

5. Discovery

(1) discovery.zen.ping.unicast.hosts:集群的node节点地址。默认情况下,ES会扫描本机9300到9305端口,查看是否有其他ES实例,这也就意味着一台服务器可以配置多个ES实例,但是ES官方不推荐在生产上这么做。

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

 discovery.zen.ping.unicast.hosts:
- 192.168.1.10:
- 192.168.1.11
- seeds.mydomain.com

行3的端口默认为transport.profiles.default.port,如果失败则设置为transport.tcp.port的值;

行4如果有多个IP映射,ES会遍历所有的IP地址。

(2) discovery.zen.minimum_master_nodes:最少的master节点,推荐值为(master-eligible 节点数 / 2 + 1)。

四、开发模式和生产模式

1. 两者的不同

如果ES的配置有不正确的地方,开发模式下会以warning的方式记入日志,但是不影响你启动ES实例;但是在生产模式下,waring会变成exception,并且组织你的ES启动,以防止数据丢失。

2. 如何变成生产模式?

设置了network.host便会进入生产模式。

五、重要的系统配置

1. 关闭内存交换

内存交换是指操作系统会定期将应用程序所占的部分无用内存交换到磁盘上,内存交换会产生IO,频繁的交换会使性能降低,并影响ES节点的稳定性,所以ES官方建议关闭内存交换。

为此,ES给出三种方案:

(1) 关闭操作系统级别的内存交换。

在Linux下是:

sudo swapoff -a

(2) 设置swappiness

将vm.swappiness设置成1,这个仅有Linux支持。

(3) 设置elasticsearch.yml的bootstrap.memory_lock:

bootstrap.memory_lock: true

设置之后ES会通过锁定进程在内存中所占的地址空间来避免内存交换。如果内存分配给ES的内存用满,可能会造成Session失效。

Elasticsearch 系列3 --- Elasticsearch配置的更多相关文章

  1. elasticsearch系列一elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  2. Elasticsearch系列---初识Elasticsearch

    Elasticsearch是什么? Elasticsearch简称ES,是一个基于Lucene构建的开源.分布式.Restful接口的全文搜索引擎,还是一个分布式文档数据库.天生就是分布式.高可用.可 ...

  3. ELK系列七:Elasticsearch的集群配置和监控以及在部署ELK中踩的坑

    1.基本下载安装 #按照ELK系列一博客安装启动即可,没有大坑,注意一下权限即可 chmod -R 777 ./elasticsearch #此外没有java的,注意安装下JDK,我这次部署的环境是C ...

  4. elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  5. ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解

    前言 在上一篇中介绍了ElasticSearch集群和kinaba的安装教程,本篇文章就来讲解下 ElasticSearch的DSL语句使用. ElasticSearch DSL 介绍 Elastic ...

  6. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  7. ElasticSearch实战系列四: ElasticSearch理论知识介绍

    前言 在前几篇关于ElasticSearch的文章中,简单的讲了下有关ElasticSearch的一些使用,这篇文章讲一下有关 ElasticSearch的一些理论知识以及自己的一些见解. 虽然本人是 ...

  8. ElasticSearch实战系列十: ElasticSearch冷热分离架构

    前言 本文主要介绍ElasticSearch冷热分离架构以及实现. 冷热分离架构介绍 冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配.ES集群的索引写入及查询速度 ...

  9. ElasticSearch实战系列十一: ElasticSearch错误问题解决方案

    前言 本文主要介绍ElasticSearch在使用过程中出现的各种问题解决思路和办法. ElasticSearch环境安装问题 1,max virtual memory areas vm.max_ma ...

随机推荐

  1. java 开发微信中回调验证一直提示 解密失败处理(Java)

    微信公众号平台接入JDK6和JDK7及JDK8加解密失败处理(Java) 根据自己jdk版本编译,如jdk7或者jdk6 ,此时部署后提示报错:java.security.InvalidKeyExce ...

  2. android DatagramSocket send 发送数据出错

    安卓4.0以后好像不能在主线程里面使用 socket 所以不管是发送数据还是接收数据需要新开一个了线程: 以下代码是我点击发送是代码: new Thread(new Runnable() { @Ove ...

  3. JDK8集合类源码解析 - ArrayList

    ArrayList主要要注意以下几点: 1构造方法 2添加add(E e) 3 获取 get(int index) 4 删除 remove(int index)    ,   remove(Objec ...

  4. Oracle 12c的可插拔数据库PDB

    1. 默认安装之后会有一个可插拔数据库:pdborcl 2. 启动根容器: [oracle@eric ~]$ export ORACLE_SID=orcl [oracle@eric ~]$ sqlpl ...

  5. IPutils

    package com.mmall.util; import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils ...

  6. oracle创建表空间、添加数据库文件

    创建表空间: create [undo|TEMPORARY]tablespace venn datafile '/opt/oracle/db01/app/oracle/oradata/OSSORCL/ ...

  7. RF 和 GBDT联系和区别

    1.RF 原理 用随机的方式建立一个森林,森林里面有很多的决策树,随机森林的每一棵决策树之间是没有关联的.在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分别进行一下判断,看看 ...

  8. 2019.01.23 hdu3377 Plan(轮廓线dp)

    传送门 题意简述:给一个n*m的带权矩阵,求从左上角走到右下角的最大分数,每个格子只能经过最多一次,n,m≤9n,m\le9n,m≤9. 思路: 考虑轮廓线dpdpdp,但这道题并没有出现回路的限制因 ...

  9. 2019.01.20 bzoj3784: 树上的路径(二分答案+点分治)

    传送门 点分治好题. 题意简述:给一棵带边权的树,问所有路径中前mmm大的.m≤300000m\le300000m≤300000 思路: 网上有题解写了可以通过什么点分治序转化成超级钢琴那道题的做法蒟 ...

  10. 内联/块级元素的宽高及margin/padding的说明 |||||| 为何img、input等内联元素可以设置宽、高

    1,内联非替换元素设置宽高是无效的,设置margin时,左右有效,上下无效.设置padding时,左右有效,而上下padding比较奇葩,内联非替换元素的上下padding会在元素内容盒不动的情况下上 ...