设置 Elasticsearch

本节包含有关如何设置 Elasticsearch 并使其运行的信息,包括:

  • 下载
  • 安装
  • 开始
  • 配置

支持的平台

官方支持的操作系统和 JVM矩阵可在此处获得: 支持矩阵。Elasticsearch 在列出的平台上进行了测试,但它也有可能在其他平台上运行。

Java (JVM) 版本

Elasticsearch 使用 Java 构建,并在每个发行版中包含来自 JDK 维护者 (GPLv2+CE)的OpenJDK捆绑版本 。捆绑的 JVM 是推荐的 JVM,位于jdkElasticsearch 主目录的目录中。

要使用您自己的 Java 版本,请设置JAVA_HOME环境变量。如果您必须使用与捆绑的 JVM 不同的 Java 版本,我们建议使用受支持的 LTS 版本的 Java。如果使用已知错误的 Java 版本,Elasticsearch 将拒绝启动。使用您自己的 JVM 时,可能会删除捆绑的 JVM 目录。

安装 Elasticsearch

托管 Elasticsearch

您可以在自己的硬件上运行 Elasticsearch,或者使用我们 在 Elastic Cloud 上托管的 Elasticsearch 服务。Elasticsearch Service 可在 AWS 和 GCP 上使用。 免费试用 Elasticsearch 服务。

自己安装 Elasticsearch

Elasticsearch 以以下包格式提供:

Linux 和 MacOStar.gz档案

这些tar.gz档案可用于安装在任何 Linux 发行版和 MacOS 上。

在 Linux 或 MacOS 上从存档安装 Elasticsearch

Elasticsearch 作为.tar.gzLinux 和 MacOS的存档。

此软件包可在 Elastic 许可下免费使用。它包含开源和免费商业功能以及对付费商业功能的访问。 开始 30 天试用以试用所有付费商业功能。有关弹性许可证级别的信息,请参阅 订阅页面。

可以在下载 Elasticsearch页面上找到 Elasticsearch 的最新稳定版本 。其他版本可以在过去的版本页面上找到 。

下载并安装适用于 Linux 的存档

Elasticsearch v7.10.2 的 Linux 存档可以按如下方式下载和安装:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.10.2-linux-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.10.2-linux-x86_64.tar.gz
cd elasticsearch-7.10.2/ 

下载并安装适用于 MacOS 的存档

Elasticsearch v7.10.2 的 MacOS 存档可以按如下方式下载和安装:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-darwin-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-darwin-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.10.2-darwin-x86_64.tar.gz.sha512 
tar -xzf elasticsearch-7.10.2-darwin-x86_64.tar.gz
cd elasticsearch-7.10.2/ 

启用系统索引的自动创建

一些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,不需要额外的步骤。但是,如果你有Elasticsearch禁用自动创建索引,您必须配置 action.auto_create_index在elasticsearch.yml允许商业功能创建以下指标:

action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*

从命令行运行 Elasticsearch

Elasticsearch 可以从命令行启动,如下所示:

./bin/elasticsearch

如果您对 Elasticsearch 密钥库进行了密码保护,系统将提示您输入密钥库的密码。有关详细信息,请参阅安全设置。

默认情况下,Elasticsearch 在前台运行,将其日志打印到标准输出 ( stdout),并且可以通过按 停止Ctrl-C。

检查 Elasticsearch 是否正在运行

您可以测试你的Elasticsearch节点通过发送一个HTTP请求的端口上运行9200上localhost:

GET /

这应该会给你这样的回应:

{
  "name" : "Cp8oag6",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AT69_T_DTp-1qgIJlatQqA",
  "version" : {
    "number" : "7.10.2",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "f27399d",
    "build_date" : "2016-03-30T09:51:41.449Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "1.2.3",
    "minimum_index_compatibility_version" : "1.2.3"
  },
  "tagline" : "You Know, for Search"
}

stdout可以使用 命令行上的-qor–quiet选项禁用日志打印。

作为守护进程运行

要将 Elasticsearch 作为守护进程运行,请-d在命令行中指定,并使用以下-p选项将进程 ID 记录在文件中:

./bin/elasticsearch -d -p pid

如果您对 Elasticsearch 密钥库进行了密码保护,系统将提示您输入密钥库的密码。有关详细信息,请参阅安全设置。

