安装 Elasticsearch

edit

托管的Elasticsearch服务

edit

Elastic Cloud 提供 Elasticsearch、Kibana 以及 Elastic 的可观测性、企业搜索和 Elastic 安全解决方案的所有功能,作为托管服务在 AWS、GCP 和 Azure 上可用。

要在 Elastic Cloud 中设置 Elasticsearch,请注册一个 免费 Elastic Cloud 试用版

自托管 Elasticsearch 选项

edit

如果你想自己安装和管理 Elasticsearch,你可以:

要在自己的机器上尝试使用 Elasticsearch,我们建议使用 Docker 并同时运行 Elasticsearch 和 Kibana。更多信息,请参阅 本地运行 Elasticsearch。请注意,此设置不适用于生产环境

Elasticsearch 安装包

edit

Elasticsearch 以下列包格式提供:

Linux 和 MacOS tar.gz 存档

tar.gz 存档适用于在任何 Linux 发行版和 MacOS 上安装。

从存档在 Linux 或 MacOS 上安装 Elasticsearch

Windows .zip 压缩包

zip 归档文件适用于在 Windows 上安装。

在 Windows 上使用 .zip 安装 Elasticsearch

deb

deb 包适用于 Debian、Ubuntu 和其他基于 Debian 的系统。Debian 包可以从 Elasticsearch 网站或我们的 Debian 仓库下载。

使用 Debian 包安装 Elasticsearch

rpm

rpm 包适用于在 Red Hat、Centos、SLES、OpenSuSE 和其他基于 RPM 的系统上安装。RPM 可以从 Elasticsearch 网站或我们的 RPM 仓库下载。

使用 RPM 安装 Elasticsearch

有关在本地环境中逐步设置Elastic Stack的示例,请尝试我们的教程:安装自管理的Elastic Stack

Elasticsearch 容器镜像

edit

您也可以在容器镜像中运行 Elasticsearch。

docker

可以从 Elastic Docker 注册表下载 Docker 容器镜像。

使用 Docker 安装 Elasticsearch

Java (JVM) 版本

edit

Elasticsearch 是使用 Java 构建的,并且在每个发行版中都包含一个捆绑版本的 OpenJDK。我们强烈建议在所有 Elasticsearch 安装中使用捆绑的 JVM。

捆绑的JVM在支持和维护方面被视为Elasticsearch的任何其他依赖项。这意味着Elastic负责保持其最新状态,并在必要时对安全问题和错误报告做出反应,以解决Elasticsearch中的漏洞和其他错误。Elastic对捆绑JVM的支持受Elastic的支持政策生命周期结束时间表的约束,并且独立于JVM原始供应商提供的支持政策和生命周期结束时间表。Elastic不支持将捆绑的JVM用于运行Elasticsearch以外的目的。

Elasticsearch 仅使用 JVM 提供功能的一个子集。捆绑的 JVM 中的错误和安全问题通常与 Elasticsearch 不使用的功能有关。这些问题不适用于 Elasticsearch。Elastic 分析其所有依赖项(包括捆绑的 JVM)中的安全漏洞报告,并在需要时发布 Elastic 安全公告

如果您决定使用与捆绑版本不同的Java版本来运行Elasticsearch,建议使用最新的Java的LTS版本,该版本在支持矩阵中列出。尽管这种配置是受支持的,但如果您在使用所选JVM时遇到安全问题或其他错误,Elastic可能无法提供帮助,除非该问题也存在于捆绑的JVM中。在这种情况下,您必须直接向所选JVM的供应商寻求帮助。您还必须负责对所选JVM供应商发布的安全和错误公告做出反应。如果使用非捆绑的JVM,Elasticsearch可能无法最佳运行。Elasticsearch与某些OpenJDK特定功能紧密耦合,因此可能无法在非OpenJDK的JVM上正常工作。如果您尝试使用已知的错误JVM版本,Elasticsearch将拒绝启动。

要使用您自己的 Java 版本,请将 ES_JAVA_HOME 环境变量设置为您自己的 JVM 安装路径。捆绑的 JVM 位于 Elasticsearch 主目录的 jdk 子目录中。如果使用您自己的 JVM,可以删除此目录。

JVM 和 Java 代理

edit

不要使用附加到JVM的第三方Java代理。这些代理可能会降低Elasticsearch的性能,包括导致节点冻结或崩溃。

在Linux或MacOS上从归档文件安装Elasticsearch

edit

Elasticsearch 可作为适用于 Linux 和 MacOS 的 .tar.gz 归档文件使用。

此包包含免费和订阅功能。 开始30天试用以尝试所有功能。

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

Elasticsearch 包含一个捆绑版本的 OpenJDK 来自 JDK 维护者 (GPLv2+CE)。要使用您自己的 Java 版本, 请参阅 JVM 版本要求

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

edit

Elasticsearch 的 9.0.0-beta1 版本尚未发布。存档可能不可用。

Elasticsearch v9.0.0-beta1 的 Linux 归档文件可以按如下方式下载和安装:

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

比较下载的 .tar.gz 归档文件的 SHA 和已发布的校验和,输出应为 elasticsearch-{version}-linux-x86_64.tar.gz: OK

此目录被称为 $ES_HOME

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

edit

Elasticsearch 9.0.0-beta1 版本尚未发布。该存档可能不可用。

macOS Gatekeeper 警告

苹果公司推出的更严格的公证要求影响了9.0.0-beta1 Elasticsearch 工件的公证。如果您在首次运行 Elasticsearch 时 macOS 显示一个中断对话框,那么您需要采取行动以允许其运行。

要防止对 Elasticsearch 文件进行 Gatekeeper 检查,请在下载的 .tar.gz 存档或解压到的目录上运行以下命令:

xattr -d -r com.apple.quarantine <archive-or-directory>

或者,您可以按照在您的 Mac 上安全地打开应用程序中的如果您想打开一个尚未公证或来自未识别开发者的应用程序部分的说明,添加安全覆盖。

Elasticsearch v9.0.0-beta1 的 MacOS 归档文件可以按如下方式下载和安装:

curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-darwin-x86_64.tar.gz
curl https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-darwin-x86_64.tar.gz.sha512 | shasum -a 512 -c - 
tar -xzf elasticsearch-9.0.0-beta1-darwin-x86_64.tar.gz
cd elasticsearch-9.0.0-beta1/ 

比较下载的 .tar.gz 归档文件的 SHA 和已发布的校验和,输出应为 elasticsearch-{version}-darwin-x86_64.tar.gz: OK

此目录被称为 $ES_HOME

启用系统索引的自动创建

edit

一些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,无需额外步骤。然而,如果您在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:

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

如果您正在使用 LogstashBeats,那么您很可能需要在您的 action.auto_create_index 设置中使用额外的索引名称,并且 确切的值将取决于您的本地配置。如果您不确定适合您环境的正确值,您可以考虑将值设置为 *,这将允许自动创建所有索引。

从命令行运行 Elasticsearch

edit

运行以下命令以从命令行启动 Elasticsearch:

./bin/elasticsearch

当首次启动 Elasticsearch 时,安全功能默认情况下是启用并配置好的。以下安全配置会自动发生:

  • 已启用身份验证和授权,并为内置超级用户elastic生成了密码。
  • 为传输层和HTTP层生成了TLS的证书和密钥,并使用这些密钥和证书启用了TLS并进行了配置。
  • 为Kibana生成了一个注册令牌,该令牌有效期为30分钟。

用户elastic的密码和Kibana的注册令牌会输出到您的终端。

我们建议将 elastic 密码存储为 shell 中的环境变量。示例:

export ELASTIC_PASSWORD="your_password"

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

默认情况下,Elasticsearch 将其日志打印到控制台(stdout)以及 日志目录中的 .log 文件。Elasticsearch 在启动时会记录一些信息,但在完成初始化后,它将继续在前台运行,并且不会进一步记录任何内容,直到发生值得记录的事情。当 Elasticsearch 运行时,您可以通过其 HTTP 接口与其交互,默认情况下该接口位于端口 9200 上。

要停止 Elasticsearch,请按 Ctrl-C

所有与 Elasticsearch 打包在一起的脚本都需要一个支持数组的 Bash 版本,并假设 Bash 位于 /bin/bash。因此,Bash 应该直接或通过符号链接在此路径上可用。

在现有集群中注册节点

edit

当Elasticsearch首次启动时,安全自动配置过程将HTTP层绑定到0.0.0.0,但仅将传输层绑定到localhost。这种预期行为确保您可以在默认情况下启用安全性的情况下启动单节点集群,而无需任何额外配置。

在注册新节点之前,通常需要在生产集群中执行一些额外操作,例如绑定到除 localhost 以外的地址或满足引导检查。在此期间,自动生成的注册令牌可能会过期,这就是为什么注册令牌不会自动生成的原因。

