在部署单机版es 的时候出现了这个问题,es为7.17.5版本,部署路径为/opt/shan/es
问题如下:
java.nio.file.AccessDeniedException: /opt/shan/es/config/elasticsearch.keystore
Exception in thread "main" java.nio.file.AccessDeniedException: /opt/shan/es/config/elasticsearch.keystore
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.newFileChannel(UnixFileSystemProvider.java:177)
at java.nio.channels.FileChannel.open(FileChannel.java:287)
at java.nio.channels.FileChannel.open(FileChannel.java:335)
at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:83)
at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:211)
at org.elasticsearch.common.settings.HasPasswordKeyStoreCommand.execute(HasPasswordKeyStoreCommand.java:33)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.MultiCommand.execute(MultiCommand.java:95)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.Command.main(Command.java:77)
at org.elasticsearch.common.settings.KeyStoreCli.main(KeyStoreCli.java:33)
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission deniedException in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /opt/shan/es/config/elasticsearch.keystore
Likely root cause: java.nio.file.AccessDeniedException: /opt/shan/es/config/elasticsearch.keystore
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.newFileChannel(UnixFileSystemProvider.java:177)
at java.nio.channels.FileChannel.open(FileChannel.java:287)
at java.nio.channels.FileChannel.open(FileChannel.java:335)
at org.apache.lucene.store.NIOFSDirectory.openInput(NIOFSDirectory.java:83)
at org.elasticsearch.common.settings.KeyStoreWrapper.load(KeyStoreWrapper.java:211)
at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:253)
at org.elasticsearch.bootstrap.Bootstrap.loadSecureSettings(Bootstrap.java:247)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:364)
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:169)
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:160)
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:77)
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:112)
at org.elasticsearch.cli.Command.main(Command.java:77)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:125)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:80)
问题出现原因,启动es的时候会生成elasticsearch.keystore文件,但是es应该用用户定义的非root用户启动,否则就会出现错误,我自定以的用户是es,但是我启动es用的是root,所以导致了这个问题
解决办法
1、以root用户看/opt/shan/es/conf文件夹如下(可以看到elasticsearch.keystore权限是root,我们需要把这个权限改为es,这个es是我专门为es创建的用户)
2、执行命令
chown es:es elasticsearch.keystore
3、 切换到es用户(专门给es启动的用户)
su es
4、重新启动es即可解决(需要以es用户启动)
sh /opt/shan/es/bin/elasticsearch