最近在练习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