安装elasticsearch遇到的几个问题

首先我已经安装好了jdk1.8的环境并成功解压,并打算用./bin/elasticsearch这个命令把elasticsearch跑起来,然后我遇到了第一个问题。



第一个问题的提示是:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: 
os::commit_memory(0x0000000085330000, 2060255232, 0) failed;
error='Cannot allocate memory' (errno=12)


由于elasticsearch6.7.0默认分配jvm空间大小为2g,修改jvm空间分配为512m

#vim config/jvm.options

-Xms2g
-Xmx2g
修改为

-Xms512m
-Xmx512m




第二个问题的提示是:

[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] 
uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException
: can not run elasticsearch as root


提示我不能以root身份启动,所以创建一个新用户wys

[root@localhost ~]# adduser wys


个人用户只可以在本home下有完整权限,其他目录要看别人授权。而我们经常需要root用户的权限,这时候可以用sodo化身root来操作。我记得我曾经sudo创建了文件,然后发现自己并没有读写权限,因为查看权限是root创建的。

新创建的用户并不能使用sudo命令,需要给他添加授权。
sudo命令的授权管理在sudoers文件中的。

[root@localhost ~]# sudoers
bash: sudoers: 未找到命令...
[root@localhost ~]# whereis sudoers
sudoers: /etc/sudoers /etc/sudoers.d /usr/libexec/sudoers.so /usr/share/man/man5/sudoers.5.gz


找到这个文件位置之后再查看权限:

[root@localhost ~]# ls -l /etc/sudoers
-r--r----- 1 root root 4251 9月  25 15:08 /etc/sudoers


是的,只有只读的权限,如果想要修改的话,需要先添加w权限:

[root@localhost ~]# chmod -v u+w /etc/sudoers
mode of "/etc/sudoers" changed from 0440 (r--r-----) to 0640 (rw-r-----)


然后就可以添加内容了,在下面的一行下追加新增的用户:

[root@localhost ~]# vim /etc/sudoers
 
 
## Allow root to run any commands anywher  
root    ALL=(ALL)       ALL  
wys  ALL=(ALL)       ALL  #这个是新增的用户


wq保存退出,这时候要记得将写权限收回:

[root@localhost ~]# chmod -v u-w /etc/sudoers
mode of "/etc/sudoers" changed from 0640 (rw-r-----) to 0440 (r--r-----)


第一次使用会提示你,你已经化身超人,身负责任。而且需要输入密码才可以下一步。如果不想需要输入密码怎么办,将最后一个ALL修改成NOPASSWD: ALL。



好了,我终于以新建用户wys的身份把elasticsearch终于运行起来了,但我用外网的ip访问时(即用我的笔记本上的浏览器访问部署在阿里云上的elasticsearch),却没能成功。

解决方法:修改绑定的IP地址

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

[wys@localhost bin]$ vim elasticsearch-6.7.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


之后看到又报错了:

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
wys             -       nofile          65536 # add this line
# End of file


保存即可。

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

第二处修改:

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


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

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


调大虚拟内存即可。

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

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

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