为什么Elasticsearch在Ubuntu 16.04上手动启动但不作为服务启动? [英] Why is Elasticsearch starting manually but not starting as a service on Ubuntu 16.04?

查看:92
本文介绍了为什么Elasticsearch在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安装说明


  1. / etc / default / elasticsearch START_DAEMON = true c>并重新启动服务。

  2. 如果系统具有2GB RAM(在我的情况下为true),请设置 ES_HEAP_SIZE = 1g

  3. / usr / share / elasticsearch 中检查elasticsearch目录的权限。可能是 root 拥有这些文件,这不理想如果您还不知道,以root身份运行任何服务都会使您的基础架构受到攻击者的利用。

  4. #3中的诱惑在于设置 ES_USER = root ES_GROUP = root 可以解决您的问题。 Elasticsearch将从服务开始(即使他们的产品文档声称ES不会以 root 身份运行)。 请勿这样做。

  5. 相反,请检查 elasticsearch 用户是否在本地,

  1. Set START_DAEMON=true in /etc/default/elasticsearch and restart service.
  2. If the system has 2GB of RAM (true in my case), set ES_HEAP_SIZE=1g
  3. Check the permissions of the elasticsearch directory in /usr/share/elasticsearch. Chances are that root owns these, which is not ideal. If you don't know already, running any service as root exposes your infrastructure to exploitation by attackers.
  4. The temptation in #3 is to set ES_USER=root and ES_GROUP=root which will solve your problem. Elasticsearch will start as a service (even though their product documentation alleges that ES won't operate as root). DON'T DO THAT.
  5. 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屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