elasticsearch配置yaml中文教程

卡拉先生
发布于 2020年07月09日 | 上次编辑:2020年07月19日

Elasticsearch 的功能非常强大,但功能强大的同时也带来了一些负担,比如说它的配置就极其复杂。如果你没有深入地理解搜索引擎,或是对 Lucene 的理解不足,那么调整到一些配置可能会让你的 Elasticsearch 集群处于不健康状态,甚至无法正常工作。

因此,我们写了这篇教程,从零开始教你配置 Elasticsearch,同时指出一些注意事项,帮助你避免踩坑。

如果你希望可以避免过多的配置,省掉一些精力或开发和维护时间,同时又想给用户提供极致的搜索体验,可以考虑尝试卡拉搜索,免配置且速度 10 倍于 Elastic Search 本身

Elasticsearch 的 Yaml 配置文件位置

Elasticsearch 采用 YAML 文件对系统进行配置,原理很简单,你需要告诉 ES 在运行过程中一些你想要的参数。而 ES 会找到这个文件,然后开始按你指定的参数运行。

虽然 ES 本身做了很多优化,但如果你用默认配置,只能大概保证 ES 跑起来之后可以进行一些低吞吐量的简单操作。而如果你需要开始在生产环境下使用,那么了解和配置好 YAML 文件中的内容,还是非常必要的。

在 Elastic Search 中最主要的配置文件是 elasticsearch.yml。如果你的系统是 Linux 那么通常它位于 /etc/elasticsearch 这个文件夹下。但是不同的安装方法可能会让这个配置文件的路径不一样,比如说如果你是直接用 Ubuntu 的 apt-get 命令安装或者 yum 命令安装的,或是你直接从网站上把 ES 下载成一个压缩包然后直接解压,都会把 elasticsearch.yml 放在不同的位置。

Mac 下用 brew 安装后 elasticsearch.yml 的位置

在 Mac 下,如果你用 brew install elastaicsearch 安装的话,你的 elasticsearch.yml 会出现在 /usr/local/etc/elasticsearch/elasticsearch.yml 下。

直接解压 elasticsearch.yml 的位置

如果你在 Linux,Mac或者 Windows 下直接解压的 ElasaticSearch.zip 安装包的话,那么 elasticsearch.yml 的位置会在你解压的路径下的 config/ 这个文件夹里。

apt-getyum 安装的elasticsearch

如果你是用 Linux 系统依赖管理比如 Ubuntu 的 apt-getyum 安装的 elasticsearch的话,那么你的 elasticsearch.yml 会出现在文件夹 /etc/elasticsearch/elasticsearch.yml 内。

用 Docker 安装的 elasticsearch

如果你用的是 Docker 安装的 elasticsearch,那么你的 elasticsearch.yml 会出现在

举个例子,如果你是直接用 docker 安装的 ElasticSearch,那么你的 elasticsearch.yml 会比较复杂,需要你通过 mount 把本地文件系统上的 elasticsearch.yml 传到容器内。之后的文章里我们会讲。

如果你是默认用 elastic search 官方源 安装的话,那么在写这篇文章时,配置文件位于 docker 容器内的 /usr/share/elasticsearch

更改和配置 elasticsearch YAML 文件

对于绝大多数情况来说,我们在服务器上的 elasticsearch 都在 /usr/local/etc/elasticsearch 内。如果你的不在,请参考上一节先找到 elasticsearch.yml 的位置。

在找到配置文件的位置后,编辑就很简单了。用你最喜欢的编辑器,比如 vim 开始编辑即可:

sudo vim /etc/elasticsearch/elasticsearch.yml

请注意,多数情况下你需要 root 权限来更改 /etc 下的文件配置,所以这里需要用 sudo

这里我以在 docker 中安装的 elasticsearch 为例,但只要你能按上一节里的地址找到对应的 YAML 文件,那么操作起来是一样的。

首先我们确认 elasticsearch.yml 文件在文件夹中

ls -all -h
[root@25666824503b config]# ls -all -h
total 44K
drwxrwxr-x 1 elasticsearch root 4.0K Jul 10 04:03 .
drwxrwxr-x 1 elasticsearch root 4.0K Jun 14 19:40 ..
-rw-rw---- 1 elasticsearch root  199 Jul 10 04:03 elasticsearch.keystore
-rw-rw---- 1 elasticsearch root   53 Jun 14 19:39 elasticsearch.yml
-rw-rw---- 1 elasticsearch root 2.3K Jun 14 19:34 jvm.options
drwxrwxr-x 2 elasticsearch root 4.0K Jun 14 19:37 jvm.options.d
-rw-rw---- 1 elasticsearch root 7.7K Jun 14 19:39 log4j2.properties
-rw-rw---- 1 elasticsearch root  473 Jun 14 19:37 role_mapping.yml
-rw-rw---- 1 elasticsearch root  197 Jun 14 19:37 roles.yml
-rw-rw---- 1 elasticsearch root    0 Jun 14 19:37 users
-rw-rw---- 1 elasticsearch root    0 Jun 14 19:37 users_roles

可以看到这里的 elasticsearch.yml 文件。然后用你最喜欢的编辑器,开始编辑即可。这里我们用 vi

