Looking for elasticsearch Answers? Try Ask4KnowledgeBase
Looking for elasticsearch Keywords? Try Ask4Keywords

ElasticsearchElasticsearch配置


备注

Elasticsearch附带了一组默认设置,为开发提供了良好的开箱即用体验。隐含的说法是,它不一定适合生产,必须根据自己的需要量身定制,因此无法预测。

默认设置使您可以轻松地在同一台计算机上下载和运行多个节点而无需进行任何配置更改。

设置在哪里?

在每个Elasticsearch安装中都有一个config/elasticsearch.yml 。这是以下设置的实时位置:

  • cluster.name
    • 节点加入的集群的名称。同一群集中的所有节点必须共享相同的名称。
    • 目前默认为elasticsearch
  • node.*
    • node.name
      • 如果未提供,则每次节点启动时都会生成一个随机名称。这可能很有趣,但对生产环境来说并不好。
      • 名称不必是唯一的,但他们应该是唯一的。
    • node.master
      • 布尔设置。当true ,则意味着该节点是一个合格的主节点,它可以是当选主节点。
      • 默认为true ,表示每个节点都是合格的主节点。
    • node.data
      • 布尔设置。如果为true ,则表示节点存储数据并处理搜索活动。
      • 默认为true
  • path.*
    • path.data
      • 为节点写入文件的位置。 所有节点都使用此目录存储元数据,但数据节点也将使用它来存储/索引文档。
      • 默认为./data
        • 这意味着将为您创建data作为在Elasticsearch目录 config的对等目录。
    • path.logs
      • 写入日志文件的位置。
      • 默认为./logs
  • network.*
    • network.host

      • 默认为_local_ ,实际上是localhost
        • 这意味着,默认情况下,节点无法与当前计算机外部进行通信!
    • network.bind_host

      • 这可能是一个数组,它告诉Elasticsearch当前机器的哪些地址也要绑定套接字。
        • 正是这个列表使机器外部的机器(例如,集群中的其他节点)能够与该节点通信。
      • 默认为network.host
    • network.publish_host

      • 用于向其他节点通告如何与此节点进行最佳通信的单一主机。
        • 在向network.bind_host提供阵列时,这应该是用于节点间通信的一个主机。
      • 默认为network.host`。
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • 定义大师选举的法定人数。 必须使用以下公式设置: (M / 2) + 1其中M符合条件的主节点数(节点使用node.master: true隐式或显式)。
      • 默认为1 ,仅对单个节点集群有效!
    • discovery.zen.ping.unicast.hosts
      • 将此节点连接到群集其余部分的机制。
      • 列出符合条件的主节点,以便节点可以找到群集的其余部分。
      • 这里应该使用的值是那些其他节点的network.publish_host
      • 默认为localhost ,这意味着它只在本地计算机上查找要加入的集群。

存在什么类型的设置?

Elasticsearch提供三种不同类型的设置:

  • 群集范围的设置
    • 这些是适用于群集中所有内容的设置,例如所有节点或所有索引。
  • 节点设置
    • 这些设置仅适用于当前节点。
  • 索引设置
    • 这些设置仅适用于索引。

根据设置,它可以是:

  • 在运行时动态更改
  • 在重新启动(关闭/打开)索引后更改
    • 某些索引级设置不需要关闭和重新打开索引,但可能需要强制重新合并索引才能应用设置。
      • 索引的压缩级别是此类设置的示例。它可以动态更改,但只有新才能利用此更改。因此,如果索引不会更改,那么它永远不会利用更改,除非您强制索引重新创建其段。
  • 重新启动节点后更改
  • 重新启动群集后更改
  • 从未改变过

请务必查看您的Elasticsearch版本的文档,了解您可以或不可以对设置执行的操作。

我该如何应用设置?

您可以通过几种方式设置设置,其中一些不建议:

  • 命令行参数

在Elasticsearch 1.x和2.x中,您可以将大多数设置作为带有es.前缀的Java系统属性提交es.

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

在Elasticsearch 5.x中,此更改是为了避免使用Java系统属性,而是使用自定义参数类型, -E代替-Des.

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

当使用Puppet,Chef或Ansible等工具启动和停止集群时,这种应用设置的方法非常有用。但手动操作时效果很差。

  • YAML设置
    • 如示例所示
  • 动态设置
    • 如示例所示

应用设置的顺序是最动态的顺序:

  1. 瞬态设置
  2. 持久设置
  3. 命令行设置
  4. YAML(静态)设置

如果将设置设置为两次,则在任何一个级别设置一次,则最高级别生效。

Elasticsearch配置 相关例子