启动 Elasticsearch编辑

启动 Elasticsearch 的方法因安装方式而异。

归档包 (.tar.gz)编辑

如果使用 .tar.gz 包安装了 Elasticsearch,则可以从命令行启动 Elasticsearch。

从命令行运行 Elasticsearch编辑

运行以下命令从命令行启动 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 应该可以直接或通过符号链接在此路径中可用。

将节点注册到现有集群编辑

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

在注册新节点之前,生产集群中通常需要执行其他操作,例如绑定到 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 <enrollment-token>

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

    config/certs
  3. 对要注册的任何新节点重复上述步骤。

作为守护进程运行编辑

要将 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 包。

归档包 (.zip)编辑

如果您使用 .zip 包在 Windows 上安装了 Elasticsearch,则可以从命令行启动 Elasticsearch。如果您希望 Elasticsearch 在启动时自动启动,而无需任何用户交互,请将 Elasticsearch 安装为服务

从命令行运行 Elasticsearch编辑

运行以下命令从命令行启动 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

将节点注册到现有集群编辑

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

在注册新节点之前,生产集群中通常需要执行其他操作,例如绑定到 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 <enrollment-token>

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

    config\certs
  3. 对要注册的任何新节点重复上述步骤。

Debian 包编辑

使用 systemd 运行 Elasticsearch编辑

要将 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 参数来临时解决此问题。

Docker 镜像编辑

如果您安装了 Docker 镜像,则可以从命令行启动 Elasticsearch。根据您使用的是开发模式还是生产模式,有不同的方法。请参阅在 Docker 中运行 Elasticsearch

RPM 包编辑

使用 systemd 运行 Elasticsearch编辑

要将 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 参数来临时解决此问题。