web-dev-qa-db-ja.com

プライマリシャードがアクティブでないか、既知のノードが割り当てられていませんか?

Windows 8でElastic Searchバージョン4.1を実行しています。Javaを使用してドキュメントのインデックスを作成しようとしました。 JUNITテストを実行すると、次のようなエラーが表示されます。

org.elasticsearch.action.UnavailableShardsException: [wms][3] Primary shard is not active or isn't assigned is a known node. Timeout: [1m], request: index {[wms][video][AUpdb-bMQ3rfSDgdctGY], source[{
    "fleetNumber": "45",
    "timestamp": "1245657888",
    "geoTag": "73.0012312,-123.00909",
    "videoName": "timestamp.mjpeg",
    "content": "ASD123124NMMM"
}]}
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.retryBecauseUnavailable(TransportShardReplicationOperationAction.Java:784)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.doStart(TransportShardReplicationOperationAction.Java:402)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$3.onTimeout(TransportShardReplicationOperationAction.Java:500)
    at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.Java:239)
    at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.Java:497)
    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:722)

なぜこのエラーが発生するのかわかりません。データまたはインデックスを削除すると正常に機能します。考えられる原因は何でしょうか。

17
Prem Singh Bist

そのリンクをご覧ください: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-allocation.html

特にその部分:

cluster.routing.allocation.disk.watermark.lowは、ディスク使用量の最低水準点を制御します。デフォルトは85%です。これは、85%を超えるディスクが使用されると、ESは新しいシャードをノードに割り当てないことを意味します。使用可能なスペースが構成された量より少ない場合にESがシャードを割り当てないように、絶対バイト値(500mbなど)に設定することもできます。

cluster.routing.allocation.disk.watermark.highは最高水準点を制御します。デフォルトは90%です。これは、ノードのディスク使用率が90%を超えると、ESがシャードを別のノードに再配置しようとすることを意味します。また、ノードで使用可能なスペースの構成量よりも少なくなったら断片を再配置するために、絶対バイト値(最低水準点に類似)に設定することもできます。

17

私の場合、犯人はポート9300でした。ブロックされました。

Elasticsearchは、HTTPとノード/トランスポートAPIの両方の単一ポートにバインドします。

使用可能な最も低いポートを最初に試し、既に使用されている場合は、次を試します。マシンで単一のノードを実行すると、9200と9300にのみバインドされます。

それで、ポート9300のブロックを解除しました。

REDHAT linuxでは、ポートのブロックを解除します。

Sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
Sudo firewall-cmd --reload
Sudo iptables-save | grep 9300
1
Zeeshan

私はまったく同じエラーに直面し、私の場合、複数のマスターノードとデータノードがありました。マスターノードはロードバランサーに追加されましたが、データノードは追加されませんでした。そのため、マスターはデータノードと通信できませんでした。

ロードバランサーにすべてのデータノードを持ち込むとすぐに、私の問題は修正されました。

0
avp