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
。
- 这可能是一个数组,它告诉 Elasticsearch 当前机器的哪些地址也要绑定套接字。
-
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 设置
- 如示例所示
- 动态设置
- 如示例所示
应用设置的顺序是最动态的顺序:
- 瞬态设置
- 持久设置
- 命令行设置
- YAML(静态)设置
如果将设置设置为两次,则在任何一个级别设置一次,则最高级别生效。