为什么elasticsearch不能在Ubuntu 14.04上运行?

我试图确定是否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服务初始化脚本在启动失败时不会在控制台或日志文件上打印任何错误信息,而是可笑地显示[OK]

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

在我的安装了elasticsearch-1.4.1.deb的Ubuntu 14.10上,没有任何path改变,运行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 $? 

elasticsearch用户无法写入PID文件,因为它无权在/ var / run /中创build文件:

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

解决方法:创build目录/ 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]] 

同样,资源对于elasticsearch用户没有正确的权限。

 chown -R elasticsearch: /var/lib/elasticsearch 

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

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

这行是完全垃圾,并保证会导致退出。

现在应该终于开始了。

如果您使用Elasticsearch 5.0。

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

检查ls /tmp/hs_err_pid*.log文件,在日志中您将看到JVM由于内存不足而无法启动ES。

您可以调整/etc/elasticsearch/jvm.options的堆大小设置。 如果您位于具有2 GB RAM的盒子上,则分别将-Xms1g-Xmx1g行调整为-Xms2g-Xmx2g 。 如果你打算使用1 GB内存的盒子,我build议使用-Xms512m-Xmx512m.

参考

虽然接受的答案命令使用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问题

上面的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 

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

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

/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 

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

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

引用@imsaar github

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

在完成apt-get dist-upgrade后,我得到了同样的结论 – JAVA被更新为“Java(TM)SE运行时环境(build 1.8.0_91-b14)Java HotSpot(TM)64位服务器虚拟机25.91-b14,混合模式)“版本。

我的ES不想开始。 我在这里find了原因(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。

我希望这会帮助别人。