轉載於: https://blog.csdn.net/bigmustang/article/details/108585871
總結—elasticsearch啟動失敗的幾種情況及解決
1、使用root用戶啟動失敗
在有一次搭建elasticsearch的時候,使用systemctl啟動elasticsearch失敗,然后在bin目錄下面去使用啟動腳本啟動,發現報錯不能用root用戶啟動,報“Caused by: java.lang.RuntimeException: can not run elasticsearch as root”:
[root@localhost bin]# ./elasticsearch [2017-12-20T17:01:47,922][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:125) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.1.1.jar:6.1.1] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:85) ~[elasticsearch-6.1.1.jar:6.1.1] Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:322) ~[elasticsearch-6.1.1.jar:6.1.1] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-6.1.1.jar:6.1.1] ... 6 more [root@localhost bin]# cd ..
解決:
創建一個獨立的用戶,比如elk來啟動elasticsearch,不用root用戶啟動
2、elasticsearch安裝目錄權限不對
遇到啟動elasticsearch失敗,使用的是專門的用戶elk來啟動的,啟動日志提示不能加載配置文件:
[elk@docker bin]$ ./elasticsearch Exception in thread "main" 2018-06-03 17:36:23,881 main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging. 2018-06-03 17:36:24,113 main ERROR Could not register mbeans java.security.AccessControlException: access denied ("javax.management.MBeanTrustPermission" "register") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.lang.SecurityManager.checkPermission(SecurityManager.java:585) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.checkMBeanTrustPermission(DefaultMBeanServerInterceptor.java:1848) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:322) at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522) at org.apache.logging.log4j.core.jmx.Server.register(Server.java:389) at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:167) at org.apache.logging.log4j.core.jmx.Server.reregisterMBeansAfterReconfigure(Server.java:140) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:556) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:617) at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:242) at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45) at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174) at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618) at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:54) at org.elasticsearch.common.logging.ESLoggerFactory.getLogger(ESLoggerFactory.java:62) at org.elasticsearch.common.logging.Loggers.getLogger(Loggers.java:101) at org.elasticsearch.ExceptionsHelper.<clinit>(ExceptionsHelper.java:42) at org.elasticsearch.ElasticsearchException.toString(ElasticsearchException.java:663) at java.lang.String.valueOf(String.java:2994) at java.io.PrintStream.println(PrintStream.java:821) at java.lang.Throwable$WrappedPrintStream.println(Throwable.java:748) at java.lang.Throwable.printStackTrace(Throwable.java:655) at java.lang.Throwable.printStackTrace(Throwable.java:643) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1061) at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:1052) at java.lang.Thread.dispatchUncaughtException(Thread.java:1959) SettingsException[Failed to load settings from /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; nested: AccessDeniedException[/usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:102) at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:72) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml 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.common.settings.Settings$Builder.loadFromPath(Settings.java:1032) at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100) ... 6 more [elk@docker bin]$
解決:
看到“Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml”的提示,就去檢查目錄的權限,果然是root:root權限,使用elk用戶去啟動,就報錯了。
將目錄的權限改成elk:elk就好了。
[root@docker ~]# ll /usr/local/ drwxr-xr-x 7 root root 123 9月 7 2017 elasticsearch-5.6.0 [root@docker local]# chown -R elk:elk elasticsearch-5.6.0 [root@docker local]# ll drwxr-xr-x 7 elk elk 123 9月 7 2017 elasticsearch-5.6.0
3、使用yum安裝方式,賦權錯誤,啟動失敗
在一次使用yum安裝elasticsearch的時候,執行完yum -y install elasticsearch 命令后,進行了下面的操作:
1、修改elasticsearch.yml文件
2、創建elk用戶
3、創建/opt/elk/data目錄,並且賦權為elk:elk
4、修改/var/log/elasticsearch權限為elk:elk
5、啟動服務,但是報下面的錯(截取了部分):
[root@test101 init.d]# ./elasticsearch start Starting elasticsearch: 2018-06-12 15:13:50,287 main ERROR Unable to create file /var/log/elasticsearch/elk.log java.io.IOException: 權限不夠 at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1012) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:628) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:608) at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:113) at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:115) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:188) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:144) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:307) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) 2018-06-12 15:13:50,296 main ERROR Could not create plugin of type class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@16293aa2] unable to create manager for [/var/log/elasticsearch/elk.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@5158b42f[pattern=/var/log/elasticsearch/elk-%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=1, max=7, useMax=true), advertiseURI=null, layout=[%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n, filePermissions=null, fileOwner=null]] java.lang.IllegalStateException: ManagerFactory [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory@16293aa2] unable to create manager for [/var/log/elasticsearch/elk.log] with data [org.apache.logging.log4j.core.appender.rolling.RollingFileManager$FactoryData@5158b42f[pattern=/var/log/elasticsearch/elk-%d{yyyy-MM-dd}.log, append=true, bufferedIO=true, bufferSize=8192, policy=CompositeTriggeringPolicy(policies=[TimeBasedTriggeringPolicy(nextRolloverMillis=0, interval=1, modulate=true)]), strategy=DefaultRolloverStrategy(min=1, max=7, useMax=true), advertiseURI=null, layout=[%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n, filePermissions=null, fileOwner=null]] at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:115) at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:115) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:188) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:144) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:60) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:122) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:307) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) 2018-06-12 15:13:50,311 main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.appender.RollingFileAppender for element RollingFile: java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender java.lang.IllegalStateException: No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.findFactoryMethod(PluginBuilder.java:229) at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:134) at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:958) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:898) at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:890) at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:513) at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:237) at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:249) at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:545) at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:261) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166) at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:122) at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:307) at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:70) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84)
解決:
原來在執行yum -y install elasticsearch的時候,就已經自動創建了一個單獨的管理用戶elasticsearch,但是我又自己創建了一個elk用戶,並且把data和log目錄授權給elk,所以就會出現“Starting elasticsearch: 2018-06-12 15:13:50,287 main ERROR Unable to create file /var/log/elasticsearch/elk.log java.io.IOException: 權限不夠”的報錯。
因此只需要將/opt/elk/data和/var/log/elasticsearch目錄權限改為elasticsearch:elasticsearch就好了:
然后重啟服務成功:
[root@test101 init.d]# ./elasticsearch start Starting elasticsearch: [ 確定 ] [root@test101 init.d]# ps -ef|grep elasticsearch elastic+ 5157 1 80 15:49 ? 00:00:08 /usr/local/jdk1.8.0_151/bin/java -Xms512m -Xmx512m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/share/elasticsearch -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid -d -Edefault.path.logs=/var/log/elasticsearch -Edefault.path.data=/var/lib/elasticsearch -Edefault.path.conf=/etc/elasticsearch root 5177 921 0 15:50 pts/0 00:00:00 grep --color=auto elasticsearch [root@test101 init.d]# netstat -tlunp|grep 9200 tcp6 0 0 :::9200 :::* LISTEN 5157/java [root@test101 init.d]#
4、日志和數據目錄權限異常,啟動失敗
在一次啟動elasticsearch的時候啟動失敗,日志有提示“main ERROR Unable to create file /home/elk/logs/my-application_index_indexing_slowlog.log java.io.IOException: 權限不夠”和“Caused by: java.nio.file.AccessDeniedException: /home/elk/data/nodes”。關鍵日志信息如下(下面兩段日志是節選的,日志信息太多了,有很多重復的): [elk@docker bin]$ ./elasticsearch 2018-06-04 01:15:07,609 main ERROR Unable to create file /home/elk/logs/my-application.log java.io.IOException: 權限不夠 at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1012) 后面還有一段: Caused by: java.lang.IllegalStateException: Failed to create node environment at org.elasticsearch.node.Node.<init>(Node.java:268) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.node.Node.<init>(Node.java:245) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:233) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:233) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:342) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.0.jar:5.6.0] ... 6 more Caused by: java.nio.file.AccessDeniedException: /home/elk/data/nodes at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84) ~[?:?] 日志報的“/home/elk/data/”和“/home/elk/logs/”目錄都是在elasticsearch.yml配置文件里面配置的兩個目錄,查看權限果然不對,權限是elk的目錄權限是elk,但是下面的data目錄和logs目錄權限還是root,因此引起了啟動失敗: [root@docker home]# ll drwx------ 5 elk elk 125 6月 3 17:35 elk #elk目錄權限正常 [root@docker home]# cd elk/ [root@docker elk]# ll 總用量 0 drwxr-xr-x 2 root root 6 6月 3 17:34 data #下面的data和logs目錄還是root drwxr-xr-x 2 root root 6 6月 3 17:34 logs
解決:
將目錄權限修改成elk之后,啟動就OK了
[root@docker elk]# chown elk:elk -R ./* [root@docker elk]# ll 總用量 0 drwxr-xr-x 2 elk elk 6 6月 3 17:34 data drwxr-xr-x 2 elk elk 6 6月 3 17:34 logs [root@docker elk]#
5、內存不夠,啟動失敗
在一次使用虛擬機做實驗的過程中啟動elasticsearch遇到了這樣的報錯:
[elk@docker bin]$ ./elasticsearch Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 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 2060255232 bytes for committing reserved memory. # An error report file with more information is saved as: # /usr/local/elasticsearch-5.6.0/bin/hs_err_pid2819.log
解決:
原因:
查看了 /usr/local/elasticsearch-5.6.0/bin/hs_err_pid1027.log日志文件,出現這樣的報錯,有兩種可能:
1、系統進程數達到上限了,部署服務的時候/etc/security/limits.conf文件修改沒有生效。
2、確實物理內存不夠
解決:
通過命令查看系統限制:ulimit -a查看open files不夠大,如果不夠大,就嘗試通過設大該值:
[root@docker ~]# ulimit -n
1024
果然是部屬的時候修改的/etc/security/limits.conf文件沒有生效。於是將機器reboot了一下,在查看就生效了:)
將ulimit 值添加到/etc/profile文件中(適用於有root權限登錄的系統)
為了每次系統重新啟動時,都可以獲取更大的ulimit值,將ulimit 加入到/etc/profile 文件底部。
echo ulimit -n 65535 >>/etc/profile
source /etc/profile #加載修改后的profile
ulimit -n #顯示65535,修改完畢!
[root@docker ~]# ulimit -n
65536
但是在啟動的時候還是報同樣的錯,查看了一下內存,這個虛擬機的內存只有1G,那應該就是物理內存不夠了。目前還剩下這么多:
[root@docker ~]# free -h total used free shared buff/cache available Mem: 974M 119M 79M 7.7M 775M 680M Swap: 819M 0B 819M 手動清理了一下內存: [root@docker ~]# echo 3 > /proc/sys/vm/drop_caches [root@docker ~]# free -h total used free shared buff/cache available Mem: 974M 114M 789M 7.7M 69M 739M Swap: 819M 0B 819M [root@docker ~]# 但是在啟動報錯依舊。 於是增加物理內存到2G: [root@docker elk]# free -h total used free shared buff/cache available Mem: 1.8G 1.6G 77M 4K 72M 29M Swap: 819M 691M 128M 然后切換到elk用戶去啟動服務,就OK了: [elk@docker bin]$ ./elasticsearch #為了看啟動日志就前台啟動的,ctrl+c 進程就會over掉 檢查端口,起來了 [root@docker elk]# netstat -tlunp|grep 9200 tcp6 0 0 10.0.0.16:9200 :::* LISTEN 9628/java [root@docker elk]# 然后關掉進程重新后台啟動:
[elk@docker bin]$ nohup ./elasticsearch >/dev/null 2>&1 & #后台啟動 [2] 9808 [elk@docker bin]$ ps -ef|grep elasticsearch #檢查進程 elk 9808 4115 10 01:29 pts/0 00:00:23 /usr/local/jdk1.8.0_151/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/local/elasticsearch-5.6.0 -cp /usr/local/elasticsearch-5.6.0/lib/* org.elasticsearch.bootstrap.Elasticsearch elk 9890 4115 0 01:32 pts/0 00:00:00 grep --color=auto elasticsearch [elk@docker bin]$ [root@docker elk]# netstat -tlunp|grep 9200 #用root用戶檢查端口 tcp6 0 0 10.0.0.16:9200 :::* LISTEN 9808/java [root@docker elk]#
6、 elasticsearch.yml的bind的IP寫錯,服務起不來
在一次安裝 elasticsearc的時候,服務起不來,提示“Failed to bind to [9300-9400]”。啟動服務報下面的錯誤:
[elk@host1 bin]$ ./elasticsearch [2018-06-15T09:56:53,019][INFO ][o.e.n.Node ] [node1] initializing ... [2018-06-15T09:56:53,141][INFO ][o.e.e.NodeEnvironment ] [node1] using [1] data paths, mounts [[/data (/dev/mapper/data-data)]], net usable_space [179.8gb], net total_space [179.9gb], spins? [possibly], types [xfs] [2018-06-15T09:56:53,142][INFO ][o.e.e.NodeEnvironment ] [node1] heap size [1.9gb], compressed ordinary object pointers [true] [2018-06-15T09:56:53,143][INFO ][o.e.n.Node ] [node1] node name [node1], node ID [F0PzQ9qSRPWq8YNcwjj0vg] [2018-06-15T09:56:53,144][INFO ][o.e.n.Node ] [node1] version[5.6.0], pid[27627], build[781a835/2017-09-07T03:09:58.087Z], OS[Linux/3.10.0-514.el7.x86_64/amd64], JVM[Oracle Corporation/OpenJDK 64-Bit Server VM/1.8.0_102/25.102-b14] [2018-06-15T09:56:53,144][INFO ][o.e.n.Node ] [node1] JVM arguments [-Xms2g, -Xmx2g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -Djdk.io.permissionsUseCanonicalPath=true, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Dlog4j.skipJansi=true, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/usr/local/elasticsearch-5.6.0] [2018-06-15T09:56:54,161][INFO ][o.e.p.PluginsService ] [node1] loaded module [aggs-matrix-stats] [2018-06-15T09:56:54,162][INFO ][o.e.p.PluginsService ] [node1] loaded module [ingest-common] [2018-06-15T09:56:54,162][INFO ][o.e.p.PluginsService ] [node1] loaded module [lang-expression] [2018-06-15T09:56:54,162][INFO ][o.e.p.PluginsService ] [node1] loaded module [lang-groovy] [2018-06-15T09:56:54,162][INFO ][o.e.p.PluginsService ] [node1] loaded module [lang-mustache] [2018-06-15T09:56:54,162][INFO ][o.e.p.PluginsService ] [node1] loaded module [lang-painless] [2018-06-15T09:56:54,163][INFO ][o.e.p.PluginsService ] [node1] loaded module [parent-join] [2018-06-15T09:56:54,163][INFO ][o.e.p.PluginsService ] [node1] loaded module [percolator] [2018-06-15T09:56:54,163][INFO ][o.e.p.PluginsService ] [node1] loaded module [reindex] [2018-06-15T09:56:54,163][INFO ][o.e.p.PluginsService ] [node1] loaded module [transport-netty3] [2018-06-15T09:56:54,163][INFO ][o.e.p.PluginsService ] [node1] loaded module [transport-netty4] [2018-06-15T09:56:54,164][INFO ][o.e.p.PluginsService ] [node1] no plugins loaded [2018-06-15T09:56:55,941][INFO ][o.e.d.DiscoveryModule ] [node1] using discovery type [zen] [2018-06-15T09:56:56,770][INFO ][o.e.n.Node ] [node1] initialized [2018-06-15T09:56:56,770][INFO ][o.e.n.Node ] [node1] starting ... [2018-06-15T09:56:57,059][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [node1] uncaught exception in thread [main] org.elasticsearch.bootstrap.StartupException: BindTransportException[Failed to bind to [9300-9400]]; nested: BindException[Cannot assign requested address]; at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:123) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.6.0.jar:5.6.0] Caused by: org.elasticsearch.transport.BindTransportException: Failed to bind to [9300-9400] at org.elasticsearch.transport.TcpTransport.bindToPort(TcpTransport.java:771) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.transport.TcpTransport.bindServer(TcpTransport.java:736) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.transport.netty4.Netty4Transport.doStart(Netty4Transport.java:173) ~[?:?] at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.transport.TransportService.doStart(TransportService.java:209) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.node.Node.start(Node.java:694) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:278) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:351) ~[elasticsearch-5.6.0.jar:5.6.0] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:132) ~[elasticsearch-5.6.0.jar:5.6.0] ... 6 more Caused by: java.net.BindException: Cannot assign requested address at sun.nio.ch.Net.bind0(Native Method) ~[?:?] at sun.nio.ch.Net.bind(Net.java:433) ~[?:?] at sun.nio.ch.Net.bind(Net.java:425) ~[?:?] at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) ~[?:?] at io.netty.channel.socket.nio.NioServerSocketChannel.doBind(NioServerSocketChannel.java:128) ~[?:?] at io.netty.channel.AbstractChannel$AbstractUnsafe.bind(AbstractChannel.java:554) ~[?:?] at io.netty.channel.DefaultChannelPipeline$HeadContext.bind(DefaultChannelPipeline.java:1258) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.invokeBind(AbstractChannelHandlerContext.java:501) ~[?:?] at io.netty.channel.AbstractChannelHandlerContext.bind(AbstractChannelHandlerContext.java:486) ~[?:?] at io.netty.channel.DefaultChannelPipeline.bind(DefaultChannelPipeline.java:980) ~[?:?] at io.netty.channel.AbstractChannel.bind(AbstractChannel.java:250) ~[?:?] at io.netty.bootstrap.AbstractBootstrap$2.run(AbstractBootstrap.java:365) ~[?:?] at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[?:?] at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:403) ~[?:?] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:462) ~[?:?] at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858) ~[?:?] at java.lang.Thread.run(Thread.java:745) [?:1.8.0_102] [2018-06-15T09:56:57,822][INFO ][o.e.n.Node ] [node1] stopping ... [2018-06-15T09:56:57,826][INFO ][o.e.n.Node ] [node1] stopped [2018-06-15T09:56:57,826][INFO ][o.e.n.Node ] [node1] closing ... [2018-06-15T09:56:57,839][INFO ][o.e.n.Node ] [node1] closed [elk@host1 bin]$ [elk@host1 bin]$ [root@host1 bin]# netstat -tlunp|grep 9300 [root@host1 bin]# netstat -tlunp|grep 9200 [root@host1 bin]#
解決:
開始以為是端口被占用了,檢查端口,發現並沒有被占用:
[root@host1 bin]# netstat -tlunp|grep 9300
[root@host1 bin]# netstat -tlunp|grep 9200
[root@host1 bin]#
然后檢查配置,發現 elasticsearch.yml文件里面有一行的IP寫錯了:
network.host: 10.0.0.10 #這一行的IP地址寫錯了,不是本機IP
修改elasticsearch.yml文件,將IP改正確,重新啟動服務,就OK了
7、配置文件elasticsearch.yml的權限異常,導致啟動失敗
有一次在安裝elasticsearch的時候,因為elasticsearch.yml文件改得有問題,就從原來備份的elasticsearch.yml.bak文件cp重新生成了一份elasticsearch.yml,改好之后啟動報錯不能加載配置文件:
[elk@es bin]$ ./elasticsearch Exception in thread "main" 2018-09-14 09:04:49,470 main ERROR No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging. SettingsException[Failed to load settings from /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; nested: AccessDeniedException[/usr/local/elasticsearch-5.6.0/config/elasticsearch.yml]; at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:102) at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:72) at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:134) at org.elasticsearch.cli.Command.main(Command.java:90) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) Caused by: java.nio.file.AccessDeniedException: /usr/local/elasticsearch-5.6.0/config/elasticsearch.yml 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.common.settings.Settings$Builder.loadFromPath(Settings.java:1032) at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)
原來新生成的配置文件elasticsearch.yml還是root權限,用elk用戶去啟動,當然加載不了:
[root@es config]# ll total 20 -rw-r----- 1 root root 2961 Sep 14 09:04 elasticsearch.yml -rw-r----- 1 elk elk 2854 Sep 14 08:49 elasticsearch.yml.bak -rw-rw---- 1 elk elk 3064 Sep 7 2017 jvm.options -rw-rw---- 1 elk elk 4456 Sep 7 2017 log4j2.properties [root@es config]#
解決:
修改配置文件elasticsearch.yml的權限,再重新啟動就好了:
[root@es config]# chown elk:elk elasticsearch.yml [root@es config]# ll total 20 -rw-r----- 1 elk elk 2961 Sep 14 09:04 elasticsearch.yml -rw-r----- 1 elk elk 2854 Sep 14 08:49 elasticsearch.yml.bak -rw-rw---- 1 elk elk 3064 Sep 7 2017 jvm.options -rw-rw---- 1 elk elk 4456 Sep 7 2017 log4j2.properties [root@es config]#
8、yum安裝的elasticsearch,找不到java路徑,啟動失敗
今天使用yum安裝elasticsearch的過程中,發現elasticsearch起不來,messages日志有如下的報錯:
May 31 14:00:19 test103 systemd: Started Elasticsearch. May 31 14:00:19 test103 systemd: Starting Elasticsearch... May 31 14:00:19 test103 elasticsearch: which: no java in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin) #elasticsearch在這個路徑下面去找java,沒有找到 May 31 14:00:19 test103 systemd: elasticsearch.service: main process exited, code=exited, status=1/FAILURE May 31 14:00:19 test103 elasticsearch: warning: Falling back to java on path. This behavior is deprecated. Specify JAVA_HOME May 31 14:00:19 test103 elasticsearch: could not find java; set JAVA_HOME May 31 14:00:19 test103 systemd: Unit elasticsearch.service entered failed state. May 31 14:00:19 test103 systemd: elasticsearch.service failed. 報錯說找不到java,但是實際上我是安裝過jdk了,查看當前java路徑為: [root@test103 ~]# whereis java java: /usr/local/jdk1.8.0_151/bin/java [root@test103 ~]# 然后查看/usr/local/sbin/目錄下沒有java,所以elasticsearch在啟動的時候找不到java路徑。 解決: 把/usr/local/jdk1.8.0_151/bin/java做了個軟連接到 /usr/local/sbin下面: [root@test103 sbin]# ln -s /usr/local/jdk1.8.0_151/bin/java /usr/local/sbin/java [root@test103 sbin]# ll 總用量 0 lrwxrwxrwx 1 root root 32 5月 31 14:01 java -> /usr/local/jdk1.8.0_151/bin/java 現在查看java路徑,就有/usr/local/sbin/java了: [root@test103 sbin]# whereis java java: /usr/local/sbin/java /usr/local/jdk1.8.0_151/bin/java [root@test103 sbin]# 然后重新啟動elasticsearch,發現就可以正常啟動了: [root@test103 sbin]# systemctl start elasticsearch [root@test103 sbin]# ps -ef|grep elasticsearch elastic+ 13635 1 70 14:02 ? 00:00:12 /usr/local/sbin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch-7859403592413850651 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet elastic+ 13692 13635 0 14:02 ? 00:00:00 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller root 13698 10140 0 14:02 pts/0 00:00:00 grep --color=auto elasticsearch [root@test103 sbin]# netstat -tlunp|grep 9300 tcp6 0 0 10.0.0.103:9300 :::* LISTEN 13635/java [root@test103 sbin]# netstat -tlunp|grep 9200 tcp6 0 0 10.0.0.103:9200 :::* LISTEN 13635/java