Первичный осколок неактивен или не назначен - это известный node?

Я запускаю эластичную версию поиска 4.1 на окнах 8. Я пытался индексировать документ через 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)

Я не могу понять, почему эта ошибка возникает. При удалении данных или индекса он работает нормально. Что может быть возможной причиной этого.

Ответ 1

вы должны посмотреть на эту ссылку: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-allocation.html

и эта часть в частности:

cluster.routing.allocation.disk.watermark.low контролирует низкий уровень водяной знак для использования диска. Он по умолчанию равен 85%, то есть ES не будет выделять новые осколки узлам, если они имеют более 85% используемого диска. Он также может быть установлен на абсолютное значение байта (например, 500 МБ) для предотвращения ES от распределения осколков, если меньше заданного объема пространства доступен.

cluster.routing.allocation.disk.watermark.high контролирует высокий уровень Водяной знак. Он по умолчанию равен 90%, то есть ES будет пытаться переместить осколки к другому node, если использование диска node превышает 90%. Оно может также должно быть установлено абсолютное значение байта (аналогично низкому водяному знаку) чтобы переместить осколки раз меньше сконфигурированного количества пространства доступный на node.

Ответ 2

В моем случае виновником был порт 9300. Он был заблокирован.

Elasticsearch будет привязываться к одному порту как для HTTP, так и для node/транспортные API.

Сначала он попробует самый низкий доступный порт, и если он уже сделан, попробуйте следующее. Если вы запустите одиночный node на вашем компьютере, это будет привязать к 9200 и 9300.

Итак, я разблокировал порт 9300, и мне было хорошо идти.

В REDHAT linux для разблокирования порта.

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