加载中

启动与停止 Elasticsearch

理解如何正确启动和停止 Elasticsearch 对于维护稳定高效的集群至关重要。本指南概述了安全启动和停止 Elasticsearch 的推荐方法,同时考虑了不同的安装类型,包括基于包的安装、Docker 容器以及手动解压的归档文件。

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

如果您在 Linux 或 MacOS 上使用 .tar.gz 包安装了 Elasticsearch,则可以从命令行启动 Elasticsearch。

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

./bin/elasticsearch
		

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

要停止 Elasticsearch,请按 Ctrl-C

注意

Elasticsearch 随附的所有脚本都需要支持数组的 Bash 版本,并假定 Bash 位于 /bin/bash。因此,Bash 应直接或通过符号链接在此路径下可用。

如果您是第一次启动 Elasticsearch,它还会启用并配置安全性。了解详情

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

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

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

.\bin\elasticsearch.bat
		

默认情况下,Elasticsearch 将其日志输出到控制台(STDOUT)以及日志目录中的 <cluster name>.log 文件中。Elasticsearch 在启动时会记录一些信息,但在完成初始化后,它将继续在前台运行,并且在发生值得记录的事情之前不会再记录任何内容。在 Elasticsearch 运行时,您可以通过其默认端口为 9200 的 HTTP 接口与其交互。

要停止 Elasticsearch,请按 Ctrl-C

如果您是第一次启动 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
		
较老 systemd 版本的启动超时

默认情况下,Elasticsearch 将针对 systemdTimeoutStartSec 参数设置为 900s。如果您运行的 systemd 版本至少为 238,则 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 ...
[2022-01-31T01:37:15,079][INFO ][o.e.n.Node               ] [instance-0000000123] closing ...
[2022-01-31T01:37:15,080][INFO ][o.e.n.Node               ] [instance-0000000123] closed
		

然而,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 参数来临时规避该问题。如果升级后超时错误仍然存在,请在您的 systemd 重写 (override) 配置中设置 NotifyAccess=all

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

Elasticsearch 的有序关闭确保了 Elasticsearch 有机会清理和关闭未完成的资源。例如,以有序方式关闭的节点将从集群中自我移除、将事务日志(translog)同步到磁盘并执行其他相关的清理活动。通过正确停止 Elasticsearch,您可以帮助确保有序关闭。

如果您将 Elasticsearch 作为服务运行,则可以通过安装提供的服务管理功能来停止 Elasticsearch。

如果您直接运行 Elasticsearch,如果您在控制台中运行 Elasticsearch,可以通过发送 Ctrl+C 来停止它,或者在 POSIX 系统上向 Elasticsearch 进程发送 SIGTERM。您可以通过各种工具(例如 psjps)获取要向其发送信号的 PID

$ jps | grep elasticsearch
14542 elasticsearch
		

从 Elasticsearch 启动日志中

[2016-07-07 12:26:18,908][INFO ][node                     ] [I8hydUG] version[5.0.0-alpha4], pid[15399], build[3f5b994/2016-06-27T16:23:46.861Z], OS[Mac OS X/10.11.5/x86_64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/1.8.0_92/25.92-b14]
		

或者通过在启动时指定写入 PID 文件的位置(-p <path>

$ ./bin/elasticsearch -p /tmp/elasticsearch-pid -d
$ cat /tmp/elasticsearch-pid && echo
15516
$ kill -SIGTERM 15516
		

在 Elasticsearch 虚拟机生命周期内,可能会出现某些使虚拟机处于可疑状态的致命错误。此类致命错误包括内存溢出错误、虚拟机内部错误以及严重的 I/O 错误。

当 Elasticsearch 检测到虚拟机遇到此类致命错误时,Elasticsearch 将尝试记录该错误,然后停止虚拟机。当 Elasticsearch 发起此类关闭时,它不会经历上述的有序关闭。Elasticsearch 进程还将返回一个指示错误性质的特殊状态码。

状态码 错误
1 未知的致命错误
78 引导检查失败
124 严重的 I/O 错误
125 未知的虚拟机错误
126 栈溢出错误
127 内存溢出错误
128 JVM 内部错误
134 段错误
137 被内核 oom-killer 杀死
143 用户或内核 SIGTERM
158 被 jvmkiller 代理杀死
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.