我最近向现有集群添加了一个新节点(全新安装的 ubuntu 和通过 dpkg 安装的 elasticsearch),并且随机有一台服务器在重启时无法启动 elasticsearch。手动尝试启动时出现以下错误:
sudo systemctl status elasticsearch
elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2017-06-16 12:32:28 UTC; 3s ago
Docs: http://www.elastic.co
Process: 1437 ExecStart=/usr/share/elasticsearch/bin/elasticsearch -Des.pidfile=$PID_DIR/elasticsearch.pid -Des.default.path.home=$ES_HOME -Des.default.p
Main PID: 1437 (code=exited, status=3)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: java.io.FileNotFoundException: /var/run/elasticsearch/elasticsearch.pid (No such file or directory)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at java.io.FileOutputStream.open0(Native Method)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at java.io.FileOutputStream.open(FileOutputStream.java:270)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:194)
Jun 16 12:32:28 els02.xyz.net elasticsearch[1437]: at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
Jun 16 12:32:28 els02.xyz.net systemd[1]: elasticsearch.service: Main process exited, code=exited, status=3/NOTIMPLEMENTED
Jun 16 12:32:28 els02.xyz.net systemd[1]: elasticsearch.service: Unit entered failed state.
Jun 16 12:32:28 els02.xyz.net systemd[1]: elasticsearch.service: Failed with result 'exit-code'.
因此我继续创建 elasticsearch 所需的文件夹 - /var/run/elasticsearch,并将所有权更改为 elasticsearch:elasticsearch。此后 elasticsearch 启动正常。但重新启动时再次出现同样的问题。
尝试将 /usr/lib/systemd/system/elasticsearch.service 服务文件中的 PID_DIR 文件夹更改为 /var/run,但出现了不同的错误:
java.io.FileNotFoundException:/var/run/elasticsearch.pid(权限被拒绝)
我注意到的另一件事是,当我在 /var/run 中手动创建目录并启动 elasticsearch 时,它似乎工作正常,但 GET /_nodes 不会返回任何操作系统或文件系统的统计信息。这可能是一个完全不相关的问题,但我注意到这一点是因为我使用 Opserver 来监控我的集群,它没有显示此节点的操作系统/硬件统计信息(在重启失败之前它运行良好)。
Linux 版本:Ubuntu 16.04 Elasticsearch 版本:1.7.3
意识到这个问题影响了 Elasticsearch 1.6 -https://github.com/elastic/elasticsearch/issues/11594
答案1
我偶然发现了类似的事情。
我跟着这个答案并配置的systemd
功能tmpfiles.d(5)
以便在启动时创建它。