节点启动时出错:无法启动 DSE 服务器/插件激活失败/找不到核心

Error during node startup: Unable to start DSE server / Plugin activation failed / Cannot find core

我已经遇到这些问题很长时间了,但最初我忽略了它们,因为我仍然可以启动我的节点。但是,最近其中一个问题变得更加严重,我现在需要尝试很多次才能成功启动节点。

问题 #1:无法启动 DSE 服务器/插件激活失败/找不到核心

ERROR [main] 2015-01-28 03:30:40,058 DseDaemon.java (line 492) Unable to start DSE server.
java.lang.RuntimeException: com.datastax.bdp.plugin.PluginManager$PluginActivationException: Plugin activation failed
        at com.datastax.bdp.plugin.PluginManager.activate(PluginManager.java:135)
        at com.datastax.bdp.server.DseDaemon.start(DseDaemon.java:480)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:509)
        at com.datastax.bdp.server.DseDaemon.main(DseDaemon.java:659)
Caused by: com.datastax.bdp.plugin.PluginManager$PluginActivationException: Plugin activation failed
        at com.datastax.bdp.plugin.PluginManager.activate(PluginManager.java:284)
        at com.datastax.bdp.plugin.PluginManager.activate(PluginManager.java:128)
        ... 3 more
Caused by: java.lang.IllegalStateException: Cannot find core: myks.mycf
        at com.datastax.bdp.search.solr.core.SolrCoreResourceManager.doWaitForCore(SolrCoreResourceManager.java:742)
        at com.datastax.bdp.search.solr.core.SolrCoreResourceManager.waitForCore(SolrCoreResourceManager.java:478)
        at com.datastax.bdp.plugin.SolrContainerPlugin.waitForSecondaryIndexesLoading(SolrContainerPlugin.java:237)
        at com.datastax.bdp.plugin.SolrContainerPlugin.onActivate(SolrContainerPlugin.java:98)
        at com.datastax.bdp.plugin.PluginManager.initialize(PluginManager.java:334)
        at com.datastax.bdp.plugin.PluginManager.activate(PluginManager.java:263)
        ... 4 more
 INFO [Thread-3] 2015-01-28 03:30:40,059 DseDaemon.java (line 505) DSE shutting down...
 INFO [StorageServiceShutdownHook] 2015-01-28 03:30:40,164 Gossiper.java (line 1307) Announcing shutdown
 INFO [Thread-3] 2015-01-28 03:30:40,620 PluginManager.java (line 356) All plugins are stopped.
 INFO [Thread-3] 2015-01-28 03:30:40,620 CassandraDaemon.java (line 463) Cassandra shutting down...
 INFO [StorageServiceShutdownHook] 2015-01-28 03:30:42,165 MessagingService.java (line 701) Waiting for messaging service to quiesce
 INFO [ACCEPT-/144.76.201.233] 2015-01-28 03:30:42,814 MessagingService.java (line 941) MessagingService has terminated the accept() thread

此异常开始时是一个 "mild" 问题 - 轻微,因为虽然它会阻止节点在发生时启动,但通常需要我再尝试 1 次才能成功启动受影响的节点。然而,大约两周前,在很长一段时间没有重新启动我的任何节点之后,我发现我现在需要更多的尝试(20 次以上)才能启动一个节点。

从堆栈跟踪来看,它看起来像是一个超时问题(在 doWaitForCore() 中);但我找不到一个设置来增加 DSE 在启动期间等待核心加载的时间,然后再放弃。堆栈跟踪中提到的核心总是相同的,我认为这是因为它是我最大的核心(约 14 亿条记录)并且加载时间最长。但是当我设法成功启动节点时,没有任何错误迹象 - 我可以像查询任何其他核心一样查询核心。

--

还有两个问题可能与上述问题相关,也可能无关。它们都在启动过程中始终出现;与第一个不同,它们不会导致启动失败(即当节点成功启动时它们也会出现)

问题 #2:无效数字:静态

