【问题标题】:why elasticsearch won't run on Ubuntu 14.04?为什么 elasticsearch 不能在 Ubuntu 14.04 上运行?
【发布时间】:2014-12-03 14:18:33
【问题描述】:

我正在尝试确定 elasticsearch 实例是否正在运行,但它似乎没有:

ubuntu@ubuntu:~$ sudo service elasticsearch status
 * elasticsearch is not running
ubuntu@ubuntu:~$ sudo service elasticsearch start
 * Starting Elasticsearch Server  [ OK ] 
ubuntu@ubuntu:~$ sudo service elasticsearch status
 * elasticsearch is not running
and

ubuntu@ubuntu:~$ sudo /etc/init.d/elasticsearch status
 * elasticsearch is not running
ubuntu@ubuntu:~$ sudo /etc/init.d/elasticsearch start
 * Starting Elasticsearch Server  [ OK ] 
ubuntu@ubuntu:~$ sudo /etc/init.d/elasticsearch status
 * elasticsearch is not running
ubuntu@ubuntu:/etc/elasticsearch# sudo service elasticsearch restart
 * Stopping Elasticsearch Server  [ OK ] 
 * Starting Elasticsearch Server  [ OK ] 
ubuntu@ubuntu:/etc/elasticsearch# sudo service elasticsearch status
 * elasticsearch is not running

ubuntu@ubuntu:~$ curl -XGET localhost:9200/_nodes/_all/process?pretty
curl: (7) Failed to connect to localhost port 9200: Connection refused

ubuntu@ubuntu:/etc/elasticsearch$ sudo netstat -nlp
tcp6       0      0 :::9300                 :::*                    LISTEN      4413/java       

UPD

我的 elasticsearch.log:

[2014-12-03 00:00:02,161][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] creating index, cause [auto(bulk api)], shards [5]/[1], mappings [_default_]
[2014-12-03 00:00:02,617][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] update_mapping [logs] (dynamic)
[2014-12-03 00:00:12,737][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] update_mapping [logs] (dynamic)
[2014-12-03 00:00:17,587][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] update_mapping [logs] (dynamic)
[2014-12-03 00:00:18,842][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] update_mapping [logs] (dynamic)
[2014-12-03 01:00:01,430][INFO ][cluster.metadata         ] [Zero] [logstash-2014.11.25] deleting index
[2014-12-03 09:46:57,461][INFO ][cluster.metadata         ] [Zero] [logstash-2014.12.03] update_mapping [logs] (dynamic)

【问题讨论】:

  • 检查 elasticsearch 日志并使用错误日志进行更新
  • 你能检查一下 9200 上运行的是什么吗?

标签: ubuntu elasticsearch


【解决方案1】:

Elasticsearch 服务初始化脚本在启动失败时不会在控制台或日志文件上打印任何错误信息,而是显示[OK]

您必须使用与 init 脚本相同的用户和参数手动运行 elaticsearch 以检查出现了什么问题。错误信息将打印在控制台上。

在我安装了 elasticsearch-1.4.1.deb 的 Ubuntu 14.10 上,没有更改任何路径,运行 elastisearch 的命令是:

sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch -d -p /var/run/elasticsearch.pid --default.config=/etc/elasticsearch/elasticsearch.yml --default.path.home=/usr/share/elasticsearch --default.path.logs=/var/log/elasticsearch --default.path.data=/var/lib/elasticsearch --default.path.work=/tmp/elasticsearch --default.path.conf=/etc/elasticsearch

我刚刚在/etc/init.d/elasticsearch 中添加了一行以打印出上述命令:

# Start Daemon
log_daemon_msg "sudo -u $ES_USER $DAEMON $DAEMON_OPTS"    # <-- Add this line
start-stop-daemon --start -b --user "$ES_USER" -c "$ES_USER" --pidfile "$PID_FILE" --exec $DAEMON -- $DAEMON_OPTS
log_end_msg $?

【讨论】:

  • 谢谢!如果有人想“我也是”,我打开了bug report
  • 我只是评论说我在 Vagrant 上遇到了由于内存不足引起的这个问题。
  • YMMV 但我必须在以 DAEMON_OPTS= 开头的行之后添加行。
【解决方案2】:

elasticsearch用户无法写入PID文件,因为它没有在/var/run/中创建文件的权限:

FileNotFoundException[/var/run/elasticsearch.pid (Keine Berechtigung)]

修复:创建目录 /var/run/elasticsearch/,将其所有权更改为 elasticsearch:elasticsearch,并在 init 脚本中将 PID 文件位置更改为该目录。

mkdir -p /var/run/elasticsearch
chown elasticsearch: /var/run/elasticsearch
sed -e 's|^PID_FILE=.*$|PID_FILE=/var/run/$NAME/$NAME.pid|g' -i /etc/init.d/elasticsearch

一旦你走到这一步,你可能会看到下一个错误:

ElasticsearchIllegalStateException[Failed to obtain node lock, is the following location writable?: [/var/lib/elasticsearch/elasticsearch]]