vi ./elasticsearch.yml

# 进入 vi

# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
#       Before you set out to tweak and tune the configuration, make sure you
#       understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please consult the documentation for further information on configuration options:
# https://www.elastic.co/guide/en/elasticsearch/reference/index.html
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
cluster.name: elasticsearch_eddiexie
#
以下省略...

可以看到,这里的 elasticsearch 配置内容 cluster.name

请注意 YAML 属性的写法。你可以把 YAML 想象成一个展平的 JSON 文件,比如说

{
    "user": {
        "name": "卡拉搜索"
    }
}

在 YAML 中就是从根到叶把结点串起来,中间有点连接。所以上面的配置在 YAML 中是 user.name: 卡拉搜索

这一节中,我们一步步过一遍配置 elasticsearch 集群时,从零到一有哪些重要的配置,并解释它们各有什么含义,为什么要这样配置。

第一步 配置集群名和结点名

集群名和结点名可以帮助你更好地标记错误信息,同时你也可以把公司名、产品名作为辨认符。默认的 elastic search 的集群名是 elasticsearch,而在搜索错误信息时不是很方便,因此建议改为 ABC_elasticsearch 其中 ABC 是你的公司名、产品名等。

. . .
cluster.name: "meituan_elasticsearch"
node.name: "node1"
. . .

第二步 配置结点类型

Elastic Search 中的结点有几种类型,其中最重要的是 Master,也即主结点。主结点如果没了,那这个集群也就运行不起来了。因此,默认的 Elastic Search 设置中,如果你只有一个结点且你不指定这个结点的类型,那这个节点的类型就是 Master。如果你只是在单机实验的话,不用管这个配置,默认是 node.master: true。如果你需要指定并将其设为非主结点,那么如下设为 false

. . .
node.master: false
. . .

第三步 配置数据存储位置

Elastic Search 的核心引擎是 Lucene,而 Lucene 需要把数据存在硬盘上。因此,你需要告诉 elastic search 你的数据要存在哪。请注意,存在哪还需要考虑如何备份,如果在 docker 中的话,还需要考虑如何加载本地地址映射到容器中。

. . .
path.data: /data/elasticsearch
. . .

第四步 设置分片数和冗余数

在分布式系统中,我们用分片(sharding)来进行横向扩展,用冗余(replicas)来保证数据可用性。在 Elastic Search 中,默认的分片数是 5,而默认的冗余数是 1。请注意,一旦设置好分片数,因为 ES 内部实现的原因,之后就不能再改,请提前计划好数据增长。

. . .
index.number_of_shards: 10
index.number_of_replicas: 2
. . .

YAML 中其它常见的配置有哪些

注意,默认的 elasticsearch 的安装会给出一个绝大多数配置被注释掉的 YAML 文件。我们来一起过一下有哪些比较重要的配置

集群和结点命名 cluster.name node.name

我们可以用 cluster.namenode.name 来给集群和节点一个名字。通常我会把集群名命名为一个有辨识度的名字,比如如果是美团的话,也许就是 meituan_elasticsearch。上面已经说过了

数据路径 path.data

# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
path.data: /usr/local/var/lib/elasticsearch/

这是最重要的一个配置。这里保存你所有的索引数据,而如果需要防止索引丢失的话,需要定时备份索引。上面也说过了。

bootstrap.memory_lock 启动时内存锁定

# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true

默认为 true 即开启。这个选项控制 Elastic Search 是否可以在启动时就把内存占住。请注意 Elastic Search 可以非常消耗内存,而官方文档推荐至少用一半的服务器内存用来分配给 ES 所在的内存的堆中。

network.host 和 http.port 网络设置

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1
#
# Set a custom port for HTTP:
#
#http.port: 9200

默认的节点 IP 地址和端口,默认为 9200

其它更多配置

上面我们列出来的配置都是 Elastic Search 中最基本的一些配置。如果你需要开始调整 Elastic Search 的性能,那么你需要开始了解 Elastic Search 本身,甚至 Lucene 本身。同时学习一些搜索引擎的基础概念也是必要的(比如倒排索引)。同时你还需要开始调整 JVM 设置来优化 ES 的性能。

比如说,如果你的文件编码在你的业务中有特殊需求,也许你甚至需要在 Lucene 层写特殊的 Codec 文件编码。而如果你需要特别的排序方式,你可能也需要直接改动 Lucene 层的设置或代码。Elastic Search 一方面提供了强大的工具,另一方面要用熟也需要相当强劲的计算机和工程背景。

关于 Lucene 层和 Elastic Search 的其它配置,请参阅官方文档和代码。

Elastic Search 配置官方文档

Elastic Search 源码

总结

本文中我们详述了如何更改 Elastic Search 的配置,同时也把默认配置过了一遍。我们展示了各种不同安装方式下 elasticsearch.yml 的位置,希望可以帮到大家。如果你有博客,对 ES 也感兴趣,也欢迎你链到我们的文章,让更多人看到,帮到大家。

相关文章

© 2020, 卡拉搜索, Built with ❤️ in San Francisco + Beijing

京ICP备15049164号-3