Elasticsearch 配置

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 系统属性:

$ 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(静态)设置

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