Я использую эластичный поиск версии 4.1 в Windows 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)

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

19
Prem Singh Bist 18 Дек 2014 в 15:55
Если в какой-то момент у вас было больше узлов в вашем кластере, и вы остановили тот, где находился основной сегмент, то это могло быть одной из причин указанной выше ошибки.
 – 
Andrei Stefan
18 Дек 2014 в 19:24
Эта ошибка возникла у меня, когда я попытался найти данные из плагина смысла, добавив некоторый фильтр в тело в Chrome, когда я забыл добавить тег _search. В результате в схему добавлено и содержимое этого фильтра. После этого я не могу запрашивать или выполнять другие операции. Подскажите, пожалуйста, как решить эту проблему, если возникнет такая проблема.
 – 
Prem Singh Bist
19 Дек 2014 в 12:37

4 ответа

Лучший ответ

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

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

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

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

22
Alexandre Mélard 19 Янв 2015 в 16:41
10
В моем случае на жестком диске еще много свободного места
 – 
Aminah Nuraini
26 Янв 2016 в 14:18
Спасибо (+1) - это было полезно. На нашем сервере приложений в облаке закончилось место на жестком диске, и мы изменили его размер и увеличили размер раздела. Приложение работало нормально, но ES пришлось перезапустить после изменения, которое мы не делали, и именно поэтому мы получали указанную выше ошибку на ES.
 – 
Anupam
29 Сен 2020 в 12:24
Ссылка на эту страницу больше не существует. Не могли бы вы воспроизвести здесь полезные фрагменты?
 – 
marklark
16 Мар 2021 в 02:39

Проблема : кажется, что elasticsearch перестает отправлять данные в kibana из-за превышения дискового пространства. Вы получаете org.elasticsearch.action.UnavailableShardsException и тайм-аут в связи с тем, что ваш основной сегмент неактивен . Чтобы укрепить теорию - запустите sudo df -h, и вы, вероятно, получите высокий процент объемов данных из /var/data на вашем компьютере.

Объяснение: согласно документации по Распределение сегментов дискового пространства elasticserach, Elasticsearch учитывает доступное дисковое пространство на узле, прежде чем принять решение о выделении новых сегментов этому узлу или активном перемещении сегментов с этого узла. У вас есть 4 переменные, которые необходимо установить, чтобы переопределить выделение сегмента дискового пространства по умолчанию.

1. cluster.routing.allocation.disk.threshold_enabled По умолчанию установлено значение true. Установите значение false, чтобы отключить решение о выделении диска. 2. cluster.routing.allocation.disk.watermark.low Управляет низким уровнем водяной знак для использования диска. По умолчанию он составляет 85%, что означает, что Elasticsearch не будет выделять шарды узлам, имеющим более Использовано 85% диска. Он также может быть установлен в абсолютное значение байта (например, 500 МБ), чтобы Elasticsearch не выделял осколки, если их размер меньше указанное количество места доступно. Этот параметр не действует на первичных осколках вновь созданных индексов, но предотвратит их реплики от размещения.

3. cluster.routing.allocation.disk.watermark.high Управляет высоким водяной знак. По умолчанию это 90%, что означает, что Elasticsearch попытается для перемещения шардов от узла, использование диска которого превышает 90%. Это также может быть установлено абсолютное значение байта (аналогично младшему водяной знак), чтобы переместить сегменты подальше от узла, если он имеет меньше указанное количество свободного места. Этот параметр влияет на распределение все шарды, выделенные ранее или нет.

4. cluster.routing.allocation.disk.watermark.flood_stage Управляет водяной знак стадии наводнения. По умолчанию это 95%, что означает, что Elasticsearch обеспечивает блок индекса только для чтения (index.blocks.read_only_allow_delete) по каждому индексу, который имеет один или несколько сегментов, выделенных на узле, который имеет хотя бы один диск, превышающий стадию флуда. Это последнее средство чтобы узлам не хватало места на диске. Индексный блок автоматически освобождается, когда использование диска становится ниже максимального водяной знак.

Решение . Теперь давайте выполним вызов API, отредактируем конфигурацию и увеличим ограничение на выделение сегментов дискового пространства (с 90 по умолчанию до 95–97%):

 curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/_cluster/settings' 
-d '{  "transient":{
 "cluster.routing.allocation.disk.watermark.low":"95%",
"cluster.routing.allocation.disk.watermark.high": "97%",
"cluster.routing.allocation.disk.watermark.flood_stage": "98%",
"cluster.info.update.interval": "1m"
}}'
6
avivamg 4 Май 2020 в 17:26

В моем случае виноват порт 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 20 Дек 2016 в 16:16

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

Как только я вывел все узлы данных в балансировщик нагрузки, моя проблема была исправлена.

0
avp 4 Янв 2019 в 03:31