ElasticSearch外网访问遇到的坑

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
            #
            # There is insufficient memory for the Java Runtime Environment to continue.
            # Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
            # An error report file with more information is saved as:
            # /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log

碰到这种问题是,是说明你的内存容量比较小。要么去给你的服务器升配,要么就去修改你JVM的大小

//进入你ES安装的地方,然后进入config文件夹
cd /usr/local/software/elasticsearch-5.6.8/config
//打开配置文件夹里面的JVM.options
vi jvm.options
//然后修改这两个属性。
//默认是2g,一般而言我们买服务器的内存总共才2g,所以把这个修改到512m
-Xms512m
-Xmx512m

这时候再去启动,然后就会发现有这个错误

ot@iZ2ze7xpvk1fgm6qtatddmZ bin]# ./elasticsearch
[2019-01-01T21:50:58,913][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:136) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.8.jar:5.6.8]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
	at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:106) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:195) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.8.jar:5.6.8]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.8.jar:5.6.8]
	... 6 more

这是因为root用户不能去运行elasticsearch,必须重新添加一个用户

添加用户:useradd -m 用户名  然后设置密码  passwd 用户名

用这个用户去启动es,如果需要外网访问的时候,你需要修改配置文件

cd ..
cd config/
vi elasticsearch.yml

你会看到全用#注释的一个文本文件。不要方!这不是你下载错了,这是ES默认的设置。如果你要设置为外网访问的话,你需要把 network.host: 127.0.0.1 这行的注释去掉然后把127.0.0.1修改为0.0.0.0 其他的就不用管,保存退出。

再去启动的时候可能会碰到会碰到下面两个错误

[1]: max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]

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

遇到这种情况首先需要切换到root用户,然后再去修改etc下面的两个文件。具体如下:

su root
vi /etc/security/limits.conf
//在最后一行中加入
* soft nofile 65536
* hard nofile 65536
//保存退出
//这时候第一条错误已经解决了,然后同样是root用户
vi /etc/sysctl.conf
//同样在最后一行中加入
vm.max_map_count=655360
//保存退出后,然后执行下面这个命令
sysctl -p

接着再进入到bin文件夹,然后启动elasticsearch

如果这时候你还发现无法在外网访问的话,就去看看你服务器的安全组设置了没。我就是安全组没有设置导致搞了三个多小时还没搞好 T  T||。

再去看看你的防火墙开了没,一般ECS默认是不开防火墙的, 我遇到的bug就这些了。希望你们能顺利成功。

猜你喜欢

转载自blog.csdn.net/OrangeRawNorthland/article/details/85562494