1、 位置html
ES的配置文件位于安装目录\config下面,主要有java
(1) elasticsearch.yml ES系统的配置;node
(2) jvm.options Java虚拟机配置;bootstrap
(3) log4j2.properties log4j2日志的配置文件。缓存
值得注意的是ES支持环境变量的配置方式,例如:服务器
node.name: ${HOSTNAME}
当ES启动时,会将${HOSTNAME}替换成环境变量中的值,这种方式在容器环境下很是有用。oracle
2、 jvm.optionsapp
1. jvm.options是jvm的设置,ES是基于JVM运行的,因此jvm.options配置的是JVM的启动参数。dom
2. jvm.options中最可能须要改变的是堆内存(heap)的设置:jvm
-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是否超过了该值:
3、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"]
或
1 discovery.zen.ping.unicast.hosts: 2 - 192.168.1.10:9300 3 - 192.168.1.11 4 - 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)。
4、开发模式和生产模式
1. 二者的不一样
若是ES的配置有不正确的地方,开发模式下会以warning的方式记入日志,可是不影响你启动ES实例;可是在生产模式下,waring会变成exception,而且组织你的ES启动,以防止数据丢失。
2. 如何变成生产模式?
设置了network.host便会进入生产模式。
5、重要的系统配置
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失效。