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)
なぜこのエラーが発生するのかわかりません。データまたはインデックスを削除すると正常に機能します。考えられる原因は何でしょうか。
そのリンクをご覧ください: 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がシャードを別のノードに再配置しようとすることを意味します。また、ノードで使用可能なスペースの構成量よりも少なくなったら断片を再配置するために、絶対バイト値(最低水準点に類似)に設定することもできます。
私の場合、犯人はポート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
私はまったく同じエラーに直面し、私の場合、複数のマスターノードとデータノードがありました。マスターノードはロードバランサーに追加されましたが、データノードは追加されませんでした。そのため、マスターはデータノードと通信できませんでした。
ロードバランサーにすべてのデータノードを持ち込むとすぐに、私の問題は修正されました。