为什么Elasticsearch在Ubuntu 16.04上手动启动但不作为服务启动? [英] Why is Elasticsearch starting manually but not starting as a service on Ubuntu 16.04?
问题描述
我在运行Ubuntu 16.04 LTS的ARM Odroid XU4上安装了ELasticsearch 6和JDK 1.8.0_161。没有错误。
I installed ELasticsearch 6 and JDK 1.8.0_161 on my ARM Odroid XU4 running Ubuntu 16.04 LTS. No errors.
当我尝试将Elasticsearch作为服务启动时,我无法在端口9200上连接到本地主机,并且服务状态显示:
When I attempt to start Elasticsearch as a service, I can't connect to localhost on port 9200 and the service status prints:
~ $ > sudo service elasticsearch status
● elasticsearch.service - LSB: Starts elasticsearch
Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
Active: active (exited) since Mon 2018-01-22 10:43:18 UTC; 9min ago
Docs: man:systemd-sysv-generator(8)
Jan 22 10:43:18 lego systemd[1]: Starting LSB: Starts elasticsearch...
Jan 22 10:43:18 lego systemd[1]: Started LSB: Starts elasticsearch.
Jan 22 10:44:07 lego systemd[1]: Started LSB: Starts elasticsearch.
没有日志。不知道在哪里看。在 /etc/security/limits.conf
中将nofile限制设置为65536。我不知道还能在哪里寻找诊断程序。
No logs. No clue where to look. nofile limits are set to 65536 in /etc/security/limits.conf
. I don't know where else to look for diagnostics.
尽管如此,当我通过 sudo手动启动Elasticsearch时/ usr / shared / elasticsearch / bin / elasticsearch
,它按预期工作:
Although, when I start Elasticsearch manually via sudo /usr/shared/elasticsearch/bin/elasticsearch
, it works as expected:
~ $ > sudo /usr/share/elasticsearch/bin/elasticsearch
[2018-01-22 10:55:55,944][WARN ][bootstrap ] jvm uses the client vm, make sure to run `java` with the server vm for best performance by adding `-server` to the command line
[2018-01-22 10:55:56,073][INFO ][node ] [Ariel] version[1.7.3], pid[1126], build[NA/NA]
[2018-01-22 10:55:56,074][INFO ][node ] [Ariel] initializing ...
[2018-01-22 10:55:56,521][INFO ][plugins ] [Ariel] loaded [], sites []
[2018-01-22 10:55:56,638][INFO ][env ] [Ariel] using [1] data paths, mounts [[/ (/dev/mmcblk0p2)]], net usable_space
[54.4gb], net total_space [57.2gb], types [ext4]
[2018-01-22 10:56:01,853][INFO ][node ] [Ariel] initialized
[2018-01-22 10:56:01,854][INFO ][node ] [Ariel] starting ...
[2018-01-22 10:56:02,080][INFO ][transport ] [Ariel] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.0.103:9300]}
[2018-01-22 10:56:02,125][INFO ][discovery ] [Ariel] elasticsearch/FtFOljAORnevIAOAFabptg
[2018-01-22 10:56:05,933][INFO ][cluster.service ] [Ariel] new_master [Ariel][FtFOljAORnevIAOAFabptg][lego]
[inet[/192.168.0.103:9300]], reason: zen-disco-join (elected_as_master)
[2018-01-22 10:56:05,987][INFO ][http ] [Ariel] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.0.103:9200]}
[2018-01-22 10:56:05,988][INFO ][node ] [Ariel] started
[2018-01-22 10:56:06,014][INFO ][gateway ] [Ariel]
recovered [0] indices into cluster_state
我错过了哪个重要步骤?我在这里关注了所有内容: https://www.elastic.co /guide/zh-CN/elasticsearch/reference/current/deb.html
What important step am I missing? I followed everything here: https://www.elastic.co/guide/en/elasticsearch/reference/current/deb.html
编辑:我尝试设置 START_DAEMON = true $
/ etc / default / elasticsearch
中的c $ c>确实很重要,但这也没有实现。深入研究 / etc / default / elasticsearch
内部设置的值,我发现了这个问题。请参阅我的最终答案,以获取整个解决方案的完整详细信息。
I tried setting START_DAEMON=true
in /etc/default/elasticsearch
, which is important indeed, but that did not do the trick either. Looking deeper into the values set inside /etc/default/elasticsearch
, I found the problem in my case. See my final answer for a complete breakdown of the total solution.
推荐答案
正如@Suaro指出的那样:我们的问题与什么有关在具有几乎相同症状的问题中进行了讨论和此线程重申了START_DAEMON解决方案。这是一个好的开始,但是对我而言,它没有提供全面的解决方案。我仔细研究了权限,堆大小和所有权,以找到最终解决方案。
As @Suaro states: our problem is related to what is discussed in this question with nearly identical symptoms and this thread that reiterates the START_DAEMON solution in the first link. That is a good start, but for me that didn't offer a comprehensive fix. I looked deeper at permissions, heap size, and ownership to find a final solution.
这些是按照 Elasticsearch debian安装说明:
- 在
/ etc / default / elasticsearch $ c $中设置
START_DAEMON = true
c>并重新启动服务。 - 如果系统具有2GB RAM(在我的情况下为true),请设置
ES_HEAP_SIZE = 1g
- 在
/ usr / share / elasticsearch
中检查elasticsearch目录的权限。可能是root
拥有这些文件,这不理想。 如果您还不知道,以root身份运行任何服务都会使您的基础架构受到攻击者的利用。 - #3中的诱惑在于设置
ES_USER = root
和ES_GROUP = root
可以解决您的问题。 Elasticsearch将从服务开始(即使他们的产品文档声称ES不会以root
身份运行)。 请勿这样做。 -
相反,请检查
elasticsearch
用户是否在本地,
- Set
START_DAEMON=true
in/etc/default/elasticsearch
and restart service. - If the system has 2GB of RAM (true in my case), set
ES_HEAP_SIZE=1g
- Check the permissions of the elasticsearch directory in
/usr/share/elasticsearch
. Chances are thatroot
owns these, which is not ideal. If you don't know already, running any service as root exposes your infrastructure to exploitation by attackers. - The temptation in #3 is to set
ES_USER=root
andES_GROUP=root
which will solve your problem. Elasticsearch will start as a service (even though their product documentation alleges that ES won't operate asroot
). DON'T DO THAT. Instead, check that the
elasticsearch
user exists locally and that the group of the same name exists too.
$ cut -d: -f1 /etc/passwd
$ cut -d: -f1 /etc/group
然后,更改所有elasticsearch文件夹的所有权和$ elasticsearch
用户和组的资源。
$ ~ $ > ll /usr/share/elasticsearch/
total 8.0K
drwxr-xr-x 2 elasticsearch 4.0K Jan 22 10:02 bin/
lrwxrwxrwx 1 elasticsearch 18 Dec 24 2015 config -> /etc/elasticsearch/
lrwxrwxrwx 1 elasticsearch 22 Dec 24 2015 data -> /var/lib/elasticsearch/
lrwxrwxrwx 1 elasticsearch 22 Dec 24 2015 logs -> /var/log/elasticsearch/
drwxr-xr-x 2 elasticsearch 4.0K Dec 24 2015 plugins/
# ^-- Take note that the symlinked directories need to be adjusted too
$ sudo chown -R elasticsearch:elasticsearch /usr/share/elasticsearch
$ sudo chown -R elasticsearch:elasticsearch /etc/elasticsearch/
$ sudo chown -R elasticsearch:elasticsearch /var/lib/elasticsearch/
$ sudo chown -R elasticsearch:elasticsearch /var/log/elasticsearch/
然后,在<$ c $中设置值 ES_USER = elasticsearch
和 ES_GROUP = elasticsearch
c> / etc / default / elasticsearch (如果尚未以这种方式设置)(以防您因#4屈服于诱惑)。
Then, set the values ES_USER=elasticsearch
and ES_GROUP=elasticsearch
in /etc/default/elasticsearch
if they aren't set that way already (in case you gave in to temptation per #4).
再试一次...
~ $ > sudo service elasticsearch status
● elasticsearch.service - LSB: Starts elasticsearch
Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
Active: active (exited) since Mon 2018-01-22 20:51:29 UTC; 2min 25s ago
Docs: man:systemd-sysv-generator(8)
Process: 3133 ExecStop=/etc/init.d/elasticsearch stop (code=exited, status=0/SUCCESS)
Process: 3209 ExecStart=/etc/init.d/elasticsearch start (code=exited, status=0/SUCCESS)
~ $ > sudo systemctl restart elasticsearch.service
~ $ > sudo service elasticsearch status
● elasticsearch.service - LSB: Starts elasticsearch
Loaded: loaded (/etc/init.d/elasticsearch; bad; vendor preset: enabled)
Active: active (running) since Mon 2018-01-22 20:54:05 UTC; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 3306 ExecStop=/etc/init.d/elasticsearch stop (code=exited, status=0/SUCCESS)
Process: 3340 ExecStart=/etc/init.d/elasticsearch start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/elasticsearch.service
└─3391 /usr/lib/jvm/java-8-openjdk-armhf/bin/java -Xms1g -Xmx1g -Djava.awt.headless=true -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC -Dfile.encoding=UTF-8 -Delasticsearch -Des.pidfil
Jan 22 20:54:04 lego systemd[1]: Starting LSB: Starts elasticsearch...
Jan 22 20:54:05 lego elasticsearch[3340]: * Starting Elasticsearch Server
Jan 22 20:54:05 lego elasticsearch[3340]: ...done.
Jan 22 20:54:05 lego systemd[1]: Started LSB: Starts elasticsearch.
Jan 22 20:51:29 lego systemd[1]: Starting LSB: Starts elasticsearch...
EtViolà!
~ $ > curl -XGET 'localhost:9200/?pretty'
{
"status" : 200,
"name" : "Svarog",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.7.3",
"build_hash" : "NA",
"build_timestamp" : "NA",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
这篇关于为什么Elasticsearch在Ubuntu 16.04上手动启动但不作为服务启动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!