Elasticsearch默认的配置文件已经不错了,几乎不用更改了。在集群运行的时候,大部分的设置都也可以通过Cluster Update Setting API进行在线更改。 配置文件应该包含node的一些指定,如(node.name和路径),或者配置好节点能够加入集群的一些设置,如(cluser.name和network.host)。
配置文件路径
Elasticsearch有两个配置文件:
elasticsearch.yml :配置elasticsearch
log4j2.properties :配置elasticsearch的日志
该文件位于$ES_HOME/config/
下。 配置的路径可以改变,通过使用path.conf
,如:
/bin/elasticsearch -Epath.conf=/path/to/my/config
配置文件格式
配置文件的格式遵循YAML语法,下面是关于配置数据和日志目录路径的一些例子:
path:
data:/var/lib/elasticserach
logs:/var/log/elasticsearch
也可以使用下面的格式:
path.data:/var/lib/elasticsearch
path.logs:/var/log/elasticsearch
环境变量替换
在配置文件中用$ {...}
表示引用的环境变量将替换为环境变量的值,例如:
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
设置提示
对于一些配置如果你不想要保存在配置文件里,你可以使用${prompt.text}
或者${prompt.secret}
和在前台运行elasticsearch,${prompt.secret}
时,当你在终端输入时,不会显示。${prompt.text}
你将会看到你输入的内容。例如:
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文档。
Deprecation Logging
除常规日志记录外,Elasticsearch还允许您启用已Deprecation操作的日志记录。 例如,如果您将来需要迁移某些功能,这可以让您尽早确定。 默认情况下,将在WARN级别启用Deprecation日志记录,该级别是发出所有弃用日志消息的级别。
logger.deprecation.level = warn
这将在日志目录中创建每日滚动弃用日志文件。 定期检查此文件,尤其是当您打算升级到新的主要版本时。 默认日志记录配置已将弃用日志的卷策略设置为在1 GB后滚动和压缩,并最多保留五个日志文件(四个滚动日志和活动日志)。 您可以通过将弃用日志级别设置为error来在config / log4j2.properties文件中禁用它。
重要的Elasticsearch配置
虽然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
path.data and path.logs
如果您使用.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
cluster.name
一个node只能加入一个集群,它和其他node节点共享cluster.name。默认的名字是elasticsearch,但是你应该改变它,以此来描述你的集群的用途。
cluster.name: logging-prod
在不同的环境中,确保你不会再使用相同的集群名,否则最终将会加入到错误的集群节点。
node.name
默认情况下,Elasticsearch将会使用7位随机的uuid来标志一个节点ID,当一个node节点重启的时候node id也不会变(持久的),因此,node name也将不会改变。
配置一个有意义的节点名称有值得的,在重启node节点后,它依然会保持持久性。
node.name: prod-data-2
node.name 也可以设置成服务器的HOSTNAME,如下:
node.name: ${HOSTNAME}
bootstrap.memory_lock
对于节点的运行状况而言,不让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。这降低了内核交换的倾向,在正常情况下不应导致交换,同时仍允许整个系统在紧急情况下交换。
network.host
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。
discovery.zen.ping.unicast.hosts
简单方便,没有任何网络配置,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
为防止数据丢失,配置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