Elasticsearch 从 1.4.1 升级到 1.4.4 后无法启动服务

Cannot start service after Elasticsearch upgrade from 1.4.1 to 1.4.4

我已经使用 ELS 1.4.1 在 Windows 7 版本 x64 上成功安装了 Elasticsearch。升级到 Kibana 4 RTM 后,需要 ELS 1.4.4.

为了进行升级,我执行了以下步骤:

  1. 已下载 ELS 1.4.4
  2. 停止并删除了 ELS 1.4.1 服务
  3. 将当前安装目录重命名为 elasticsearch_bak
  4. 解压 1.4.4 zip 到 elasticsearch 目录
  5. 比较 /config/elasticsearch.yml 和 config/logging.yml 并应用更改(在底部包含以下附加设置)
# Helps Chrome work properly
http.cors.allow-origin: "/.*/"
http.cors.enabled: true

启动服务后,它会在几秒钟内停止。日志如下:

Java版本

(注意这是为了开发目的)

java version "1.8.0_31"
Java(TM) SE Runtime Environment (build 1.8.0_31-b13)
Java HotSpot(TM) Client VM (build 25.31-b07, mixed mode, sharing)

事件日志

The Elasticsearch 1.4.4 (elasticsearch) service terminated with service-specific error Incorrect function..

elasticsearch-stderr-2015.05.20.log

2015-02-20 08:49:13 Commons Daemon procrun stderr initialized
Exception in thread "main" ror: Could not initialize class org.elasticsearch.Version
    at org.elasticsearch.bootstrap.Bootstrap.buildErrorMessage(Bootstrap.java:254)
    at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:238)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)
The data area passed to a system call is too small.

Failed to start service

elasticsearch-stdout-2015.05.20.log

2015-02-20 08:46:03 Commons Daemon procrun stdout initialized

elasticsearch.2015-02-20.log

[2015-02-20 08:49:14] [info]  ( prunsrv.c:1284) [ 8560] Service started in 1198 ms.
[2015-02-20 08:49:14] [debug] ( prunsrv.c:844 ) [ 8560] reportServiceStatusE: 4, 0, 0, 0
[2015-02-20 08:49:14] [debug] ( prunsrv.c:1528) [ 8560] Waiting for worker to finish...
[2015-02-20 08:49:14] [debug] ( prunsrv.c:1533) [ 8560] Worker finished.
[2015-02-20 08:49:14] [debug] ( prunsrv.c:1559) [ 8560] Waiting for all threads to exit
[2015-02-20 08:49:14] [debug] ( prunsrv.c:844 ) [ 8560] reportServiceStatusE: 3, 0, 0, 0
[2015-02-20 08:49:14] [debug] ( prunsrv.c:1563) [ 8560] JVM destroyed.
[2015-02-20 08:49:14] [debug] ( prunsrv.c:844 ) [ 8560] reportServiceStatusE: 1, 1066, 0, 1
[2015-02-20 08:49:14] [info]  ( prunsrv.c:1598) [10064] Run service finished.
[2015-02-20 08:49:14] [info]  ( prunsrv.c:1764) [10064] Commons Daemon procrun finished
[2015-02-20 08:49:14] [info]  ( prunsrv.c:1764) [10064] Commons Daemon procrun finished
[2015-02-20 08:49:16] [error] ( prunsrv.c:746 ) [10116] Failed to start 'elasticsearch' service
[2015-02-20 08:49:16] [error] ( prunsrv.c:746 ) [10116] The data area passed to a system call is too small.
[2015-02-20 08:49:16] [info]  ( prunsrv.c:754 ) [10116] Start service finished.
[2015-02-20 08:49:16] [error] ( prunsrv.c:1755) [10116] Commons Daemon procrun failed with exit value: 5 (Failed to start service)
[2015-02-20 08:49:16] [error] ( prunsrv.c:1755) [10116] The data area passed to a system call is too small.

如果我从命令提示符 运行 elasticsearch,我得到这个错误:

c:\elk\elasticsearch\bin>elasticsearch
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.Version
        at org.elasticsearch.bootstrap.Bootstrap.buildErrorMessage(Bootstrap.java:254)
        at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:238)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)

我遇到了完全相同的问题,下面是我如何解决它的。

这是我的设置

我正在使用 Windows Server 2008 R2 Enterprise - 64 位版本。 Java (JRE) 版本 1.8.0_25 一切正常。 Elastic search 已安装为 Windows 服务。

