安装elasticsearch遇到的各种问题
以下是我安装elasticsearch遇到的问题一个列表
-
future versions of Elasticsearch will require Java 11; your Java version from [/root/training/jdk1.8.0_181/jre] does not meet this requirement
-
java.lang.RuntimeException: can not run elasticsearch as root
-
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
-
本地物理机不能用IP访问elasticsearch但是可以使用127.0.0.1:9200可以访问
-
外部物理机访问不了elasticsearch
-
修改是外部访问elasticsearch的参数network-host后,报错:
[2020-10-28T09:58:03,528][INFO ][o.e.b.BootstrapChecks ] [bigdata111] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [3] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] -
解决完以上的配置之后又报:[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, c
luster.initial_master_nodes] must be configured
以下是我再Linux下安装elasticsearch步骤和发现到上边的问题的总结和解决办法
在Elasticsearch Service上创建部署时,将自动设置一个主节点和两个数据节点。通过从tar存档安装,您可以在本地启动Elasticsearch的多个实例,以查看多节点集群的行为。
这里首先使用root用户操作的,而且我再root的目录下创建了俩个目录,分别是tools和training,
tools是用来放置各种安装包的,training是防止各种解压文件的
- 下载elasticsearch
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz
- 解压elasticsearch
tar -zxvf https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz -C ../training/
-
解压完进入bin目录启动以下elasticsearch
./elasticsearch
在执行完这句话的时候我们就碰到了第一个问题:future versions of Elasticsearch will require Java 11; your Java version from [/root/training/jdk1.8.0_181/jre] does not meet this requirement
单然下边还有好多日志,我们一个一个的解决。这个报错的意思机库是这个版本的elastic search需要的是java11,而你的jdk版本是1.8的,和我们当前需要的版本不匹配。
这个是因为我在Linux是安装了jdk1.8的,而我们下载的这个elastic search需要的jdk是11的,我们其实不需要单独的下载一个jdk11,因为在elasticsearch中已经有一个jdk了。如下图所示:
因为我们在Linux配置了JAVA_HOME所以默认的elasticsearch就只是使用了我们1.8的jdk,我们只需让elasticsearch访问它自带的jdk就可以了,我们需要修改命令脚本
[root@centos7 bin]# vi elasticsearch
添加以下几行内容
#配置自己的jdk11
export JAVA_HOME=/root/elasticsearch-7.6.2/
export PATH=$JAVA_HOME/bin:$PATH
#添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/root/elasticsearch-7.6.2/jdk/bin/java"
else
JAVA=`which java`
fi
这里有一点问题需要注意:
第一个问题就是这段代码必须放在脚本的最开始的位置
第二个问题就是其实在一开始解压elasticsearch的位置我就弄的不合理了,所以这里的路径虽然是填对了,但是后续会有问题的,我们在介绍后续的问题的时候再说明一次这个问题。这里就不讲了,将错就错了。
6. 修改了上一个问题后我们继续执行./elasticsearch的命令,报错如下:
java.lang.RuntimeException: can not run elasticsearch as root
这个报错提示不让以root用户来启动elasticsearch,以前记得可以从一个配置文件里修改允许root用户的,但是忘了不知道在哪儿改了,所以现在我们创建其他的用户再执行启动命令启动elasticsearch,创建用户如下:
# 以root用户来创建新的用户 , groupadd 添加一个用户组
[root@localhost home]# groupadd elasticsearch
# 添加一个用户,-g是在用户组下 -p是密码
[root@localhost home]# useradd elasticsearch -g elasticsearch -p elasticsearch
# 进入es的安装目录
[root@localhost home]# cd /home/elasticsearch
# 给用户elasticsearch 授权
[root@localhost home]# chown -R elasticsearch:elasticsearch elasticsearch-7.6.2/
# 切换到 elasticsearch 用户
[root@localhost elasticsearch]# su elasticsearch
然后我们再执行./elasticsearch 启动,发现依然报错,说/root/elasticsearch-7.6.2/jdk/bin/java找不到,
这个是因为我们切换了用户elasticsearch后没有权限访问root目录,所以找不到jdk。所以我们需要把elasticsearch-7.6.2移动到其他的位置,我移动到了opt的目录下,并修改了启动脚本中的jdk的路径,然后重新设置以下elasticsearch用户的访问权限。然后再执行./elasticsearch命令,启动的时候稍微有些错误但是不影响启动。这些错误就是建议你扩展以下虚拟内存啥的。
7. 然后把防火墙关掉,不然外边物理主机访问的时候会被elastic search访问的主机把端口给墙掉
然后我们从外边的浏览器访问,发现根本访问不了,然后我们使用curl在本机访问elasticsearch只有127.0.0.1:9200能正常访问,但是使用IP:9200就不能正常访问了。这个是因为我们配置文件中默认只允许127.0.0.1访问,我需要修改config下的elasticsearch.yml中的参数
如果只修改第一个参数会报一些其他的错误,如下 :
[2020-10-28T10:32:06,340][INFO ][o.e.b.BootstrapChecks ] [bigdata111] bound or publishing to a non-loopback address, enforcing bootstrap checks
ERROR: [1] bootstrap checks failed
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
这些提示说一些什么最大数量太低,需要至少增加到多少的一个提示。还有一个说是至少设置discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes参数中的一个参数
然后我们修改以下就可以了
添加config配置:
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 2048
* soft memlock unlimited
* hard memlock unlimited
这个需改完了需要切换用户生效,这个不着急切换用户,先用root用户修改
vi /etc/sysctl.conf
vm.max_map_count=262144
修改后执行如下命令 sysctl -p
以上我也看了以下其他人的参考,我把一个比较全的地址贴在这里,我不是完全按照它来做的:
链接: link.
然后我们在elasticsearch.yml的
配置以下后启动elasticsearch就可以正常访问了。
然后我们再下载一个windows的kibana管理交互工具和elasticsearch进行交互,需要注意的是kibana的版本一定要和elasticsearch的版本一致
https://artifacts.elastic.co/downloads/kibana/kibana-7.6.2-windows-x86_64.zip
下载这个就可以了,下载完成后解压,修改配置文件连接elasticsearch配置文件
启动就可以了。