ES启用外部IP访问的启动异常

Nov 8, 2016


前言

部署完成ES之后,如果我们不修改配置,那么默认只有本机可以访问ES的api接口,如果需要给外部机器访问,那么就需要修改ES的配置了。

本文使用ES 5.0的版本。

修改绑定的IP地址

在默认情况下,ES只允许本地访问api接口,如果我们希望在另外一台机器上访问ES的接口的话,需要配置主机地址:

[kael@localhost bin]$ vim elasticsearch-5.0.0/config/elasticsearch.yml

找到如下行:

# Set the bind address to a specific IP (IPv4 or IPv6):
#
# network.host: 192.168.1.1

去掉network.host的注释,改成0.0.0.0

# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0

保存退出,重新启动es:

[kael@localhost bin]$ ./elasticsearch
.....// 省略部分日志

[2016-11-07T22:36:55,504][INFO ][o.e.b.BootstrapCheck     ] [OI7LKLJ] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

[2016-11-07T22:36:55,523][INFO ][o.e.n.Node               ] [OI7LKLJ] stopping ...
[2016-11-07T22:36:55,546][INFO ][o.e.n.Node               ] [OI7LKLJ] stopped
[2016-11-07T22:36:55,547][INFO ][o.e.n.Node               ] [OI7LKLJ] closing ...
[2016-11-07T22:36:55,566][INFO ][o.e.n.Node               ] [OI7LKLJ] closed

这里我们看到启动报错了。

这个错误并不是因为我们改了主机地址造成的,实际上一直都存在的错误,但是在只允许本地连接的情况下,ES没有做检查,所以没有报错,可以正常运行,但是当我们配置了运行外部地址访问的时候,ES就会强制检查,所以就报错了。

解决启动错误

这里一共两个错误,先解决:

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]

这个是linux下常见的错误,主要是因为linux会限制进程的最大打开文件数,只需要简单配置一下即可解决,在ES的官方文档中提供了两种解决方案。

这里我们只看系统基本的配置这种方式。

  • 打开/etc/security/limits.conf
  • 添加如下配置
#*               soft    core            0
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#@student        -       maxlogins       4
kael             -       nofile          65536 # add this line
# End of file

保存即可。

这里的kael是用户名,表明这个配置只对kael用户生效,如果你用来启动elasticsearch的用户名不是这个,那么你需要按你实际的用户名修改

第二个问题:

max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

这个是ES使用的虚拟内存,官方文档给出了解决方案:

[kael@localhost bin]$ sudo sysctl -w vm.max_map_count=262144

调大虚拟内存即可。

重新启动,就可以正常访问了,现在我们可以在任何机器上访问ES了。

也可以用后台进程的方式启动:

[kael@localhost bin]$ ./elasticsearch -d -p pid