此外,只有位于同一主机上的节点可以在无需额外配置的情况下加入集群。如果您希望来自其他主机的节点加入您的集群,您需要将transport.host设置为支持的值(例如取消注释建议的0.0.0.0值),或绑定到其他主机可以访问的接口的IP地址。更多信息请参阅传输设置

要在集群中注册新节点,请在集群中的任何现有节点上使用elasticsearch-create-enrollment-token工具创建一个注册令牌。然后,您可以使用--enrollment-token参数启动一个新节点,使其加入现有集群。

  1. 在运行 Elasticsearch 的终端之外,导航到您安装 Elasticsearch 的目录,并运行 elasticsearch-create-enrollment-token 工具以生成新节点的注册令牌。

    bin/elasticsearch-create-enrollment-token -s node

    复制注册令牌,您将使用该令牌在您的 Elasticsearch 集群中注册新节点。

  2. 从您的新节点的安装目录中,启动 Elasticsearch 并使用 --enrollment-token 参数传递注册令牌。

    bin/elasticsearch --enrollment-token 

    Elasticsearch 会自动在以下目录中生成证书和密钥:

    config/certs
  3. 重复上一步,以注册您想要加入的任何新节点。

检查 Elasticsearch 是否正在运行

edit

您可以通过向localhost9200端口发送HTTPS请求来测试您的Elasticsearch节点是否正在运行:

curl --cacert $ES_HOME/config/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 

确保在调用中使用https,否则请求将失败。

--cacert
生成的用于HTTP层的http_ca.crt证书的路径。

调用返回的响应如下:

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

日志打印到 stdout 可以通过命令行中的 -q--quiet 选项禁用。

作为守护进程运行

edit

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

./bin/elasticsearch -d -p pid

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

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

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

pkill -F pid

Elasticsearch 的 .tar.gz 包不包含 systemd 模块。要 将 Elasticsearch 作为服务管理,请使用 DebianRPM 包。

在命令行上配置 Elasticsearch

edit

Elasticsearch 默认从 $ES_HOME/config/elasticsearch.yml 文件加载其配置。该配置文件的格式在 配置 Elasticsearch 中进行了解释。

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

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

通常,任何集群范围的设置(如 cluster.name)都应该添加到 elasticsearch.yml 配置文件中,而任何节点特定的设置,例如 node.name,可以在命令行上指定。

连接客户端到 Elasticsearch

edit

当您首次启动 Elasticsearch 时,TLS 会自动为 HTTP 层配置。CA 证书会生成并存储在磁盘上的以下位置:

$ES_HOME/config/certs/http_ca.crt

此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,例如 Elasticsearch 客户端、 Beats、独立的 Elastic Agents 和 Logstash,都必须验证它们信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agents 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。

如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将CA证书复制到您的机器并配置您的客户端以使用它。

使用CA指纹
edit

复制Elasticsearch启动时输出到终端的指纹值,并配置您的客户端使用此指纹在连接到Elasticsearch时建立信任。

如果自动配置过程已经完成,您仍然可以通过运行以下命令获取安全证书的指纹。路径是HTTP层自动生成的CA证书的路径。

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。 issuer 应为 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
使用 CA 证书
edit

如果您的库不支持验证指纹的方法,则自动生成的CA证书将创建在每个Elasticsearch节点上的以下目录中:

$ES_HOME/config/certs/http_ca.crt

http_ca.crt 文件复制到您的机器,并配置您的客户端使用此证书在连接到 Elasticsearch 时建立信任。

存档的目录布局

edit

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

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

Type Description Default Location Setting

首页

Elasticsearch 主目录或 $ES_HOME

通过解压存档创建的目录

bin

包括用于启动节点的 elasticsearch 二进制脚本和用于安装插件的 elasticsearch-plugin

$ES_HOME/bin

配置

配置文件包括 elasticsearch.yml

$ES_HOME/config

ES_PATH_CONF

配置

为传输层和HTTP层生成了TLS密钥和证书。

$ES_HOME/config/certs

数据

每个索引/分片分配在节点上的数据文件的位置。

$ES_HOME/data

path.data

日志

日志文件位置。

$ES_HOME/logs

path.logs

插件

插件文件位置。每个插件将包含在一个子目录中。

$ES_HOME/plugins

仓库

共享文件系统仓库位置。可以包含多个位置。文件系统仓库可以放置在任何在此处指定的目录的子目录中。

未配置

path.repo

安全证书和密钥

edit

当您安装 Elasticsearch 时,以下证书和密钥会在 Elasticsearch 配置目录中生成,这些证书和密钥用于将 Kibana 实例连接到您的安全 Elasticsearch 集群并加密节点间通信。此处列出这些文件以供参考。

http_ca.crt
用于签署此Elasticsearch集群HTTP层证书的CA证书。
http.p12
包含此节点的HTTP层密钥和证书的密钥库。
transport.p12
包含用于集群中所有节点的传输层的密钥和证书的密钥库。

http.p12transport.p12 是受密码保护的 PKCS#12 密钥库。Elasticsearch 将这些密钥库的密码存储为 安全设置。要检索密码以便您可以检查或更改密钥库内容,请使用 bin/elasticsearch-keystore 工具。

使用以下命令来检索http.p12的密码:

bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

使用以下命令来检索transport.p12的密码:

bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

下一步

edit

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

在 Windows 上使用 .zip 安装 Elasticsearch

edit

Elasticsearch 可以通过 Windows 的 .zip 压缩包安装在 Windows 上。它附带了一个 elasticsearch-service.bat 命令,该命令将设置 Elasticsearch 作为服务运行。

此包包含免费和订阅功能。 开始30天试用以尝试所有功能。

在 Windows 上,Elasticsearch 的机器学习功能需要 Microsoft Universal C Runtime 库。这个库已经内置于 Windows 10、Windows Server 2016 以及更新的 Windows 版本中。对于较旧的 Windows 版本,可以通过 Windows Update 安装,或者从 单独下载。如果你无法安装 Microsoft Universal C Runtime 库,你仍然可以使用 Elasticsearch 的其他功能,只需禁用机器学习功能即可。

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

Elasticsearch 包含一个捆绑版本的 OpenJDK 来自 JDK 维护者 (GPLv2+CE)。要使用您自己的 Java 版本, 请参阅 JVM 版本要求

下载并安装.zip

edit

Elasticsearch 9.0.0-beta1 版本尚未发布。该存档可能不可用。

从以下链接下载 Elasticsearch 9.0.0-beta1 的 .zip 归档文件:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-windows-x86_64.zip

使用您喜欢的解压工具解压它。这将创建一个名为 elasticsearch-9.0.0-beta1 的文件夹,我们将其称为 %ES_HOME%。在终端窗口中,cd%ES_HOME% 目录,例如:

cd C:\Program Files\elasticsearch-9.0.0-beta1

启用系统索引的自动创建

edit

一些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,无需额外步骤。然而,如果您在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:

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

如果您正在使用 LogstashBeats,那么您很可能需要在您的 action.auto_create_index 设置中使用额外的索引名称,并且 确切的值将取决于您的本地配置。如果您不确定适合您环境的正确值,您可以考虑将值设置为 *,这将允许自动创建所有索引。

从命令行运行 Elasticsearch

edit

运行以下命令以从命令行启动 Elasticsearch:

.\bin\elasticsearch.bat

当首次启动 Elasticsearch 时,安全功能默认情况下是启用并配置好的。以下安全配置会自动发生:

  • 身份验证和授权已启用,并为内置超级用户elastic生成了密码。
  • 为传输层和HTTP层生成了TLS的证书和密钥,并使用这些密钥和证书启用了TLS并进行了配置。
  • 为Kibana生成了一个注册令牌,该令牌有效期为30分钟。

用户elastic的密码和Kibana的注册令牌会输出到您的终端。

我们建议将 elastic 密码存储为 shell 中的环境变量。示例:

$ELASTIC_PASSWORD = "your_password"

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

默认情况下,Elasticsearch 将其日志打印到控制台(STDOUT)以及 日志目录中的 <集群名称>.log 文件。Elasticsearch 在启动时会记录一些信息,但在完成初始化后,它将继续在前台运行,并且不会记录更多内容,直到发生值得记录的事情。当 Elasticsearch 运行时,您可以通过其 HTTP 接口与其交互,默认情况下该接口位于端口 9200 上。

要停止 Elasticsearch,请按 Ctrl-C

在现有集群中注册节点

edit

当Elasticsearch首次启动时,安全自动配置过程将HTTP层绑定到0.0.0.0,但仅将传输层绑定到localhost。这种预期行为确保您可以在默认情况下启用安全性的情况下启动单节点集群,而无需任何额外配置。

