elasticsearch单节点启动异常汇总

Posted by 冷眼樵夫 on 11-01,2019

先按照惯例介绍一下基础流程:

ElasticSearch(ES) 现在已经随着技术发展越来越火爆了。它基于Lucence搜索引擎,实现RestFul风格,开箱即用。广泛用于在网站上做站内搜索。

下载

先贴地址:
https://www.elastic.co/cn/downloads/elasticsearch

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-linux-x86_64.tar.gz

本文以linux系统为例:
file

安装

file
解压:

tar -zxvf elasticsearch-7.4.2-linux-x86_64.tar.gz

启动:

./bin/elasticsearch
./bin/elasticsearch -d -p pid

问题及解决方案

1:问题
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException:can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1]
... 6 more

解决方案:

如果是用root账号启动,就会报这个错误,这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,
为了系统安全考虑, 建议创建一个单独的用户用来运行ElasticSearch

创建elsearch用户组及elsearch用户

groupadd elsearch
useradd elsearch -g elsearch -p elasticsearch

更改elasticsearch文件夹及内部文件的所属用户及组为elsearch:elsearch

cd /elastic
chown -R elsearch:elsearch elasticsearch

切换到elsearch用户再启动

su elsearch cd elasticsearch/bin
./elasticsearch

2:问题
java.lang.UnsupportedOperationException: seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
at org.elasticsearch.bootstrap.SystemCallFilter.linuxImpl(SystemCallFilter.java:341) ~[elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.SystemCallFilter.init(SystemCallFilter.java:616) ~[elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.JNANatives.tryInstallSystemCallFilter(JNANatives.java:258) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Natives.tryInstallSystemCallFilter(Natives.java:113) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:109) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) [elasticsearch-cli-6.3.1.jar:6.3.1]
at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) [elasticsearch-6.3.1.jar:6.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) [elasticsearch-6.3.1.jar:6.3.1]

解决方案
seccomp是linux kernel从2.6.23版本开始所支持的一种安全机制,seccomp(安全计算模式的简称)是Linux内核中的计算机安全设施。
它被合并到2005年3月8日发布的内核版本2.6.12中的Linux内核主线上。
seccomp允许进程单向转换为“安全”状态,除了exit(),sigreturn(),read()和write()之外,它不能对已经打开的文件描述符进行任何系统调用。
如果它尝试任何其他系统调用,内核将使用SIGKILL或SIGSYS终止进程。
从这个意义上说,它不会虚拟化系统的资源,而是将过程与它们完全隔离开来。
环境的内核是Linux node 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

处理过程,在elasticsearch.yml 文件末尾加上bootstrap.system_call_filter: false

3:问题
安装完成,只能在安装的机器上访问,curl http://localhost:9200/
外部机器是访问不了的,因为es默认配置,只能闭环访问。可以通过修改配置文件$ES_HOME/config/elasticsearch.yml,

解决方案:

修改network.host: 0.0.0.0,并添加discovery.type: single-node
如果只是修改了network.host: 0.0.0.0,ES会认为你现在是生产环境,然后启动的时候就会对环境做出各种各样的检查:bootstrap checks,确保你的环境不会出现问题。


0评论