日志消息可以在$ES_HOME/logs/目录中找到。

要关闭 Elasticsearch,请终止pid文件中记录的进程 ID :

pkill -F pid

在命令行上配置 Elasticsearch

$ES_HOME/config/elasticsearch.yml 默认情况下,Elasticsearch 从文件中加载其配置。此配置文件的格式在配置 Elasticsearch 中进行了说明 。

可以在配置文件中指定的任何设置也可以在命令行中指定,使用-E如下语法:

./bin/elasticsearch -d -Ecluster.name=my_cluster -Enode.name=node_1

档案目录布局

归档分发是完全独立的。默认情况下,所有文件和目录都包含在$ES_HOME 解压缩档案时创建的目录中。

这非常方便,因为您无需创建任何目录即可开始使用 Elasticsearch,卸载 Elasticsearch 就像删除$ES_HOME目录一样简单。但是,建议更改配置目录、数据目录和日志目录的默认位置,以免以后删除重要数据。

类型 描述 默认位置 环境
home Elasticsearch 主目录或 $ES_HOME 通过解压存档创建的目录
bin 二进制脚本,包括elasticsearch启动节点和elasticsearch-plugin安装插件 $ES_HOME/bin
conf 配置文件包括 elasticsearch.yml $ES_HOME/config ES_PATH_CONF
data 节点上分配的每个索引/分片的数据文件的位置。可以容纳多个位置。 $ES_HOME/data path.data
logs 日志文件位置。 $ES_HOME/logs path.logs
plugins 插件文件位置。每个插件都将包含在一个子目录中。 $ES_HOME/plugins
repo 共享文件系统存储库位置。可以容纳多个位置。文件系统存储库可以放置在此处指定的任何目录的任何子目录中。 未配置 path.repo

下一步

您现在已经设置了一个测试 Elasticsearch 环境。在开始认真的开发或使用 Elasticsearch 投入生产之前,您必须进行一些额外的设置:

  • 了解如何配置 Elasticsearch。
  • 配置重要的 Elasticsearch 设置。
  • 配置重要的系统设置。

使用 Docker 安装 Elasticsearch

Elasticsearch 也可以作为 Docker 镜像使用。镜像使用centos:8作为基础镜像。

www.docker.elastic.co上提供了所有已发布的 Docker 映像和标签的 列表。源文件位于 Github 中。

这些图像可在 Elastic 许可下免费使用。它们包含开源和免费商业功能以及对付费商业功能的访问。 开始 30 天试用以试用所有付费商业功能。有关弹性许可证级别的信息,请参阅 订阅页面。

拉取图像

获取 Elasticsearch for Docker 就像docker pull对 Elastic Docker 注册表发出命令一样简单。

docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2

或者,您可以下载仅包含 Apache 2.0 许可下可用功能的其他 Docker 映像。要下载图像,请访问 www.docker.elastic.co

使用 Docker 启动单节点集群

要启动单节点 Elasticsearch 集群进行开发或测试,请指定 单节点发现以绕过引导检查:

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.2

使用 Docker Compose 启动多节点集群

要在 Docker 中启动并运行三节点 Elasticsearch 集群,您可以使用 Docker Compose:

  1. 创建一个docker-compose.yml文件:
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge

这个示例 Docker Compose 文件启动了一个三节点 Elasticsearch 集群。节点es01上侦听localhost:9200,并es02和es03交谈es01过泊坞网络。

请注意,此配置在所有网络接口上公开端口 9200,并且考虑到 Dockeriptables在 Linux 上的操作方式,这意味着您的 Elasticsearch 集群可以公开访问,可能会忽略任何防火墙设置。如果您不想公开端口 9200 而是使用反向代理,请在 docker-compose.yml 文件中替换9200:9200为127.0.0.1:9200:9200。Elasticsearch 将只能从主机本身访问。

该 泊坞命名卷 data01,data02以及data03节点数据目录存储如此跨重启的数据依然存在。如果它们尚不存在,请docker-compose在启动集群时创建它们。

  1. 确保为 Docker 引擎分配了至少 4GiB 的内存。在 Docker Desktop 中,您可以在 Preference (macOS) 或 Settings (Windows) 的 Advanced 选项卡上配置资源使用情况。

  2. 运行docker-compose以启动集群:

