【问题标题】:Why is Elasticsearch starting manually but not starting as a service on Ubuntu 16.04?为什么 Elasticsearch 在 Ubuntu 16.04 上手动启动,但没有作为服务启动?
【发布时间】:2018-06-30 23:51:08
【问题描述】:

我在运行 Ubuntu 16.04 LTS 的 ARM Odroid XU4 上安装了 ELasticsearch 6 和 JDK 1.8.0_161。没有错误。

当我尝试将 Elasticsearch 作为服务启动时,我无法连接到端口 9200 上的 localhost 并且服务状态打印:

~ $ > 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。我不知道还能去哪里寻找诊断工具。

虽然,当我通过 sudo /usr/shared/elasticsearch/bin/elasticsearch 手动启动 Elasticsearch 时,它按预期工作:

~ $ > 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/en/elasticsearch/reference/current/deb.html

编辑:我尝试在/etc/default/elasticsearch 中设置START_DAEMON=true,这确实很重要,但这也没有奏效。深入研究/etc/default/elasticsearch 中设置的值,我发现了我的问题。请参阅我的最终答案,了解整个解决方案的完整细分。

【问题讨论】:

    标签: ubuntu elasticsearch


    【解决方案1】:

    正如@Suaro 所说:我们的问题与第一个链接中this question with nearly identical symptomsthis thread that reiterates the START_DAEMON solution 中讨论的内容有关。这是一个好的开始,但对我来说,这并没有提供全面的修复。我深入研究了权限、堆大小和所有权,以找到最终解决方案。

    这些是截至 2018 年 1 月根据 Elasticsearch debian installation instructions 在 Ubuntu 16.04 上安装的 Elasticsearch 6 的步骤:

    1. /etc/default/elasticsearch中设置START_DAEMON=true并重启服务。
    2. 如果系统有 2GB 内存(在我的情况下是真的),设置ES_HEAP_SIZE=1g
    3. 检查/usr/share/elasticsearch中elasticsearch目录的权限。 root 有可能拥有这些,这不理想如果您还不知道,以 root 身份运行任何服务都会将您的基础架构暴露给攻击者利用。
    4. #3 中的诱惑是设置ES_USER=rootES_GROUP=root 这将解决您的问题。 Elasticsearch 将作为服务启动(即使他们的产品文档声称 ES 不会以root 运行)。 不要那样做。
    5. 相反,检查elasticsearch 用户是否在本地存在,并且同名的组也存在。

      $ cut -d: -f1 /etc/passwd
      $ cut -d: -f1 /etc/group
      
    6. 然后,将所有 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/
      
    7. 然后,将值 ES_USER=elasticsearchES_GROUP=elasticsearch 设置在 /etc/default/elasticsearch 中,如果它们还没有这样设置(以防你屈服于 #4 的诱惑)。

      李>
    8. 再试一次...

      ~ $ > 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...
      

    中提琴!

    ~ $ > 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"
    }
    

    【讨论】:

    • 那是“Et Voilà!”
    • 一万次谢谢你,你不知道我现在松了口气。
    【解决方案2】:

    您的问题可能与此问题中讨论的内容有关。

    Can not start elasticsearch as a service in ubuntu 16.04

    https://discuss.elastic.co/t/cant-start-elasticsearch-with-ubuntu-16-04/48730/9

    如果是您的情况,您必须在 /etc/default/elasticsearch 中将 START_DAEMON 更改为 true 并重新启动服务。

    【讨论】:

    • 应该将其视为答案或建议。
    • 我的意图是这是一个答案。你认为我应该把它作为一个建议放在 cmets 中吗?重读我的答案,这可能是一个建议。
    猜你喜欢
    • 2021-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2017-08-31
    • 2017-09-01
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多