一切东西的学习,都避免不了安装,而在安装过程中,避免不了那么多的坑,本文总结下。
1:本文针对的具体环境:
ElasticSearch版本:elasticsearch-5.6.2
JDK版本:jdk1.8.0_111
系统版本:Linux version 2.6.32-504.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) ) #1 SMP Wed Oct 15 04:27:16 UTC 2014
注:针对其他的环境,可能出现的问题并不同,所以必须要具体情况,具体分析
启动报错示例:
1:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [yuzhao.yang] likely too low, increase to at least [2048]
这两个错误,通常是一起出现的,如要改正,需要更换到root用户下,修改/etc/security/limits.conf文件,增加或者修改四行:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
注意,这里一定不能忘掉星号,这个星号不是用于注释的。
2:max number of threads [1024] for user [yuzhao.yang] likely too low, increase to at least [2048]
针对这个错误,需要切换到root用户下,修改/etc/security/limits.d/90-nproc.conf;通常,文件中应该有一行:
* soft nproc 1024
将本行修改为:
* soft nproc 2048
3:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
这个错误也很常见,需要修改的文件为:/etc/sysctl.conf
通常是添加配置:
vm.max_map_count=655360
修改完之后,通过执行命令,确认修改是否成功:
sysctl -p
如果发现命令执行后的结果确实是自己要的结果,说明修改成功。
4:ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false ,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
注意,这里必须两个值都是false,我本来以为上面的没有用,重新改回true但依旧失败,具体原因暂时不明白;同时,必须要注意配置方式,冒号后面是有一个空格的,否则会报错。
通常情况下,修改完以上配置,ElasticSearch就可以正常启动了,但是,我启动之后,发现还是失败,不得不继续寻找解决方案,发现了一个问题:在/etc/profile内,有一行配置:
ulimit -n 65536
因为这一行的存在,而且这个文件会默认最先加载,这就导致我们其他的配置,其实都没有生效,必须在文件中把这一行注释掉,然后执行命令:
ulimit -Hn
确认修改后的值,是不是我们前面定义的最大值:131072
如果是的,退出root用户,重新以普通用户登录,重启ES即可。
这样配置完毕后,就可以实现远程访问了,也可以通过Java API对索引数据进行操作了。
注意:本次修改完之后,虽然重启成功,也可以远程访问,但本地访问依旧是无法连接,尚不清楚是不是防火墙的问题;下次会继续整理问题。