ERROR [searcherExecutor-67-thread-1] 2015-01-28 04:26:49,691 SolrException.java (line 124) org.apache.solr.common.SolrException: Invalid Number: static
        at org.apache.solr.schema.TrieField.readableToIndexed(TrieField.java:396)
        at org.apache.solr.schema.FieldType.getFieldQuery(FieldType.java:697)
        at org.apache.solr.schema.TrieField.getFieldQuery(TrieField.java:343)
        at org.apache.solr.parser.SolrQueryParserBase.getFieldQuery(SolrQueryParserBase.java:741)
        at org.apache.solr.parser.SolrQueryParserBase.handleBareTokenQuery(SolrQueryParserBase.java:545)
        at org.apache.solr.parser.QueryParser.Term(QueryParser.java:300)
        at org.apache.solr.parser.QueryParser.Clause(QueryParser.java:186)
        at org.apache.solr.parser.QueryParser.Query(QueryParser.java:108)
        at org.apache.solr.parser.QueryParser.TopLevelQuery(QueryParser.java:97)
        at org.apache.solr.parser.SolrQueryParserBase.parse(SolrQueryParserBase.java:153)
        at org.apache.solr.search.LuceneQParser.parse(LuceneQParser.java:50)
        at org.apache.solr.search.QParser.getQuery(QParser.java:143)
        at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:135)
        at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:183)

我查看了我导入的数据,但找不到被错误提供为 "static" 的假设数字值。在我编写的用于将 CSV 转换为 SSTable 的 java 应用程序中,我根据字段类型将所有数值转换为 int/long/double,所以老实说,我认为这与我的数据无关。

问题 #3:无法获取信息 bean 的统计信息 com.datastax.bdp.search.solr.FilterCacheMBean

WARN [SolrSecondaryIndex myks.mycf2 index initializer.] 2015-01-28 04:26:51,770 JmxMonitoredMap.java (line 256) Could not getStatistics on info bean com.datastax.bdp.search.solr.FilterCacheMBean
java.lang.RuntimeException: java.lang.ClassCastException: org.apache.lucene.search.FieldCache$CreationPlaceholder cannot be cast to org.apache.solr.search.SolrCache
        at com.datastax.bdp.search.solr.FilterCacheMBean.getStatistics(FilterCacheMBean.java:185)
        at org.apache.solr.core.JmxMonitoredMap$SolrDynamicMBean.getMBeanInfo(JmxMonitoredMap.java:236)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getNewMBeanClassName(DefaultMBeanServerInterceptor.java:333)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:319)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
        at org.apache.solr.core.JmxMonitoredMap.put(JmxMonitoredMap.java:140)
        at org.apache.solr.core.JmxMonitoredMap.put(JmxMonitoredMap.java:51)
        at com.datastax.bdp.search.solr.core.CassandraCoreContainer.registerExtraMBeans(CassandraCoreContainer.java:679)
        at com.datastax.bdp.search.solr.core.CassandraCoreContainer.register(CassandraCoreContainer.java:427)
        at com.datastax.bdp.search.solr.core.CassandraCoreContainer.doLoad(CassandraCoreContainer.java:757)
        at com.datastax.bdp.search.solr.core.CassandraCoreContainer.load(CassandraCoreContainer.java:162)
        at com.datastax.bdp.search.solr.AbstractSolrSecondaryIndex.run(AbstractSolrSecondaryIndex.java:882)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: org.apache.lucene.search.FieldCache$CreationPlaceholder cannot be cast to org.apache.solr.search.SolrCache
        at com.datastax.bdp.search.solr.FilterCacheMBean.getStatistics(FilterCacheMBean.java:174)
        ... 16 more

我完全不知道这是什么。

--

有人遇到过这些errors/exceptions/warnings吗?你做了什么?

问题 #1:加载核心的最长等待时间被硬编码为 1 分钟。因此,您的假设是正确的:一个非常大的核心或数百个核心可能会由于加载该特定核心的时间过长而阻止节点启动。在下一个补丁版本(4.5.6、4.6.1)中,我们通过在 dse.yaml 中创建一个新选项 load_max_time_per_core 来解决这个问题。此选项允许您增加核心加载的最长等待时间,从 1 分钟开始。例如,对于 500 个内核,您需要将 load_max_time_per_core 增加到大约 3 分钟。

问题 #2: 不幸的是,我不知道是什么原因造成的。我们需要有关此的更多信息以了解其发生的原因。

问题 #3:我们目前正在调查这可能是什么。

关于问题 #2,您确定您的 solrconfig 中没有带有错误预热查询的 QuerySenderListener 吗?