再次,资源没有弹性搜索用户的正确权限。

chown -R elasticsearch: /var/lib/elasticsearch

还没有完成。现在你必须编辑 /etc/init.d/elasticsearch 并删除这一行:

test "$START_DAEMON" == true || exit 0

这条线完全是垃圾,保证会导致退出。

现在应该终于开始了。

【讨论】:

  • 仅供参考,您也可以取消注释 /etc/defaults/elasticsearch 中的 START_DAEMON 行,而不是调整 init.d 脚本。
  • 谢谢,这个很有帮助。不过,我想知道为什么 Ubuntu 本身没有正确配置它。
  • 只用了第一步就为我工作了(还有一步太多)。
【解决方案3】:

如果您使用的是 Elasticsearch > 5.0

Elasticsearch 5.0 的最小/最大堆大小要求现在都默认为 2gb

查看ls /tmp/hs_err_pid*.log文件,在日志中你会看到JVM因为内存不足而无法启动ES。

您可以在/etc/elasticsearch/jvm.options 中调整堆大小设置。如果您使用的是具有 2 GB RAM 的机器,请将行 -Xms2g-Xmx2g 分别调整为 -Xms1g-Xmx1g。如果您要使用 1 GB RAM 的机器,我建议您使用 -Xms512m-Xmx512m.

Reference

【讨论】:

  • 伙计,你是我的英雄!我一直在寻找这个!
  • 谢谢伙计。很高兴我的回答能够节省您的时间。
  • 您知道如何使用 Docker 和 Plesk 解决这个问题吗? Docker 目前正在运行我的 ElasticSearch,我不知道如何使用 docker 修复它。找到这个解决方案很难,用 docker 应用它更难:P
  • 我不使用 docker,但我相信您可以通过 docker 配置设置更改 jvm.options。如果那不可能,请尝试创建您自己的 jvm.options 并在您的配置服务器中替换它。
  • 当我更改为 Xms512m 和 -Xmx512m 时出现同样的错误任何替代方法!
【解决方案4】:

虽然接受的答案命令对我使用 Elasticsearch 1.7.3 有效,但在 Elasticsearch >2.0 中运行接受的答案命令会产生一些变化

es.default.config is no longer supported. elasticsearch.yml 
must be placed in the config directory and cannot be renamed

Github Issue

上述 Github 问题中指定的命令现在是:

sudo -u elasticsearch /usr/share/elasticsearch/bin/elasticsearch -d -p /var/run/elasticsearch.pid --path.conf=/etc/elasticsearch --default.path.home=/usr/share/elasticsearch --default.path.logs=/var/log/elasticsearch --default.path.data=/var/lib/elasticsearch --default.path.work=/tmp/elasticsearch --default.path.conf=/etc/elasticsearch

【讨论】:

    【解决方案5】:

    对我来说,这个问题是由 Elasticsearch 数据和/或日志目录的磁盘使用率为 100% 引起的。运行df -h 以查看您的 Elasticsearch 进程用于数据和日志的目录是否有可用空间。

    【讨论】:

      【解决方案6】:

      这个命令解决了我的问题:

      sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
      

      Referenced from @imsaar github

      【讨论】:

      • 这在 digitalocean 上的 Ubuntu droplet 上对我有用。谢谢!
      【解决方案7】:

      今天早上我遇到了同样的问题。经过大量挖掘,我们发现这是由于 Java 8 安装不成功引起的。修复 Java 8 安装后一切正常。

      【讨论】:

        【解决方案8】:

        @aleung所指的命令行参数可以在配置文件中设置。默认情况下,参数被注释掉。

        /etc/default/elasticsearch中设置如下

        ################################
        # Elasticsearch
        ################################
        
        # Elasticsearch home directory
        ES_HOME=/usr/share/elasticsearch
        
        # Elasticsearch configuration directory
        CONF_DIR=/etc/elasticsearch
        
        # Elasticsearch data directory
        DATA_DIR=/var/lib/elasticsearch
        
        # Elasticsearch logs directory
        LOG_DIR=/var/log/elasticsearch
        
        # Elasticsearch PID directory
        PID_DIR=/var/run/elasticsearch
        

        【讨论】:

          【解决方案9】:

          在完成 apt-get dist-upgrade 后,我也遇到了同样的问题 - JAVA 已更新为“Java(TM) SE 运行时环境 (build 1.8.0_91-b14) Java HotSpot(TM) 64 位服务器 VM(内部版本 25.91-b14,混合模式)”版本。

          我的 ES 不想启动。我在这里找到了原因(tail -n100 /var/log/elasticsearch/elasticsearch.log):

          java.lang.IllegalArgumentException: Plugin [license] is incompatible with Elasticsearch [2.3.2]. Was designed for version [2.3.1]
          

          我刚刚删除了插件(bin/plugin remove license)并成功启动了ES。

          我希望这对其他人有所帮助。

          【讨论】:

            猜你喜欢
            • 2014-06-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-07-10
            • 2016-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多