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

40

我正在尝试确定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       

更新

我的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日志并更新错误日志。 - eliasah
你能检查一下9200上正在运行的东西吗? - Ymartin
9个回答

78

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

您需要以与初始化脚本相同的用户和参数手动运行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 $?

3
谢谢!我已经提交了一个错误报告,如果有人想要“我也遇到过”,请参与。 - Jeremy Logan
我只想评论一下,在使用Vagrant时,我遇到了由于内存耗尽而引起的这个问题。 - Subtubes
1
可能因人而异,但我不得不在以 DAEMON_OPTS= 开头的行后面添加这一行。 - toon81

26

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]]

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

chown -R elasticsearch: /var/lib/elasticsearch

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

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

这行代码完全是垃圾,肯定会导致程序退出。

现在应该终于开始了。


3
你可以选择取消注释/etc/defaults/elasticsearch中的START_DAEMON行,而不是调整init.d脚本。 - rich remer
1
谢谢,这个非常有帮助。不过我想知道为什么Ubuntu本身没有正确配置它呢。 - apotonick
只需要第一步就对我起作用了(仍然多了一步)。 - Mark

11
如果您使用的是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。参考资料:链接

哇,你真是我的英雄!我已经找了好几个小时了! - Donny van V
1
谢谢,伙计。很高兴我的回答能够为你节省时间。 - Ronak Jain
你知道如何解决Docker和Plesk的问题吗?目前我的ElasticSearch正在运行Docker上,但我不知道如何在Docker上修复它。找到这个解决方案已经很难了,用Docker应用它更难:P - Donny van V
我不使用Docker,但我相信您可以通过Docker配置设置更改jvm.options。如果这不可行,请尝试创建自己的jvm.options并将其替换为您的配置服务器中的文件。 - Ronak Jain
当我将-Xms512m和-Xmx512m更改后,出现了相同的问题,是否有任何替代方法! - Rizwan Patel
这是较新的默认堆要求。检查您的 ls /tmp/hs_err_pid*.log,看看是否会导致任何内存问题。 - Ronak Jain

8

虽然在 Elasticsearch 1.7.3 中,被接受的答案命令(command)对我有用,但是在 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

3

今天早上我遇到了相同的问题。经过大量调查,我们发现这是由于Java 8安装失败引起的。在修复Java 8安装后一切都正常了。


1
命令行参数可以在配置文件中设置,@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

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

This command resolved my issue:

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

引用自@imsaar的github


这在我的DigitalOcean Ubuntu droplet上运行良好。谢谢! - Artistan

1

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


0

我在执行apt-get dist-upgrade命令后,也遇到了同样的问题 - JAVA被更新为"Java(TM) SE Runtime Environment (build 1.8.0_91-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)"版本。

我的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。

希望这能帮到其他人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接