在注册新节点之前,通常需要在生产集群中执行一些额外操作,例如绑定到除 localhost 以外的地址或满足引导检查。在此期间,自动生成的注册令牌可能会过期,这就是为什么注册令牌不会自动生成的原因。

此外,只有位于同一主机上的节点可以在无需额外配置的情况下加入集群。如果您希望来自其他主机的节点加入您的集群,您需要将transport.host设置为支持的值(例如取消注释建议的0.0.0.0值),或绑定到其他主机可以访问的接口的IP地址。更多信息请参阅传输设置

要在集群中注册新节点,请在集群中的任何现有节点上使用elasticsearch-create-enrollment-token工具创建一个注册令牌。然后,您可以使用--enrollment-token参数启动一个新节点,使其加入现有集群。

  1. 在运行 Elasticsearch 的终端之外,导航到您安装 Elasticsearch 的目录,并运行 elasticsearch-create-enrollment-token 工具以生成新节点的注册令牌。

    bin\elasticsearch-create-enrollment-token -s node

    复制注册令牌,您将使用该令牌在您的 Elasticsearch 集群中注册新节点。

  2. 从您的新节点的安装目录中,启动 Elasticsearch 并使用 --enrollment-token 参数传递注册令牌。

    bin\elasticsearch --enrollment-token 

    Elasticsearch 会自动在以下目录中生成证书和密钥:

    config\certs
  3. 重复上一步,以注册您想要加入的任何新节点。

在命令行上配置 Elasticsearch

edit

Elasticsearch 默认从 %ES_HOME%\config\elasticsearch.yml 文件加载其配置。该配置文件的格式在 配置 Elasticsearch 中进行了解释。

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

.\bin\elasticsearch.bat -Ecluster.name=my_cluster -Enode.name=node_1

包含空格的值必须用引号括起来。例如 -Epath.logs="C:\My Logs\logs"

通常,任何集群范围的设置(如 cluster.name)都应该添加到 elasticsearch.yml 配置文件中,而任何节点特定的设置,例如 node.name,可以在命令行上指定。

检查 Elasticsearch 是否正在运行

edit

您可以通过向localhost9200端口发送HTTPS请求来测试您的Elasticsearch节点是否正在运行:

curl --cacert %ES_HOME%\config\certs\http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 

确保在调用中使用https,否则请求将失败。

--cacert
生成的用于HTTP层的http_ca.crt证书的路径。

调用返回的响应如下:

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

在 Windows 上安装并运行 Elasticsearch 作为服务

edit

您可以将 Elasticsearch 安装为在后台运行或在启动时自动启动的服务,而无需用户交互。

  1. 将 Elasticsearch 安装为服务。服务名称和 ES_JAVA_HOME 的值将在安装过程中提供:

    C:\Program Files\elasticsearch-9.0.0-beta1\bin>elasticsearch-service.bat install
    Installing service      :  "elasticsearch-service-x64"
    Using ES_JAVA_HOME (64-bit):  "C:\jvm\jdk1.8"
    The service 'elasticsearch-service-x64' has been installed.
  2. 启动 Elasticsearch 作为服务。当 Elasticsearch 启动时,默认启用身份验证:

    C:\Program Files\elasticsearch-9.0.0-beta1\bin>bin\elasticsearch-service.bat start

    当您将 Elasticsearch 作为服务启动时,TLS 未启用或配置。

  3. elastic用户生成一个密码,使用elasticsearch-reset-password工具。密码将输出到命令行。

    C:\Program Files\elasticsearch-9.0.0-beta1\bin>\bin\elasticsearch-reset-password -u elastic

虽然可以使用JRE来运行Elasticsearch服务,但由于它使用的是客户端VM(与提供更好性能的服务器JVM相比,服务器JVM更适合长时间运行的应用程序),因此不建议使用,并且会发出警告。

系统环境变量 ES_JAVA_HOME 应设置为希望服务使用的 JDK 安装路径。如果您升级 JDK,则不需要重新安装服务,但必须将系统环境变量 ES_JAVA_HOME 的值设置为新 JDK 安装的路径。然而,跨 JVM 类型(例如 JRE 与 SE)升级是不支持的,并且确实需要重新安装服务。

在 Windows 上将 Elasticsearch 作为服务管理

edit

bin\ 文件夹中运行 elasticsearch-service.bat 脚本来安装、删除、管理或配置服务,并可能从命令行启动和停止服务。

C:\Program Files\elasticsearch-9.0.0-beta1\bin>elasticsearch-service.bat

Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]

该脚本需要一个参数(要执行的命令),后面可以跟一个可选参数,指示服务ID(在安装多个Elasticsearch服务时很有用)。

可用的命令有:

安装

安装 Elasticsearch 作为服务

remove

移除已安装的Elasticsearch服务(如果服务已启动,则停止服务)

开始

启动 Elasticsearch 服务(如果已安装)

停止

停止 Elasticsearch 服务(如果已启动)

经理

启动用于管理已安装服务的图形用户界面

自定义服务设置

edit

Elasticsearch 服务可以在安装前通过设置以下环境变量进行配置(可以使用命令行中的 set 命令,或者通过 系统属性→环境变量 图形界面)。

服务ID

服务的一个唯一标识符。如果在同一台机器上安装多个实例,这会很有用。默认为 elasticsearch-service-x64

SERVICE_USERNAME

要运行的用户,默认为本地系统账户。

服务密码

用户指定的密码 %SERVICE_USERNAME%

服务显示名称

服务的名称。默认为 {es} %SERVICE_ID%

服务描述

服务的描述。默认为 {es} Windows Service - https://elastic.co

ES_JAVA_HOME

所需JVM的安装目录,用于运行服务。

SERVICE_LOG_DIR

服务日志目录,默认为 %ES_HOME%\logs。请注意,这并不控制 Elasticsearch 日志的路径;这些日志的路径是通过 elasticsearch.yml 配置文件中的 path.logs 设置或在命令行上设置的。

ES_PATH_CONF

配置文件目录(需要包含 elasticsearch.ymljvm.optionslog4j2.properties 文件),默认为 %ES_HOME%\config

ES_JAVA_OPTS

您可能想要应用的任何其他JVM系统属性。

ES_START_TYPE

服务的启动模式。可以是 automanual(默认)。

ES_STOP_TIMEOUT

procrun等待服务正常退出的超时时间(以秒为单位)。默认为0

在其核心部分,elasticsearch-service.bat 依赖于 Apache Commons Daemon 项目来安装服务。在服务安装之前设置的环境变量会被复制,并在服务生命周期中使用。这意味着在安装后对这些变量的任何更改都不会被识别,除非重新安装服务。

默认情况下,Elasticsearch 会根据节点的 角色和总内存自动调整 JVM 堆大小。我们建议大多数生产环境使用此默认大小。如果需要,您可以通过手动设置堆大小来覆盖默认大小。

当首次在Windows上作为服务安装Elasticsearch或从命令行运行Elasticsearch时,您可以手动设置JVM堆大小。 要调整已安装服务的堆大小,请使用服务管理器:bin\elasticsearch-service.bat manager

该服务在运行时会自动配置一个私有的临时目录供Elasticsearch使用。这个私有临时目录被配置为用户运行安装程序的私有临时目录的子目录。如果服务将在不同的用户下运行,您可以通过在执行服务安装之前将环境变量ES_TMPDIR设置为首选位置来配置服务应使用的临时目录。

Using the Manager GUI
也可以在安装后使用管理器GUI(elasticsearch-service-mgr.exe)配置服务,该GUI提供了对已安装服务的深入了解,包括其状态、启动类型、JVM、启动和停止设置等。从命令行调用elasticsearch-service.bat manager以打开管理器窗口。

大多数更改(如JVM设置)通过管理器GUI进行后,需要重启服务才能生效。

连接客户端到Elasticsearch

edit

当您首次启动 Elasticsearch 时,TLS 会自动为 HTTP 层配置。CA 证书会生成并存储在磁盘上的以下位置:

%ES_HOME%\config\certs\http_ca.crt

此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,例如 Elasticsearch 客户端、 Beats、独立的 Elastic Agents 和 Logstash,都必须验证它们信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agents 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。

如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将CA证书复制到您的机器并配置您的客户端以使用它。

使用CA指纹
edit

复制Elasticsearch启动时输出到终端的指纹值,并配置您的客户端使用此指纹在连接到Elasticsearch时建立信任。

如果自动配置过程已经完成,您仍然可以通过运行以下命令获取安全证书的指纹。路径是HTTP层自动生成的CA证书的路径。

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。 issuer 应为 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
使用 CA 证书
edit

如果您的库不支持验证指纹的方法,则自动生成的CA证书将创建在每个Elasticsearch节点上的以下目录中:

%ES_HOME%\config\certs\http_ca.crt

http_ca.crt 文件复制到您的机器,并配置您的客户端使用此证书在连接到 Elasticsearch 时建立信任。