docker-compose up
  1. 提交_cat/nodes请求以查看节点是否已启动并正在运行:
curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"

日志消息进入控制台并由配置的 Docker 日志驱动程序处理。默认情况下,您可以使用docker logs.

要停止集群,请运行docker-compose down. Docker 卷中的数据会在您使用docker-compose up. 要在关闭集群时删除数据卷,请指定-v选项:docker-compose down -v。

启动启用 TLS 的多节点集群

请参阅在 Elasticsearch Docker 容器中加密通信和 在启用 TLS 的 Docker 中运行 Elastic Stack。

在生产环境中使用 Docker 镜像

在生产环境中在 Docker 中运行 Elasticsearch 时适用以下要求和建议。

设置vm.max_map_count为至少262144

该vm.max_map_count内核设置必须至少设置为262144用于生产。

如何设置vm.max_map_count取决于您的平台:

  • Linux

该vm.max_map_count设置应永久设置在/etc/sysctl.conf:

grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144

要在实时系统上应用设置,请运行:

sysctl -w vm.max_map_count=262144
  • macOS 与 Docker for Mac

该vm.max_map_count设置必须在 xhyve 虚拟机中设置:

  1. 从命令行运行:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
  1. 按回车并使用sysctl进行配置vm.max_map_count:
sysctl -w vm.max_map_count=262144
  1. 要退出screen会话,请键入Ctrl a d。
  • 带有Docker 桌面的Windows 和 macOS

该vm.max_map_count设置必须通过 docker-machine 进行设置:

docker-machine ssh
sudo sysctl -w vm.max_map_count=262144
  • 带有Docker Desktop WSL 2 后端的Windows
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
配置文件必须是elasticsearch用户可读的

默认情况下,Elasticsearchelasticsearch使用 uid:gid以用户身份在容器内运行1000:0。

如果要绑定挂载本地目录或文件,则elasticsearch用户必须可以读取它。此外,此用户必须具有对数据和日志目录的写入权限。一个好的策略是授予组访问0本地目录的gid 的权限。

例如,通过绑定挂载准备一个本地目录来存储数据:

mkdir esdatadir
chmod g+rwx esdatadir
chgrp 0 esdatadir

作为最后的手段,您可以强制容器通过环境变量改变用于数据和日志目录的任何绑定挂载的所有权TAKE_FILE_OWNERSHIP。当您执行此操作时,它们将归 uid:gid 所有1000:0,它提供对 Elasticsearch 进程所需的读/写访问权限。

增加 nofile 和 nproc 的 ulimit

增加的nofile和nproc 的 ulimit 必须可用于 Elasticsearch 容器。验证 Docker 守护程序的初始化系统将它们设置为可接受的值。

要检查 ulimits 的 Docker 守护程序默认值,请运行:

docker run --rm centos:8 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

如果需要,在守护进程中调整它们或在每个容器中覆盖它们。例如,当使用 时docker run,设置:

--ulimit nofile=65535:65535
禁用交换

为了性能和节点稳定性,需要禁用交换。有关执行此操作的方法的信息,请参阅禁用交换。

如果您选择该bootstrap.memory_lock: true方法,您还需要memlock: true在Docker Daemon 中定义ulimit ,或者为容器显式设置,如 示例 compose 文件中所示。使用时docker run,您可以指定:

-e “bootstrap.memory_lock=true” --ulimit memlock=-1:-1

随机发布端口

该映像公开了 TCP 端口 9200 和 9300。对于生产集群,–publish-all建议使用随机发布的端口,除非您为每个主机固定一个容器。

设置堆大小

要配置堆大小,您可以绑定挂载一个JVM 选项 文件/usr/share/elasticsearch/config/jvm.options.d,其中包含您所需的堆大小设置。请注意,虽然默认根 jvm.options文件设置了 1 GB 的默认堆,但您在绑定安装的 JVM 选项文件中设置的任何值都将覆盖它。

虽然通过绑定安装的 JVM 选项设置堆大小是推荐的方法,但您也可以通过使用ES_JAVA_OPTS环境变量来设置堆大小来配置它。例如,使用16 GB,指定 -e ES_JAVA_OPTS="-Xms16g -Xmx16g"用docker run。请注意,虽然默认根jvm.options文件设置了 1 GB 的默认堆,但您设置的任何值都ES_JAVA_OPTS将覆盖它。docker-compose.yml上面的文件将堆大小设置为 512 MB。

