Elasticsearch:启动后NoShardAvailableActionException

Son*_*123 2 java exception elasticsearch

我通过upstart启动我的Java应用程序和Elasticsearch 1.4.2.有时,当我重新启动服务器时,我会收到NoShardAvailableActionException前5个文档请求中的内容.

我的应用程序首先从Elasticsearch读取了一些文档,而Elasticsearch似乎还没有准备好.当我等待一点并重新启动我的应用程序时,一切正常.

如何检查我的Elasticsearch集群(我只有1个节点)是否已准备好获取文档?

我已经尝试检查群集状态,但即使它已经是黄色,我有时会得到NoShardAvailableActionException:

private static void checkClusterStateNotRed() throws Exception {
    while(clusterState() == ClusterHealthStatus.RED) {
        Logger.info("Elasticsearch cluster state is red);
        Thread.sleep(1000);
    }
}

private static ClusterHealthStatus clusterState() throws Exception {
    return ElasticsearchClient.getInstance()
            .admin().cluster()
            .clusterStats(new ClusterStatsRequest())
            .get()
            .getStatus();
}
Run Code Online (Sandbox Code Playgroud)

Vin*_*han 6

我觉得你不是在等待碎片被恢复并准备开放请求.通常需要一些时间.

client.admin().cluster().prepareHealth().setWaitForYellowStatus().execute().actionGet(5000)
Run Code Online (Sandbox Code Playgroud)

在拨打电话之前使用此代码.在完全恢复分片并且群集恢复到至少黄色状态之前,这将等待至少5秒.