Elasticsearch默认的配置文件已经不错了,几乎不用更改了。在集群运行的时候,大部分的设置都也能够经过Cluster Update Setting API进行在线更改。 配置文件应该包含node的一些指定,如(node.name和路径),或者配置好节点可以加入集群的一些设置,如(cluser.name和network.host)。html
Elasticsearch有两个配置文件:java
elasticsearch.yml :配置elasticsearch node
log4j2.properties :配置elasticsearch的日志web
该文件位于$ES_HOME/config/
下。 配置的路径能够改变,经过使用path.conf
,如:bootstrap
/bin/elasticsearch -Epath.conf=/path/to/my/config服务器
配置文件的格式遵循YAML语法,下面是关于配置数据和日志目录路径的一些例子:网络
path:
data:/var/lib/elasticserach
logs:/var/log/elasticsearch
也可使用下面的格式:app
path.data:/var/lib/elasticsearch
path.logs:/var/log/elasticsearch
在配置文件中用$ {...}
表示引用的环境变量将替换为环境变量的值,例如:dom
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
对于一些配置若是你不想要保存在配置文件里,你可使用${prompt.text}
或者${prompt.secret}
和在前台运行elasticsearch,${prompt.secret}
时,当你在终端输入时,不会显示。${prompt.text}
你将会看到你输入的内容。例如:elasticsearch
node:
name:${prompt.text}
当你运行elasticsearch时候,将会看到以下的输入提示:
Enter value for [node.name]:
若是
${prompt.text}
或者${prompt.secret}
在设置中使用,而且启动该服务在后台运行时,Elasticsearch 将不会运行。
新的默认的配置能够在命令行中指定,经过使用default
前缀,这将指定在默认状况下使用的值,除非在配置文件里指定其余的值。 例如:若是Elasticsearch将会启动,使用以下命令:
./bin/elasticsearch -Edefault.node.name = My_Node
这个值node.name
将是My_Node
,除非它在命令行中使用es.node.name
覆盖或者在配置文件中用node.name
覆盖。
ElasticSearch使用Log4j 2进行日志记录。可使用log4j2.properties文件配置Log4j2。ElasticSearch公开一个属性${sys:es.logs}
,该属性能够在配置文件中引用以肯定日志文件的位置;这将解析为运行时Elasticsearch日志文件的前缀。 例如:若是你的日志目录是/var/log/elasticsearch
和你的集群名:production
,而后${sys:es.logs}
将会被解析成/var/log/elasticsearch/production
。
appender.rolling.type = RollingFile 1
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs}.log 2
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n
appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log 3
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 4
appender.rolling.policies.time.interval = 1 5
appender.rolling.policies.time.modulate = true 6
配置输入源:RollingFile
日志为: /var/log/elasticsearch/production.log
滚动日志:/var/log/elasticsearch/production-yyyy-MM-dd.log
使用基于时间的的滚动策略
天天滚动日志
在天天的准点排列(而不是每隔二十四小时滚动)
若是将.gz或.zip附加到appender.rolling.filePattern,则日志将在滚动时进行压缩。 能够加载多个配置文件(在这种状况下它们将被合并),只要它们被命名为log4j2.properties而且将Elasticsearch配置目录做为继承; 这对于暴露其余记录器的插件颇有用。 记录器部分包含java包及其相应的日志级别。 appender部分包含日志的目标。 有关如何自定义日志记录和全部支持的appender的详细信息,请参阅Log4j文档。
除常规日志记录外,Elasticsearch还容许您启用已Deprecation操做的日志记录。 例如,若是您未来须要迁移某些功能,这可让您尽早肯定。 默认状况下,将在WARN级别启用Deprecation日志记录,该级别是发出全部弃用日志消息的级别。
logger.deprecation.level = warn
这将在日志目录中建立每日滚动弃用日志文件。 按期检查此文件,尤为是当您打算升级到新的主要版本时。 默认日志记录配置已将弃用日志的卷策略设置为在1 GB后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。 您能够经过将弃用日志级别设置为error来在config / log4j2.properties文件中禁用它。
虽然Elasticsearch须要不多的配置,可是在投入生产前,有不少的设置参数须要你手动进行配置。
path.data and path.logs
cluster.name
node.name
bootstrap.memory_lock
network.host
discovery.zen.ping.unicast.hosts
discovery.zen.minimum_master_nodes
若是您使用.zip或.tar.gz存档,则数据和日志目录是$ES_HOME的子文件夹。 若是这些重要文件夹保留在其默认位置,则在将Elasticsearch升级到新版本时,存在删除它们的高风险。
在生产使用中,你必须保证更改数据和日志文件夹的位置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
path.data 能够设置多个路径,在这种状况下,全部路径都将用于存储数据(尽管属于单个分片的文件将所有存储在同一数据路径中):
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
一个node只能加入一个集群,它和其余node节点共享cluster.name。默认的名字是elasticsearch,可是你应该改变它,以此来描述你的集群的用途。
cluster.name: logging-prod
在不一样的环境中,确保你不会再使用相同的集群名,不然最终将会加入到错误的集群节点。
默认状况下,Elasticsearch将会使用7位随机的uuid来标志一个节点ID,当一个node节点重启的时候node id也不会变(持久的),所以,node name也将不会改变。
配置一个有意义的节点名称有值得的,在重启node节点后,它依然会保持持久性。
node.name: prod-data-2
node.name 也能够设置成服务器的HOSTNAME,以下:
node.name: ${HOSTNAME}
对于节点的运行情况而言,不让JVM交换到磁盘是相当重要的(交换对性能和节点稳定性很是不利,应该不惜一切代价避免。它可能致使垃圾收集持续数分钟 而不是毫秒,而且可能致使节点响应缓慢甚至断开与群集的链接。)。 实现此目的的一种方法是将bootstrap.memory_lock设置为true。 要使此设置生效,须要先配置其余系统设置。 有关如何正确设置内存锁定的更多详细信息,请参阅 Enable bootstrap.memory_lock。 三种禁用交换的方法:
启动bootstrap.memory_lock:
bootstrap.memory_lock: true
检查此设置是否成功:
GET _nodes?filter_path=**.mlockall
禁用全部的交换文件 临时禁用:sudo swapoff -a 永久禁用:须要编辑/etc/fstab文件并注释掉包含该单词的任何行swap。
配置swappiness Linux系统上可用的另外一个选项是确保将sysctl值 vm.swappiness设置为1。这下降了内核交换的倾向,在正常状况下不该致使交换,同时仍容许整个系统在紧急状况下交换。
Elasticsearch默认绑定的是回环地址:如:127.0.0.1 and [::1],在一台服务器上运行单一的node节点已经足够了。
实际上,能够从单个节点上的相同$ES_HOME位置启动多个节点。 这对于测试Elasticsearch造成集群的能力很是有用,但它不推荐用于生产的配置。
为了保证一个集群间能够通讯,你必须须要设置一个非回环地址。你须要有更多的网络配置一般你须要配置的是network.host:
network.host: 192.168.1.10
network.host设置还了解一些特殊值,例如local,_ site,global_和修饰符,如:ip4和:ip6,其详细信息可在network.hoste中指定的值中找到。
一旦为network.host提供自定义设置,Elasticsearch就会假定您正在从开发模式转移到生产模式,并将许多系统启动检查从警告升级到异常。 有关更多信息,请参阅开发模式与生产modeedit。
简单方便,没有任何网络配置,Elasticsearch将绑定到可用的回环地址,并将扫描端口9300到9305以尝试链接到在同一服务器上运行的其余节点。 这提供了自动群集体验,无需进行任何配置。
当须要在其余服务器上链接已经存在的的群集时,您必须提供群集中多是存在的且可链接的其余节点的种子列表。 这能够指定以下:
discovery.zen.ping.unicast.hosts:
- 192.168.1.10:9300
- 192.168.1.11 1
- seeds.mydomain.com 2
若是未指定,端口将默认为transport.profiles.default.port并回退到transport.tcp.port。
一个主机名将会被解析成多个IP地址,并将会尝试链接已经解析的IP地址。
为防止数据丢失,配置discovery.zen.minimum_master_nodes相当重要,这样每一个符合主节点的节点都知道为了造成集群须要符合主节点的最小节点数。
若是没有此设置,遭受网络故障的群集可能会将群集拆分为两个独立的群集 - 脑裂 - 这将致使数据丢失。如何避免裂脑的更详细解释查看。
为避免脑裂,应将此设置设置为符合条件的主节点的法定数量:
(master_eligible_nodes / 2) + 1
换一中说法,若是有符合条件的三个主节点,那么最少的主节点数应该设置成(3/2)+1 or 2:
discovery.zen.minimum_master_nodes: 2
原文路径:https://www.elastic.co/guide/en/elasticsearch/reference/5.2/settings.html