就在问题出现之前,我将 Java 更新到版本 1.8.0_31 并重新启动了机器。

这是我走过的步数

首先,在重新启动机器后,我注意到 ElasticSearch 服务已停止。尝试启动后它又停止了。

这是我在事件日志中得到的问题:

The Elasticsearch 1.4.1 (elasticsearch-service-x64) service terminated with service-specific error Incorrect function..

这是我 elasticsearch-service-x64.2015-02-27.log 中的内容:

[2015-02-27 14:38:29] [info]  [ 4948] Commons Daemon procrun (1.0.15.0 64-bit) started
[2015-02-27 14:38:29] [info]  [ 4948] Running 'elasticsearch-service-x64' Service...
[2015-02-27 14:38:29] [info]  [ 3048] Starting service...
[2015-02-27 14:38:29] [error] [ 3048] Failed creating java C:\Program Files\Java\jre1.8.0_25\bin\server\jvm.dll
[2015-02-27 14:38:29] [error] [ 3048] The system cannot find the path specified.
[2015-02-27 14:38:29] [error] [ 3048] ServiceStart returned 1
[2015-02-27 14:38:29] [error] [ 3048] The system cannot find the path specified.
[2015-02-27 14:38:29] [info]  [ 4948] Run service finished.
[2015-02-27 14:38:29] [info]  [ 4948] Commons Daemon procrun finished

然后我把JAVA_HOME系统变量的值改成了C:\Program Files\Java\jre1.8.0_31

当时的问题是:

Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class org.elasticsearch.Version
        at org.elasticsearch.bootstrap.Bootstrap.buildErrorMessage(Bootstrap.java:254)
        at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:238)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32)

解决问题的方法

  1. 我已经从 ElasticSearch 文件夹中完全删除文件夹 binconfiglibplugins

    一定不要删除data目录,因为里面有你的索引!

  2. elasticsearch-1.4.4.zip.
  3. 中解压了相同的文件夹(binconfiglib
  4. 运行 SC DELETE elasticsearch-service-x64 在命令提示符中以管理员身份(删除已安装的服务)
  5. 运行 F:\Services\elasticsearch\bin>service.bat install

    Installing service      :  "elasticsearch-service-x64"
    Using JAVA_HOME (64-bit):  "C:\Program Files\Java\jre1.8.0_31"
    The service 'elasticsearch-service-x64' has been installed.
    
  6. 启动服务

然后一切开始正常工作

我也遇到了同样的问题。 它在更新到 Java 的新版本后出现。尽管我将 "JAVA_HOME" 变量的值更改为新的 java 目录,但问题仍然存在。

然后我转到命令提示符,导航到 ES 目录并运行以下命令:

{ElasticSearch directory}\bin>service manager

此命令将打开 Elasticsearch 属性 window。(http://i.stack.imgur.com/QQEPG.png)

然后转到 Java 选项卡并将 Java 虚拟机 的路径更改为 Java 的新版本。在那之后 运行 ES 服务

{ElasticSearch directory}\bin>service start

我安装了另一个版本的elasticsearch。简单地删除旧版本对我有用。

elasticsearch-2.0.0\bin>服务移除

此问题是由 service.bat 与 Elastic 一起分发引起的,它依赖 Apache Common Procrun 并使用未正确解析的环境变量 %JAVA_HOME% 设置 JVM。

所以我通过在 service.bat manager 出现的 GUI 上设置 "Default JVM" 解决了这个问题。

另一种通过命令行解决问题的方法是

elasticsearch-service-x64.exe //US//YOUR_SERVICE_NAME --Jvm auto

elasticsearch-service-x64.exe //US//elasticsearch-service-x64 --Jvm auto

将 JDK 从 jdk1.7.0_21 更新到 jdk1.8.0_77.Changed Java_Home 并且开始正常工作。

对我有用的是 运行 "service manager" 在 bin 文件夹中并将 JVM 设置为默认值。

我 运行 遇到了同样的问题,即使设置了正确的 JAVA_HOME 系统变量,它也没有用。

最终我导航到我的弹性搜索安装的 bin 文件夹和 运行:

service manager

在管理器中,在 Java 选项卡下,我设置了这些选项

-Delasticsearch
-Des.path.home=C:\elasticsearch-2.4.5
-Des.default.path.logs=C:\elasticsearch-2.4.5\logs
-Des.default.path.data=C:\elasticsearch-2.4.5\data
-Des.default.path.conf=C:\elasticsearch-2.4.5\config

保存更改,然后运行

service start