.zip 归档文件的目录布局

edit

The .zip 包是完全自包含的。默认情况下,所有文件和目录都包含在 %ES_HOME% — 解压缩存档时创建的目录中。

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

Type Description Default Location Setting

首页

Elasticsearch 主目录或 %ES_HOME%

通过解压存档创建的目录

bin

包括用于启动节点的 elasticsearch 二进制脚本和用于安装插件的 elasticsearch-plugin

%ES_HOME%\bin

配置

配置文件包括 elasticsearch.yml

%ES_HOME%\config

ES_PATH_CONF

配置

为传输层和HTTP层生成了TLS密钥和证书。

%ES_HOME%\config\certs

数据

每个索引/分片分配在节点上的数据文件的位置。

%ES_HOME%\data

path.data

日志

日志文件位置。

%ES_HOME%\logs

path.logs

插件

插件文件位置。每个插件将包含在一个子目录中。

%ES_HOME%\plugins

仓库

共享文件系统仓库位置。可以包含多个位置。文件系统仓库可以放置在任何在此处指定的目录的子目录中。

未配置

path.repo

下一步

edit

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

使用 Debian 包安装 Elasticsearch

edit

Elasticsearch 的 Debian 包可以从我们的网站下载 或者从我们的APT 仓库获取。它可以用于在任何基于 Debian 的系统上安装 Elasticsearch,例如 Debian 和 Ubuntu。

此包包含免费和订阅功能。 开始30天试用以尝试所有功能。

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

Elasticsearch 包含一个捆绑版本的 OpenJDK 来自 JDK 维护者 (GPLv2+CE)。要使用您自己的 Java 版本, 请参阅 JVM 版本要求

导入 Elasticsearch PGP 密钥

edit