将部署固定到特定的映像版本

将您的部署固定到特定版本的 Elasticsearch Docker 映像。例如docker.elastic.co/elasticsearch/elasticsearch:7.10.2.

始终绑定数据卷

您应该使用绑定的卷,/usr/share/elasticsearch/data原因如下:

  1. 如果容器被杀死,您的 Elasticsearch 节点的数据不会丢失
  2. Elasticsearch 对 I/O 敏感,Docker 存储驱动程序不适合快速 I/O
  3. 它允许使用高级 Docker 卷插件
避免使用loop-lvm模式

如果您使用的是 devicemapper 存储驱动程序,请不要使用默认loop-lvm模式。配置 docker-engine 以使用 direct-lvm。

集中您的日志

考虑使用不同的日志记录驱动程序来集中您的日志 。另请注意,默认的 json 文件日志记录驱动程序并不适合生产使用。

使用 Docker 配置 Elasticsearch

在 Docker 中运行时,Elasticsearch 配置文件从 /usr/share/elasticsearch/config/.

要使用自定义配置文件,请将文件绑定挂载 到映像中的配置文件上。

您可以使用 Docker 环境变量设置单独的 Elasticsearch 配置参数。该样品撰写文件和 单节点例如使用此方法。

要使用文件的内容来设置环境变量,请在环境变量名称后加上_FILE. 这对于将密码等秘密传递给 Elasticsearch 而不直接指定它们很有用。

例如,要从文件中设置 Elasticsearch 引导密码,您可以绑定挂载文件并将ELASTIC_PASSWORD_FILE环境变量设置为挂载位置。如果将密码文件挂载到/run/secrets/bootstrapPassword.txt,请指定:

-e ELASTIC_PASSWORD_FILE=/run/secrets/bootstrapPassword.txt

您还可以覆盖图像的默认命令以将 Elasticsearch 配置参数作为命令行选项传递。例如:

docker run <various parameters> bin/elasticsearch -Ecluster.name=mynewclustername

虽然绑定挂载您的配置文件通常是生产中的首选方法,但您也可以创建 包含您的配置的自定义 Docker 映像。

挂载 Elasticsearch 配置文件

创建自定义配置文件并将它们绑定挂载到 Docker 映像中的相应文件上。例如,结合贴装custom_elasticsearch.yml用docker run,指定:

-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

挂载 Elasticsearch 密钥库
默认情况下,Elasticsearch 将自动生成密钥库文件以进行安全设置。此文件经过混淆但未加密。如果您想使用密码加密您的 安全设置,您必须使用该 elasticsearch-keystore实用程序创建一个受密码保护的密钥库并将其绑定挂载到容器上作为 /usr/share/elasticsearch/config/elasticsearch.keystore. 为了在启动时为 Docker 容器提供密码,请将 Docker 环境值设置KEYSTORE_PASSWORD为您的密码值。例如,一个docker
run命令可能有以下选项:

-v full_path_to/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
-E KEYSTORE_PASSWORD=mypassword
使用自定义 Docker 镜像

在某些环境中,准备包含您的配置的自定义映像可能更有意义。ADockerfile实现这一点可能很简单:

FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.2
COPY --chown=elasticsearch:elasticsearch elasticsearch.yml /usr/share/elasticsearch/config/

然后,您可以使用以下命令构建和运行映像:

docker build --tag=elasticsearch-custom .
docker run -ti -v /usr/share/elasticsearch/data elasticsearch-custom

一些插件需要额外的安全权限。您必须通过以下方式明确接受它们:

  • tty在运行 Docker 映像时 附加 a并在提示时允许权限。
  • 通过将–batch标志添加到插件安装命令来检查安全权限并接受它们(如果合适)。

有关 更多信息,请参阅插件管理。

下一步

您现在已经设置了一个测试 Elasticsearch 环境。在开始认真的开发或使用 Elasticsearch 投入生产之前,您必须进行一些额外的设置:

  • 了解如何配置 Elasticsearch。
  • 配置重要的 Elasticsearch 设置。
  • 配置重要的系统设置。