Centos7 启动 Elasticsearch 错误整理

最近在练习es的时候遇到了好多错误,现在把问题记录下来,方便后面回顾总结

这里就不再赘述安装es的过程了,如果大家需要安装es的整个过程的话,可以留言,如果多的话我就再写一个安装的详细步骤

问题1、进入到es安装目录,在单台虚拟机上执行启动命令

]# bin/elasticsearch

看到错误如下 

]# pwd
/opt/module/elasticsearch-7.0.1
]# bin/elasticsearch

[2021-06-09T14:47:37,348][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
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.0.1.jar:7.0.1]
        at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.0.1.jar:7.0.1]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
        at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:102) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:169) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:325) ~[elasticsearch-7.0.1.jar:7.0.1]
        at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.0.1.jar:7.0.1]
        ... 6 more

根据错误提示can not run elasticsearch as root,可以看出,不能以root的身份运行es,这应该是基于es的安全考虑的原因。

所以我们要进行用户的切换,如果已经创建过用户,可以直接进行切换

# 执行su + 用户名
]# su kohsin

切换过用户之后,再执行启动程序。。。。。。如果还是启动失败,查看问题2

如果没有创建过用户,则先进行用户的创建

]# useradd kohsin
]# passwd kohsin
更改用户 kohsin 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

创建完用户之后再执行启动命令。。。。。

问题2、切换完用户之后执行启动命令依然报错

]$ bin/elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /opt/module/elasticsearch-7.0.1/config/jvm.options
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
        at java.nio.file.Files.newByteChannel(Files.java:361)
        at java.nio.file.Files.newByteChannel(Files.java:407)
        at java.nio.file.spi.FileSystemProvider.newInputStream(FileSystemProvider.java:384)
        at java.nio.file.Files.newInputStream(Files.java:152)
        at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:60)

这是因为切换用户之后,没有了对文件夹的权限,所以没有办法执行成功

进入上层目录,可以看出,当前es的文件夹是属于root的

]$ ll
总用量 0
drwxr-xr-x 9 root root 192 6月   9 14:10 elasticsearch-7.0.1

所以可以更改文件夹的权限给新用户,因为是刚创建的新用户,所以肯定没有权限,命令的前面要加上sudo指令

]# sudo chown -R kohsin elasticsearch-7.0.1

这时候会遇到一个新的错误

问题3、新用户不在 sudoers 文件中

]$ sudo chown -R kohsin elasticsearch-7.0.1
[sudo] kohsin 的密码:
kohsin 不在 sudoers 文件中。此事将被报告。

这个问题是因为,没有配置新用户的权限,所以在执行sudo时,查找配置文件也没有找到

接下来我们进行新用户的 sudoers 配置

我们执行查看指令,查看一下sudoers里都有什么

]$ cat /etc/sudoers
cat: /etc/sudoers: 权限不够

发现提示我们权限不够,那么我们就需要通过root用户来进行修改了

然后我们决定重新回到root角色,执行su root指令,如果出现鉴定故障。。。。。查看问题4进行解决

# root 可写可不写
]$ su root
密码:
su: 鉴定故障

 

问题4、su:鉴定故障

对于其他用户转换到root用户出错的问题现在进行解决,这个问题要重新对root用户进行密码的设置,输入密码发现出现了上述 问题3 的错误

]$ sudo passwd root
[sudo] kohsin 的密码:
kohsin 不在 sudoers 文件中。此事将被报告。

经过两次解决问题,发现,需要先解决 用户不在 sudoers 中的问题

所以我们现在重新返回到 问题3 的问题进行解决

因为现在我们一直在新创建的用户中,所以权限各种被限制,我们要切换回root用户来执行修改,但是通过指令也切换不过来,所以我们要重新开一个窗口(我用的是MobaXterm连接的虚拟机),然后输入root账户进行登陆

这样我们就重新回到root用户

接下来就是给我们刚才创建的新用户权限的设置,输入下面指令

]# vi /etc/sudoers

找到一下的位置,然后添加红色框内的内容,第一个单词是你自己创建的用户名,强制保存

 

问题4 出现的问题,对于以下错误同样适用(解决方法要往下看完)

sudo: etc/sudoers可被任何人与. sudo: 没有找到有效的 sudoers资源,退出 sudo: 无法初始化策略插件

新用户的权限问题解决之后,我们切换到新用户,继续前面 问题2 的最后进行

切换用户指令

]# su kohsin

我们找到 es 的安装目录

然后执行指令

]# sudo chown -R kohsin elasticsearch-7.0.1

可以看到,这时候指令不会再报错了,然后文件夹的归属人也变成了kohsin(新用户)

这时候我们再去执行启动的指令,就会看到程序运行起来了

但是。。。。。。竟然又报错了。。。。。。(极度无语中。。。。。)

问题5、

报错max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

说什么es的进程太 low 了。。。。(我尼玛) 

继续处理

查看资料说是因为,在安装es的时候,配置的是允许应用服务器通过网络方式访问,当然生产环境也是这样的,现在启动是通过单机启动的,所以es会嫌弃单机版的低端,就无法启动了

如果觉得麻烦可以直接集群启动

如果想解决该问题

那么进入到limits.conf配置中进行修改,注意*不能省略

]$ sudo vim /etc/security/limits.conf

在文件的最后添加内容
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 65536

问题6、

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

这是因为:一个进程可以拥有的虚拟内存区域的数量。

]$ sudo vim /etc/sysctl.conf
在文件最后添加一行
vm.max_map_count=262144
问题5和问题6 这两个问题的修改,都是要重启虚拟机,然后才会生效的。
 
 
 
整个文章的流程,都是我遇到问题时一步一步查资料解决的,所以逻辑上并没有像其他的文章一样,先把配置啥的都搞好,我是遇到问题一个一个来,所以看上去的话,会感觉有一丢丢乱。

版权声明:本文为KoHsin_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。