我们使用Elasticsearch签名密钥(PGP密钥 D88E42B4, 可从https://pgp.mit.edu获取)对所有包进行签名,指纹如下:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公共签名密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

从APT仓库安装

edit

Elasticsearch 的 9.0.0-beta1 版本尚未发布。

在继续之前,您可能需要在Debian上安装apt-transport-https包:

sudo apt-get install apt-transport-https

将仓库定义保存到 /etc/apt/sources.list.d/elastic-9.x.list

在基于systemd的发行版上,安装脚本将尝试设置内核参数(例如,vm.max_map_count);您可以通过屏蔽systemd-sysctl.service单元来跳过此操作。

手动下载并安装Debian软件包

edit

Elasticsearch 的 9.0.0-beta1 版本尚未发布。该软件包可能不可用。

可以从网站下载Elasticsearch v9.0.0-beta1的Debian软件包,并按如下方式安装:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-amd64.deb
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-amd64.deb.sha512
shasum -a 512 -c elasticsearch-9.0.0-beta1-amd64.deb.sha512 
sudo dpkg -i elasticsearch-9.0.0-beta1-amd64.deb

比较下载的Debian包的SHA和发布的校验和,应该输出 elasticsearch-{version}-amd64.deb: OK

启用安全功能启动 Elasticsearch

edit

在安装 Elasticsearch 时,安全功能默认情况下是启用并配置好的。 当你安装 Elasticsearch 时,以下安全配置会自动进行:

  • 已启用身份验证和授权,并为内置超级用户elastic生成了密码。
  • 为传输层和HTTP层生成了TLS的证书和密钥,并使用这些密钥和证书启用了TLS并进行了配置。

密码、证书和密钥会输出到您的终端。 您可以使用 elasticsearch-reset-password 命令重置 elastic 用户的密码。

我们建议将 elastic 密码存储为 shell 中的环境变量。例如:

export ELASTIC_PASSWORD="your_password"

重新配置节点以加入现有集群

edit

当您安装 Elasticsearch 时,安装过程默认配置一个单节点集群。如果您希望节点加入现有集群,请在首次启动新节点之前,在现有节点上生成一个注册令牌。

  1. 在现有集群的任何节点上,生成一个节点注册令牌:

    /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
  2. 复制注册令牌,该令牌会输出到您的终端。
  3. 在您的新 Elasticsearch 节点上,将注册令牌作为参数传递给 elasticsearch-reconfigure-node 工具:

    /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token 

    Elasticsearch 现在已配置为加入现有集群。

  4. 使用 systemd 启动您的新节点.

启用系统索引的自动创建

edit

一些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,无需额外步骤。然而,如果您在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:

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

如果您正在使用 LogstashBeats,那么您很可能需要在您的 action.auto_create_index 设置中使用额外的索引名称,并且 确切的值将取决于您的本地配置。如果您不确定适合您环境的正确值,您可以考虑将值设置为 *,这将允许自动创建所有索引。

使用 systemd 运行 Elasticsearch

edit

要配置Elasticsearch在系统启动时自动启动,请运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

Elasticsearch 可以按如下方式启动和停止:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令不会提供Elasticsearch是否成功启动的反馈。相反,这些信息将被记录在位于/var/log/elasticsearch/的日志文件中。

如果您已将 Elasticsearch 密钥库设置为密码保护,您需要使用本地文件和 systemd 环境变量向 systemd 提供密钥库密码。此本地文件在存在时应受到保护,并且在 Elasticsearch 启动并运行后可以安全删除。

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

默认情况下,Elasticsearch 服务不会在 systemd 日志中记录信息。要启用 journalctl 日志记录,必须从 elasticsearch.service 文件中的 ExecStart 命令行中移除 --quiet 选项。

当启用了 systemd 日志记录时,可以使用 journalctl 命令查看日志信息:

要查看日志的尾部:

sudo journalctl -f

列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch

列出从给定时间开始的elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

查看 man journalctlhttps://www.freedesktop.org/software/systemd/man/journalctl.html 以获取更多命令行选项。

使用较旧的systemd版本启动超时

默认情况下,Elasticsearch 将 TimeoutStartSec 参数设置为 systemd900s。如果你运行的是至少版本 238 的 systemd,那么 Elasticsearch 可以自动延长启动超时时间,并且会反复延长,直到启动完成,即使这需要超过 900 秒。

238 之前的 systemd 版本不支持超时扩展机制,如果在配置的超时时间内 Elasticsearch 进程未完全启动,将会终止该进程。如果发生这种情况,Elasticsearch 将在其日志中报告它在启动后不久被正常关闭:

[2022-01-31T01:22:31,077][INFO ][o.e.n.Node               ] [instance-0000000123] starting ...
...
[2022-01-31T01:37:15,077][INFO ][o.e.n.Node               ] [instance-0000000123] stopping ...

然而,systemd 日志会报告启动超时:

Jan 31 01:22:30 debian systemd[1]: Starting Elasticsearch...
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Start operation timed out. Terminating.
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Main process exited, code=killed, status=15/TERM
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Failed with result 'timeout'.
Jan 31 01:37:15 debian systemd[1]: Failed to start Elasticsearch.

为避免此问题,请将您的 systemd 升级到至少版本 238。您还可以通过延长 TimeoutStartSec 参数来临时解决问题。

检查 Elasticsearch 是否正在运行

edit

您可以通过向localhost9200端口发送HTTPS请求来测试您的Elasticsearch节点是否正在运行:

curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 

确保在调用中使用https,否则请求将失败。

--cacert
生成的用于HTTP层的http_ca.crt证书的路径。

调用返回的响应如下:

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

配置 Elasticsearch

edit

目录 /etc/elasticsearch 包含 Elasticsearch 的默认运行时配置。在包安装中,此目录及其所有包含文件的所有权设置为 root:elasticsearch

设置 setgid 标志以确保 Elasticsearch 可以读取 /etc/elasticsearch 目录中的任何文件和子目录,应用组权限。 所有文件和子目录继承 root:elasticsearch 所有权。 从此目录或任何子目录运行命令,例如 elasticsearch-keystore 工具,需要 root:elasticsearch 权限。

Elasticsearch 默认从 /etc/elasticsearch/elasticsearch.yml 文件加载其配置。该配置文件的格式在 配置 Elasticsearch 中进行了解释。

Debian 包还包含一个系统配置文件(/etc/default/elasticsearch),允许您设置以下参数:

ES_JAVA_HOME

设置要使用的自定义 Java 路径。

ES_PATH_CONF

配置文件目录(需要包含 elasticsearch.ymljvm.optionslog4j2.properties 文件);默认为 /etc/elasticsearch

ES_JAVA_OPTS

您可能想要应用的任何其他JVM系统属性。

RESTART_ON_UPGRADE

配置在包升级时重新启动,默认为false。这意味着在安装包后,您需要手动重新启动您的Elasticsearch实例。这样做的目的是为了确保在集群中升级时不会导致持续的分片重新分配,从而避免高网络流量并减少集群的响应时间。

使用 systemd 的发行版要求通过 systemd 而不是通过 /etc/sysconfig/elasticsearch 文件来配置系统资源限制。有关更多信息,请参阅 Systemd 配置

连接客户端到 Elasticsearch

edit

当您首次启动 Elasticsearch 时,TLS 会自动为 HTTP 层配置。CA 证书会生成并存储在磁盘上的以下位置:

/etc/elasticsearch/certs/http_ca.crt

此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,例如 Elasticsearch 客户端、 Beats、独立的 Elastic Agents 和 Logstash,都必须验证它们信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agents 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。

如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将CA证书复制到您的机器并配置您的客户端以使用它。

使用CA指纹
edit

复制Elasticsearch启动时输出到终端的指纹值,并配置您的客户端使用此指纹在连接到Elasticsearch时建立信任。

如果自动配置过程已经完成,您仍然可以通过运行以下命令获取安全证书的指纹。路径是HTTP层自动生成的CA证书的路径。

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。 issuer 应为 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
使用 CA 证书
edit

如果您的库不支持验证指纹的方法,则自动生成的CA证书将创建在每个Elasticsearch节点上的以下目录中:

/etc/elasticsearch/certs/http_ca.crt

http_ca.crt 文件复制到您的机器,并配置您的客户端使用此证书在连接到 Elasticsearch 时建立信任。

Debian 包的目录结构

edit

Debian 包将配置文件、日志和数据目录放置在基于 Debian 系统的适当位置:

Type Description Default Location Setting

首页

Elasticsearch 主目录或 $ES_HOME

/usr/share/elasticsearch

bin

包括用于启动节点的 elasticsearch 二进制脚本和用于安装插件的 elasticsearch-plugin

/usr/share/elasticsearch/bin

配置

配置文件包括 elasticsearch.yml

/etc/elasticsearch

ES_PATH_CONF

配置

环境变量包括堆大小、文件描述符。

/etc/default/elasticsearch

配置

为传输层和HTTP层生成了TLS密钥和证书。

/etc/elasticsearch/certs

数据

每个索引/分片分配在节点上的数据文件的位置。

/var/lib/elasticsearch

path.data

jdk

用于运行 Elasticsearch 的捆绑 Java 开发工具包。可以通过在 /etc/default/elasticsearch 中设置 ES_JAVA_HOME 环境变量来覆盖。

/usr/share/elasticsearch/jdk

日志

日志文件位置。

/var/log/elasticsearch

path.logs

插件

插件文件位置。每个插件将包含在一个子目录中。

/usr/share/elasticsearch/plugins

仓库

共享文件系统仓库位置。可以包含多个位置。文件系统仓库可以放置在任何在此处指定的目录的子目录中。

未配置

path.repo

安全证书和密钥

edit

当您安装 Elasticsearch 时,以下证书和密钥会在 Elasticsearch 配置目录中生成,这些证书和密钥用于将 Kibana 实例连接到您的安全 Elasticsearch 集群并加密节点间通信。此处列出这些文件以供参考。

http_ca.crt
用于签署此Elasticsearch集群HTTP层证书的CA证书。
http.p12
包含此节点的HTTP层密钥和证书的密钥库。
transport.p12
包含集群中所有节点传输层的密钥和证书的密钥库。

http.p12transport.p12 是受密码保护的 PKCS#12 密钥库。Elasticsearch 将这些密钥库的密码存储为 安全设置。要检索密码以便您可以检查或更改密钥库内容,请使用 bin/elasticsearch-keystore 工具。

使用以下命令来检索http.p12的密码:

bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

使用以下命令来检索transport.p12的密码:

bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

下一步

edit

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

使用 RPM 安装 Elasticsearch

edit

Elasticsearch 的 RPM 包可以从我们的网站下载 或者从我们的 RPM 仓库获取。它可以用于在任何基于 RPM 的系统上安装 Elasticsearch,例如 OpenSuSE、SLES、Centos、Red Hat 和 Oracle Enterprise。

RPM 安装不支持在旧版本的 RPM 发行版上,例如 SLES 11 和 CentOS 5。请参阅 在 Linux 或 MacOS 上从归档文件安装 Elasticsearch

此包包含免费和订阅功能。 开始30天试用以尝试所有功能。

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

Elasticsearch 包含一个捆绑版本的 OpenJDK 来自 JDK 维护者 (GPLv2+CE)。要使用您自己的 Java 版本, 请参阅 JVM 版本要求

有关在本地环境中逐步设置Elastic Stack的示例,请尝试我们的教程:安装自管理的Elastic Stack

导入 Elasticsearch GPG 密钥

edit

我们使用Elasticsearch签名密钥(PGP密钥 D88E42B4, 可从https://pgp.mit.edu获取)对所有包进行签名,指纹如下:

4609 5ACC 8548 582C 1A26 99A9 D27D 666C D88E 42B4

下载并安装公共签名密钥:

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

从RPM仓库安装

edit

Elasticsearch 的 9.0.0-beta1 版本尚未发布。

在基于RedHat的发行版的/etc/yum.repos.d/目录中创建一个名为elasticsearch.repo的文件,或者在基于OpenSuSE的发行版的/etc/zypp/repos.d/目录中创建该文件,内容如下:

手动下载并安装RPM

edit

Elasticsearch 的 9.0.0-beta1 版本尚未发布。RPM 可能不可用。

Elasticsearch v9.0.0-beta1 的 RPM 可以从网站下载并按如下方式安装:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.0-beta1-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-9.0.0-beta1-x86_64.rpm.sha512 
sudo rpm --install elasticsearch-9.0.0-beta1-x86_64.rpm

比较下载的RPM的SHA和发布的校验和,应该输出 elasticsearch-{version}-x86_64.rpm: OK

在基于systemd的发行版上,安装脚本将尝试设置内核参数(例如,vm.max_map_count);您可以通过屏蔽systemd-sysctl.service单元来跳过此操作。

启用安全功能启动 Elasticsearch

edit

在安装 Elasticsearch 时,安全功能默认情况下是启用并配置好的。 当你安装 Elasticsearch 时,以下安全配置会自动进行:

  • 已启用身份验证和授权,并为内置超级用户elastic生成了密码。
  • 为传输层和HTTP层生成了TLS的证书和密钥,并使用这些密钥和证书启用了TLS并进行了配置。

密码、证书和密钥会输出到您的终端。 您可以使用 elasticsearch-reset-password 命令重置 elastic 用户的密码。

我们建议将 elastic 密码存储为 shell 中的环境变量。例如:

export ELASTIC_PASSWORD="your_password"

重新配置节点以加入现有集群

edit

当您安装 Elasticsearch 时,安装过程默认配置一个单节点集群。如果您希望节点加入现有集群,请在首次启动新节点之前,在现有节点上生成一个注册令牌。

  1. 在现有集群的任何节点上,生成一个节点注册令牌:

    /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
  2. 复制注册令牌,该令牌会输出到您的终端。
  3. 在您的新 Elasticsearch 节点上,将注册令牌作为参数传递给 elasticsearch-reconfigure-node 工具:

    /usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token 

    Elasticsearch 现在已配置为加入现有集群。

  4. 使用 systemd 启动您的新节点.

启用系统索引的自动创建

edit

一些商业功能会自动在 Elasticsearch 中创建索引。默认情况下,Elasticsearch 配置为允许自动创建索引,无需额外步骤。然而,如果您在 Elasticsearch 中禁用了自动索引创建,则必须在 elasticsearch.yml 中配置 action.auto_create_index,以允许商业功能创建以下索引:

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

如果您正在使用 LogstashBeats,那么您很可能需要在您的 action.auto_create_index 设置中使用额外的索引名称,并且 确切的值将取决于您的本地配置。如果您不确定适合您环境的正确值,您可以考虑将值设置为 *,这将允许自动创建所有索引。

使用 systemd 运行 Elasticsearch

edit

要配置Elasticsearch在系统启动时自动启动,请运行以下命令:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service

Elasticsearch 可以按如下方式启动和停止:

sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service

这些命令不会提供Elasticsearch是否成功启动的反馈。相反,这些信息将被记录在位于/var/log/elasticsearch/的日志文件中。

如果您已将 Elasticsearch 密钥库设置为密码保护,您需要使用本地文件和 systemd 环境变量向 systemd 提供密钥库密码。此本地文件在存在时应受到保护,并且在 Elasticsearch 启动并运行后可以安全删除。

echo "keystore_password" > /path/to/my_pwd_file.tmp
chmod 600 /path/to/my_pwd_file.tmp
sudo systemctl set-environment ES_KEYSTORE_PASSPHRASE_FILE=/path/to/my_pwd_file.tmp
sudo systemctl start elasticsearch.service

默认情况下,Elasticsearch 服务不会在 systemd 日志中记录信息。要启用 journalctl 日志记录,必须从 elasticsearch.service 文件中的 ExecStart 命令行中移除 --quiet 选项。

当启用了 systemd 日志记录时,可以使用 journalctl 命令查看日志信息:

要查看日志的尾部:

sudo journalctl -f

列出elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch

列出从给定时间开始的elasticsearch服务的日志条目:

sudo journalctl --unit elasticsearch --since  "2016-10-30 18:17:16"

查看 man journalctlhttps://www.freedesktop.org/software/systemd/man/journalctl.html 以获取更多命令行选项。

使用较旧的systemd版本启动超时

默认情况下,Elasticsearch 将 TimeoutStartSec 参数设置为 systemd900s。如果你运行的是至少版本 238 的 systemd,那么 Elasticsearch 可以自动延长启动超时时间,并且会反复延长,直到启动完成,即使这需要超过 900 秒。

238 之前的 systemd 版本不支持超时扩展机制,如果在配置的超时时间内 Elasticsearch 进程未完全启动,将会终止该进程。如果发生这种情况,Elasticsearch 将在其日志中报告它在启动后不久被正常关闭:

[2022-01-31T01:22:31,077][INFO ][o.e.n.Node               ] [instance-0000000123] starting ...
...
[2022-01-31T01:37:15,077][INFO ][o.e.n.Node               ] [instance-0000000123] stopping ...

然而,systemd 日志会报告启动超时:

Jan 31 01:22:30 debian systemd[1]: Starting Elasticsearch...
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Start operation timed out. Terminating.
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Main process exited, code=killed, status=15/TERM
Jan 31 01:37:15 debian systemd[1]: elasticsearch.service: Failed with result 'timeout'.
Jan 31 01:37:15 debian systemd[1]: Failed to start Elasticsearch.

为避免此问题,请将您的 systemd 升级到至少版本 238。您还可以通过延长 TimeoutStartSec 参数来临时解决问题。

检查 Elasticsearch 是否正在运行

edit

您可以通过向localhost9200端口发送HTTPS请求来测试您的Elasticsearch节点是否正在运行:

curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200 

确保在调用中使用https,否则请求将失败。

--cacert
生成的用于HTTP层的http_ca.crt证书的路径。

调用返回的响应如下:

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

配置 Elasticsearch

edit

目录 /etc/elasticsearch 包含 Elasticsearch 的默认运行时配置。在包安装中,此目录及其所有包含文件的所有权设置为 root:elasticsearch

设置 setgid 标志以确保 Elasticsearch 可以读取 /etc/elasticsearch 目录中的任何文件和子目录,应用组权限。 所有文件和子目录继承 root:elasticsearch 所有权。 从此目录或任何子目录运行命令,例如 elasticsearch-keystore 工具,需要 root:elasticsearch 权限。

Elasticsearch 默认从 /etc/elasticsearch/elasticsearch.yml 文件加载其配置。该配置文件的格式在 配置 Elasticsearch 中进行了解释。

RPM 还有一个系统配置文件(/etc/sysconfig/elasticsearch), 它允许您设置以下参数:

ES_JAVA_HOME

设置要使用的自定义 Java 路径。

ES_PATH_CONF

配置文件目录(需要包含 elasticsearch.ymljvm.optionslog4j2.properties 文件);默认为 /etc/elasticsearch

ES_JAVA_OPTS

您可能想要应用的任何其他JVM系统属性。

RESTART_ON_UPGRADE

配置在包升级时重新启动,默认为false。这意味着在安装包后,您需要手动重新启动您的Elasticsearch实例。这样做的目的是为了确保在集群中升级时不会导致持续的分片重新分配,从而避免高网络流量并减少集群的响应时间。

使用 systemd 的发行版要求通过 systemd 而不是通过 /etc/sysconfig/elasticsearch 文件来配置系统资源限制。有关更多信息,请参阅 Systemd 配置

连接客户端到 Elasticsearch

edit

当您首次启动 Elasticsearch 时,TLS 会自动为 HTTP 层配置。CA 证书会生成并存储在磁盘上的以下位置:

/etc/elasticsearch/certs/http_ca.crt

此证书的十六进制编码的 SHA-256 指纹也会输出到终端。任何连接到 Elasticsearch 的客户端,例如 Elasticsearch 客户端、 Beats、独立的 Elastic Agents 和 Logstash,都必须验证它们信任 Elasticsearch 用于 HTTPS 的证书。Fleet Server 和 Fleet 管理的 Elastic Agents 会自动配置为信任 CA 证书。其他客户端可以通过使用 CA 证书的指纹或 CA 证书本身来建立信任。

如果自动配置过程已经完成,您仍然可以获取安全证书的指纹。您还可以将CA证书复制到您的机器并配置您的客户端以使用它。

使用CA指纹
edit

复制Elasticsearch启动时输出到终端的指纹值,并配置您的客户端使用此指纹在连接到Elasticsearch时建立信任。

如果自动配置过程已经完成,您仍然可以通过运行以下命令获取安全证书的指纹。路径是HTTP层自动生成的CA证书的路径。

openssl x509 -fingerprint -sha256 -in config/certs/http_ca.crt

该命令返回安全证书,包括指纹。 issuer 应为 Elasticsearch security auto-configuration HTTP CA

issuer= /CN=Elasticsearch security auto-configuration HTTP CA
SHA256 Fingerprint=<fingerprint>
使用 CA 证书
edit

如果您的库不支持验证指纹的方法,则自动生成的CA证书将创建在每个Elasticsearch节点上的以下目录中:

/etc/elasticsearch/certs/http_ca.crt

http_ca.crt 文件复制到您的机器,并配置您的客户端使用此证书在连接到 Elasticsearch 时建立信任。

RPM的目录布局

edit

RPM 将配置文件、日志和数据目录放置在基于 RPM 系统的适当位置:

Type Description Default Location Setting

首页

Elasticsearch 主目录或 $ES_HOME

/usr/share/elasticsearch

bin

包括用于启动节点的 elasticsearch 二进制脚本和用于安装插件的 elasticsearch-plugin

/usr/share/elasticsearch/bin

配置

配置文件包括 elasticsearch.yml

/etc/elasticsearch

ES_PATH_CONF

配置

环境变量包括堆大小、文件描述符。

/etc/sysconfig/elasticsearch

配置

为传输层和HTTP层生成了TLS密钥和证书。

/etc/elasticsearch/certs

数据

每个索引/分片分配在节点上的数据文件的位置。

/var/lib/elasticsearch

path.data

jdk

用于运行 Elasticsearch 的捆绑 Java 开发工具包。可以通过在 /etc/sysconfig/elasticsearch 中设置 ES_JAVA_HOME 环境变量来覆盖。

/usr/share/elasticsearch/jdk

日志

日志文件位置。

/var/log/elasticsearch

path.logs

插件

插件文件位置。每个插件将包含在一个子目录中。

/usr/share/elasticsearch/plugins

仓库

共享文件系统仓库位置。可以包含多个位置。文件系统仓库可以放置在任何在此处指定的目录的子目录中。

未配置

path.repo

安全证书和密钥

edit

当您安装 Elasticsearch 时,以下证书和密钥会在 Elasticsearch 配置目录中生成,这些证书和密钥用于将 Kibana 实例连接到您的安全 Elasticsearch 集群并加密节点间通信。此处列出这些文件以供参考。

http_ca.crt
用于签署此Elasticsearch集群HTTP层证书的CA证书。
http.p12
包含此节点的HTTP层密钥和证书的密钥库。
transport.p12
包含集群中所有节点传输层的密钥和证书的密钥库。

http.p12transport.p12 是受密码保护的 PKCS#12 密钥库。Elasticsearch 将这些密钥库的密码存储为 安全设置。要检索密码以便您可以检查或更改密钥库内容,请使用 bin/elasticsearch-keystore 工具。

使用以下命令来检索http.p12的密码:

bin/elasticsearch-keystore show xpack.security.http.ssl.keystore.secure_password

使用以下命令来检索transport.p12的密码:

bin/elasticsearch-keystore show xpack.security.transport.ssl.keystore.secure_password

下一步

edit

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

使用 Docker 安装 Elasticsearch

edit

Elasticsearch 的 Docker 镜像可以从 Elastic Docker 注册表中获取。所有已发布的 Docker 镜像和标签的列表可在 www.docker.elastic.co 上找到。源代码位于 GitHub

此包包含免费和订阅功能。 开始30天试用以尝试所有功能。

如果您只想在本地开发环境中测试 Elasticsearch,请参阅 在本地运行 Elasticsearch。 请注意,此设置不适用于生产环境。

在 Docker 中运行 Elasticsearch

edit

使用 Docker 命令启动用于开发或测试的单节点 Elasticsearch 集群。然后,您可以运行其他 Docker 命令向测试集群添加节点或运行 Kibana。

此设置默认不运行多个 Elasticsearch 节点或 Kibana。要创建一个带有 Kibana 的多节点集群,请使用 Docker Compose。请参阅 使用 Docker Compose 启动多节点集群

启动单节点集群

edit
  1. 安装 Docker。访问 获取 Docker 以在您的环境中安装 Docker。

    如果使用 Docker Desktop,请确保分配至少 4GB 的内存。您可以通过转到 设置 > 资源 来调整 Docker Desktop 中的内存使用。

  2. 创建一个新的 Docker 网络。

    docker network create elastic
  3. 拉取 Elasticsearch Docker 镜像。

    版本 9.0.0-beta1 尚未发布。 目前没有可用的 Elasticsearch 9.0.0-beta1 的 Docker 镜像。

    docker pull docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1
  4. 可选:为您的环境安装 Cosign。然后使用 Cosign 验证 Elasticsearch 镜像的签名。

    wget https://artifacts.elastic.co/cosign.pub
    cosign verify --key cosign.pub docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1

    The cosign 命令以 JSON 格式打印检查结果和签名有效载荷:

    Verification for docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1 --
    The following checks were performed on each of these signatures:
      - The cosign claims were validated
      - Existence of the claims in the transparency log was verified offline
      - The signatures were verified against the specified public key
  5. 启动一个 Elasticsearch 容器。

    docker run --name es01 --net elastic -p 9200:9200 -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1

    使用 -m 标志为容器设置内存限制。这消除了手动设置JVM大小的需要。

    该命令打印出elastic用户的密码以及Kibana的注册令牌。

  6. 复制生成的 elastic 密码和注册令牌。这些凭证仅在您首次启动 Elasticsearch 时显示。您可以使用以下命令重新生成凭证。

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

    我们建议将 elastic 密码存储为 shell 中的环境变量。示例:

    export ELASTIC_PASSWORD="your_password"
  7. http_ca.crt SSL 证书从容器复制到您的本地机器。

    docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
  8. 向 Elasticsearch 发出 REST API 调用,以确保 Elasticsearch 容器正在运行。

    curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200

添加更多节点

edit
  1. 使用现有节点为新节点生成一个注册令牌。

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node

    注册令牌有效期为30分钟。

  2. 启动一个新的 Elasticsearch 容器。将注册令牌作为环境变量包含在内。

    docker run -e ENROLLMENT_TOKEN="" --name es02 --net elastic -it -m 1GB docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1
  3. 调用cat nodes API以验证节点已添加到集群中。

    curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200/_cat/nodes

运行 Kibana

edit
  1. 拉取 Kibana Docker 镜像。

    版本 9.0.0-beta1 尚未发布。 目前没有可用于 Kibana 9.0.0-beta1 的 Docker 镜像。

    docker pull docker.elastic.co/kibana/kibana:9.0.0-beta1
  2. 可选:验证 Kibana 镜像的签名。

    wget https://artifacts.elastic.co/cosign.pub
    cosign verify --key cosign.pub docker.elastic.co/kibana/kibana:9.0.0-beta1
  3. 启动一个 Kibana 容器。

    docker run --name kib01 --net elastic -p 5601:5601 docker.elastic.co/kibana/kibana:9.0.0-beta1
  4. 当 Kibana 启动时,它会输出一个唯一的生成链接至终端。要访问 Kibana,请在网络浏览器中打开此链接。
  5. 在您的浏览器中,输入启动 Elasticsearch 时生成的注册令牌。

    要重新生成令牌,请运行:

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
  6. elastic用户身份登录Kibana,使用启动Elasticsearch时生成的密码。

    要重新生成密码,请运行:

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

删除容器

edit

要删除容器及其网络,请运行:

# Remove the Elastic network
docker network rm elastic

# Remove Elasticsearch containers
docker rm es01
docker rm es02

# Remove the Kibana container
docker rm kib01

下一步

edit

您现在已设置了一个测试 Elasticsearch 环境。在开始正式开发或使用 Elasticsearch 进行生产之前,请查看在生产环境中使用 Docker 运行 Elasticsearch 时的要求和建议

使用 Docker Compose 启动多节点集群

edit

使用 Docker Compose 启动一个带有 Kibana 的三节点 Elasticsearch 集群。Docker Compose 允许你通过一个命令启动多个容器。

配置和启动集群

edit
  1. 安装 Docker Compose。访问 Docker Compose 文档 以安装适用于您环境的 Docker Compose。

    如果您使用的是 Docker Desktop,Docker Compose 会自动安装。请确保为 Docker Desktop 分配至少 4GB 的内存。您可以通过进入 设置 > 资源 来调整 Docker Desktop 的内存使用。

  2. 创建或导航到一个空的项目目录。
  3. 将以下文件下载并保存在项目目录中:

  4. .env 文件中,为 ELASTIC_PASSWORDKIBANA_PASSWORD 变量指定一个密码。

    密码必须是字母数字,并且不能包含特殊字符,例如 !@docker-compose.yml 文件中包含的 bash 脚本仅适用于字母数字字符。示例:

    # Password for the 'elastic' user (at least 6 characters)
    ELASTIC_PASSWORD=changeme
    
    # Password for the 'kibana_system' user (at least 6 characters)
    KIBANA_PASSWORD=changeme
    ...
  5. .env 文件中,将 STACK_VERSION 设置为当前的 Elastic Stack 版本。

    ...
    # Version of Elastic products
    STACK_VERSION=9.0.0-beta1
    ...
  6. 默认情况下,Docker Compose 配置在所有网络接口上暴露端口 9200

    为了避免将端口 9200 暴露给外部主机,请在 .env 文件中将 ES_PORT 设置为 127.0.0.1:9200。这样可以确保 Elasticsearch 只能从主机访问。

    ...
    # Port to expose Elasticsearch HTTP API to the host
    #ES_PORT=9200
    ES_PORT=127.0.0.1:9200
    ...
  7. 要从项目目录启动集群,请运行以下命令。

    docker-compose up -d
  8. 集群启动后,在网络浏览器中打开 http://localhost:5601 以访问 Kibana。
  9. 使用您之前设置的 ELASTIC_PASSWORDelastic 用户身份登录 Kibana。

停止并移除集群

edit

要停止集群,请运行 docker-compose down。Docker 卷中的数据会被保留,并在您使用 docker-compose up 重新启动集群时加载。

docker-compose down

要在停止集群时删除网络、容器和卷,请指定 -v 选项:

docker-compose down -v

下一步

edit

您现在已设置了一个测试 Elasticsearch 环境。在开始正式开发或使用 Elasticsearch 进行生产之前,请查看在生产环境中使用 Docker 运行 Elasticsearch 时的要求和建议

在生产环境中使用Docker镜像

edit

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

vm.max_map_count 设置为至少 262144

edit

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

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

Linux
edit

要查看当前的 vm.max_map_count 设置值,请运行:

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

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

sysctl -w vm.max_map_count=262144

要永久更改 vm.max_map_count 设置的值,请在 /etc/sysctl.conf 中更新该值。

macOS 使用 Docker for Mac
edit

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

  1. 从命令行运行:

    screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
  2. 按下回车并使用 sysctl 配置 vm.max_map_count

    sysctl -w vm.max_map_count=262144
  3. 要退出 screen 会话,请输入 Ctrl a d
Windows 和 macOS 使用 Docker Desktop
edit

必须通过docker-machine设置vm.max_map_count参数:

docker-machine ssh
sudo sysctl -w vm.max_map_count=262144

在“docker-desktop”WSL实例中,必须设置vm.max_map_count,Elasticsearch容器才能正常启动。根据您的Windows版本和WSL版本,有几种方法可以实现这一点。

如果你使用的是Windows 10版本22H2之前的版本,或者你使用的是内置版本的WSL的Windows 10版本22H2,你必须在每次重启Docker之前手动设置它,或者(如果你不想在每次重启时都这样做)你必须全局设置每个WSL2实例以更改vm.max_map_count。这是因为这些版本的WSL无法正确处理/etc/sysctl.conf文件。

要每次重启后手动设置,您必须在每次重启 Docker 时在命令提示符或 PowerShell 窗口中运行以下命令:

wsl -d docker-desktop -u root
sysctl -w vm.max_map_count=262144

如果你使用的是这些版本的WSL,并且不希望每次重启Docker时都运行这些命令,你可以通过修改你的 %USERPROFILE%\.wslconfig 文件来全局更改每个WSL发行版的设置,如下所示:

[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"

这将在所有WSL2虚拟机启动时为其分配该设置。

如果你使用的是Windows 11,或者Windows 10版本22H2并安装了Microsoft Store版本的WSL,你可以在"docker-desktop" WSL发行版中修改/etc/sysctl.conf,可能使用如下命令:

wsl -d docker-desktop -u root
vi /etc/sysctl.conf

并附加一行内容:

vm.max_map_count = 262144

配置文件必须可被elasticsearch用户读取

edit

默认情况下,Elasticsearch 在容器内以用户 elasticsearch 运行,使用 uid:gid 1000:0

一个例外是Openshift, 它使用任意分配的用户ID运行容器。 Openshift将持久卷的gid设置为0,这无需任何调整即可工作。

如果你正在绑定挂载一个本地目录或文件,它必须对elasticsearch用户可读。 此外,该用户必须对配置、数据和日志目录具有写访问权限 (Elasticsearch需要对config目录具有写访问权限,以便它可以生成密钥库)。 一个好的策略是授予本地目录对gid 0的组访问权限。

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

mkdir esdatadir
chmod g+rwx esdatadir
chgrp 0 esdatadir

您还可以使用自定义 UID 和 GID 运行 Elasticsearch 容器。您必须确保文件权限不会阻止 Elasticsearch 执行。您可以使用以下两种选项之一:

  • 绑定挂载configdatalogs目录。如果你打算安装插件并且不希望 创建自定义Docker镜像,你还必须绑定挂载plugins目录。
  • --group-add 0命令行选项传递给docker run。这确保了运行Elasticsearch的用户也是容器内root(GID 0)组的成员。

增加 nofile 和 nproc 的 ulimits

edit

必须为Elasticsearch容器提供增加的nofilenproc的ulimits。 请验证Docker守护进程的init系统 将它们设置为可接受的值。

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

docker run --rm docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1 /bin/bash -c 'ulimit -Hn && ulimit -Sn && ulimit -Hu && ulimit -Su'

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

--ulimit nofile=65535:65535

禁用交换

edit

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

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

-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1

随机化发布的端口

edit

图像 exposes TCP 端口 9200 和 9300。对于生产集群,建议使用 --publish-all 随机化发布的端口,除非您每个主机只固定一个容器。

手动设置堆大小

edit

默认情况下,Elasticsearch 会根据节点的 角色 和节点容器可用的总内存自动调整 JVM 堆大小。我们 建议大多数生产环境使用此默认大小。如果需要,您可以通过手动设置 JVM 堆大小来覆盖默认大小。

要在生产环境中手动设置堆大小,请在 /usr/share/elasticsearch/config/jvm.options.d 下绑定挂载一个包含所需 堆大小 设置的 JVM 选项 文件。

对于测试,您也可以使用ES_JAVA_OPTS环境变量手动设置堆大小。例如,要使用1GB,请使用以下命令。

docker run -e ES_JAVA_OPTS="-Xms1g -Xmx1g" -e ENROLLMENT_TOKEN="<token>" --name es01 -p 9200:9200 --net elastic -it docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1

变量 ES_JAVA_OPTS 会覆盖所有其他 JVM 选项。 我们不建议在生产环境中使用 ES_JAVA_OPTS

将部署固定到特定镜像版本

edit

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

始终绑定数据卷

edit

您应该为 /usr/share/elasticsearch/data 设置卷绑定,原因如下:

  1. 如果容器被终止,您的Elasticsearch节点的数据不会丢失
  2. Elasticsearch对I/O敏感,而Docker存储驱动程序并不适合快速I/O
  3. 它允许使用高级 Docker卷插件

避免使用loop-lvm模式

edit

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

集中管理您的日志

edit

考虑通过使用不同的日志记录驱动程序来集中管理您的日志。同时请注意,默认的json-file日志记录驱动程序并不完全适合生产环境使用。

使用 Docker 配置 Elasticsearch

edit

当您在 Docker 中运行时,Elasticsearch 配置文件 是从 /usr/share/elasticsearch/config/ 加载的。

要使用自定义配置文件,您可以将文件绑定挂载到镜像中的配置文件上。

您可以使用 Docker 环境变量来设置单个 Elasticsearch 配置参数。 示例 compose 文件单节点示例 使用此方法。您可以直接使用设置名称作为环境变量名称。如果 您无法这样做,例如因为您的编排平台禁止在环境变量名称中使用句点,那么您可以使用以下替代样式来转换设置名称。

  1. 将设置名称改为大写
  2. 在其前面加上 ES_SETTING_
  3. 将任何下划线 (_) 重复一次
  4. 将所有句点 (.) 转换为下划线 (_)

例如,-e bootstrap.memory_lock=true 变为 -e ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true

您可以使用文件的内容来设置 ELASTIC_PASSWORDKEYSTORE_PASSWORD 环境变量的值,方法是在环境变量名称后加上 _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 配置文件

edit

创建自定义配置文件并将它们绑定挂载到Docker镜像中的相应文件上。 例如,要将custom_elasticsearch.ymldocker run绑定挂载,请指定:

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

如果你绑定挂载了一个自定义的 elasticsearch.yml 文件,请确保它包含 network.host: 0.0.0.0 设置。此设置确保节点可以接收HTTP和传输流量,前提是其端口已暴露。Docker镜像内置的 elasticsearch.yml 文件默认包含此设置。

容器 以用户 elasticsearch 运行 Elasticsearch,使用 uid:gid 1000:0。绑定挂载的主机目录和文件必须可被此用户访问,并且数据和日志目录必须可被此用户写入。

创建一个加密的Elasticsearch密钥库

edit

默认情况下,Elasticsearch 会为 安全设置 自动生成一个密钥库文件。此文件是混淆的,但未加密。

要使用密码加密您的安全设置并使其在容器外部持久化,请使用 docker run 命令手动创建密钥库。该命令必须:

  • 绑定挂载config目录。该命令将在此目录中创建一个elasticsearch.keystore文件。为了避免错误,请不要直接绑定挂载elasticsearch.keystore文件。
  • 使用elasticsearch-keystore工具并带有create -p选项。系统将提示您输入密钥库的密码。

例如:

docker run -it --rm \
-v full_path_to/config:/usr/share/elasticsearch/config \
docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1 \
bin/elasticsearch-keystore create -p

您还可以使用 docker run 命令在密钥库中添加或更新安全设置。系统会提示您输入设置值。如果密钥库已加密,系统还会提示您输入密钥库密码。

docker run -it --rm \
-v full_path_to/config:/usr/share/elasticsearch/config \
docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1 \
bin/elasticsearch-keystore \
add my.secure.setting \
my.other.secure.setting

如果你已经创建了密钥库并且不需要更新它,你可以直接绑定挂载elasticsearch.keystore文件。你可以使用KEYSTORE_PASSWORD环境变量在启动时向容器提供密钥库密码。例如,一个docker run命令可能会有以下选项:

-v full_path_to/config/elasticsearch.keystore:/usr/share/elasticsearch/config/elasticsearch.keystore
-e KEYSTORE_PASSWORD=mypassword

使用自定义 Docker 镜像

edit

在某些环境中,准备一个包含您配置的自定义镜像可能更有意义。一个用于实现此目的的Dockerfile可能非常简单,如下所示:

FROM docker.elastic.co/elasticsearch/elasticsearch:9.0.0-beta1
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

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

  • 在运行Docker镜像时附加一个tty,并在提示时允许权限。
  • 检查安全权限并在插件安装命令中添加--batch标志(如果合适)以接受它们。

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

排查 Elasticsearch 的 Docker 错误

edit

以下是如何解决在使用 Docker 运行 Elasticsearch 时遇到的常见错误。

elasticsearch.keystore 是一个目录

edit
Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.io.IOException: Is a directory: SimpleFSIndexInput(path="/usr/share/elasticsearch/config/elasticsearch.keystore") Likely root cause: java.io.IOException: Is a directory

一个尝试直接绑定挂载一个不存在的 elasticsearch.keystore 文件的 与密钥库相关的 docker run 命令。如果你使用 -v--volume 标志来挂载一个不存在的文件,Docker 会创建一个同名目录。

要解决此错误:

  1. 删除config目录中的elasticsearch.keystore目录。
  2. -v--volume标志更新为指向config目录路径,而不是keystore文件的路径。有关示例,请参阅 创建加密的Elasticsearch密钥库
  3. 重试该命令。

elasticsearch.keystore: 设备或资源忙

edit
Exception in thread "main" java.nio.file.FileSystemException: /usr/share/elasticsearch/config/elasticsearch.keystore.tmp -> /usr/share/elasticsearch/config/elasticsearch.keystore: Device or resource busy

一个 docker run 命令尝试在直接绑定挂载 elasticsearch.keystore 文件时 更新密钥库。要更新密钥库,容器需要访问 config 目录中的其他文件,例如 keystore.tmp

要解决此错误:

  1. -v--volume标志更新为指向config目录路径,而不是密钥库文件的路径。有关示例,请参阅创建加密的Elasticsearch密钥库
  2. 重试该命令。