ElasticSearch: неназначенные осколки, как исправить?

У меня есть кластер ES с 4 узлами:

number_of_replicas: 1
search01 - master: false, data: false
search02 - master: true, data: true
search03 - master: false, data: true
search04 - master: false, data: true

Мне пришлось перезапустить search03, и когда он вернулся, он без проблем присоединился к кластеру, но оставил 7 неназначенных осколков.

{
  "cluster_name" : "tweedle",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 15,
  "active_shards" : 23,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 7
}

Теперь мой кластер в желтом состоянии. Как лучше всего решить эту проблему?

  • Удалить (отменить) осколки?
  • Перенести шарды на другой узел?
  • Распределить шарды по узлу?
  • Обновить "number_of_replicas" до 2?
  • Что-то совсем другое?

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

Ответьте на вопрос: я делаю что-то не так, чтобы это произошло в первую очередь? Я не очень уверен в кластере, который ведет себя таким образом при перезапуске узла.

ПРИМЕЧАНИЕ. Если по какой-то причине вы используете кластер с одним узлом, вам может просто потребоваться сделать следующее:

curl -XPUT 'localhost:9200/_settings' -d '
{
    "index" : {
        "number_of_replicas" : 0
    }
}'

person Spanky    schedule 14.11.2013    source источник


Ответы (25)


По умолчанию Elasticsearch динамически переназначает сегменты узлам. Однако, если вы отключили выделение сегментов (возможно, вы выполнили непрерывный перезапуск и забыл включить его повторно), вы можете повторно включить выделение сегментов.

# v0.90.x and earlier
curl -XPUT 'localhost:9200/_settings' -d '{
    "index.routing.allocation.disable_allocation": false
}'

# v1.0+
curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient" : {
        "cluster.routing.allocation.enable" : "all"
    }
}'

Затем Elasticsearch переназначит шарды как обычно. Это может быть медленным, рассмотрите возможность увеличения indices.recovery.max_bytes_per_sec и cluster.routing.allocation.node_concurrent_recoveries, чтобы ускорить его.

Если вы по-прежнему сталкиваетесь с проблемами, вероятно, что-то еще не так, поэтому поищите ошибки в журналах Elasticsearch. Если вы видите EsRejectedExecutionException, ваши пулы потоков могут быть слишком маленькими < / а>.

Наконец, вы можете явно переназначить сегмент узлу с помощью перенаправить API.

# Suppose shard 4 of index "my-index" is unassigned, so you want to
# assign it to node search03:
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
    "commands": [{
        "allocate": {
            "index": "my-index",
            "shard": 4,
            "node": "search03",
            "allow_primary": 1
        }
    }]
}'
person Wilfred Hughes    schedule 21.05.2014
comment
Когда я это сделал, я получил: { "error" : "ElasticsearchIllegalArgumentException[[allocate] failed to find [logstash-2015.01.05][1] on the list of unassigned shards]", "status" : 400 } Хотя я вижу, что этот шард является одним из нераспределенных в ES-Head - person wjimenez5271; 12.01.2015
comment
Между прочим, работали другие шарды, которые были указаны как нераспределенные, а затем оставшиеся исправились. - person wjimenez5271; 12.01.2015
comment
это отличный совет. - person Yehosef; 28.12.2015
comment
@willbradley Я использую эти команды в том виде, в котором они написаны, и настройки без подчеркивания. Это работает на v1.4, какую версию вы используете? - person Wilfred Hughes; 06.01.2016
comment
Начиная с версии 5.0, команда выделения была изменена, чтобы предоставить больше options - в приведенном выше примере теперь будет allocate_empty_primary, без параметра allow_primary. - person jmb; 08.05.2017
comment
Уххх, это перенаправление золотое. У нас было несколько неназначенных шардов, и мы переназначили их все новому узлу. Теперь кластер снова зеленый, спасибо за комментарий! - person atripes; 28.07.2017
comment
вам нужно добавить -H 'Content-Type: application/json', если вы получите ошибку Content-Type header [application/x-www-form-urlencoded] is not supported - person luckydonald; 07.12.2017
comment
Обновленная ссылка на документ с командой cluster / reroute, следующая вверх по комментарию jmb. Начиная с версии 5.0, allocate ближе к allocate_replica, чтобы избежать потери данных. - person Efren; 13.08.2019
comment
Почему бы просто не использовать постоянный, чтобы изменения сохранялись после непрерывного перезапуска? Измените временный на постоянный. - person radtek; 01.05.2020

Хорошо, я решил это с некоторой помощью службы поддержки ES. Выполните следующую команду API на всех узлах (или узлах, которые, по вашему мнению, являются причиной проблемы):

curl -XPUT 'localhost:9200/<index>/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

где <index> - это индекс, который, по вашему мнению, является виновником. Если вы не знаете, просто запустите это на всех узлах:

curl -XPUT 'localhost:9200/_settings' \
    -d '{"index.routing.allocation.disable_allocation": false}'

Я также добавил эту строку в свою конфигурацию yaml, и с тех пор любые перезапуски сервера / службы не возникали проблем. Осколки немедленно перераспределяются обратно.

FWIW, чтобы ответить на часто задаваемый вопрос, установите MAX_HEAP_SIZE на 30 ГБ, если на вашем компьютере не менее 60 ГБ ОЗУ, и в этом случае установите его на половину доступной памяти.

использованная литература

person Spanky    schedule 15.11.2013
comment
чтобы решить эту проблему в версии 1.1.1, следует ли использовать cluster.routing.allocation.enable = none? - person user3175226; 14.05.2014
comment
Отключение распределения больше не документируется там, по крайней мере, с 20 ноября. - person ; 20.11.2014
comment
Обратите внимание, что распределение маршрутизации - это настройка для всего кластера, поэтому не имеет значения, на какой узел вы отправляете команду. - person Wilfred Hughes; 08.01.2015
comment
Я добавил оба в свой файл es yml. index.routing.allocation.disable_allocation : false cluster.routing.allocation.enable: none Но все равно показывают неназначенные шарды .. В чем может быть причина? - person bagui; 10.01.2015
comment
В версии 6.8 выдает ошибку: { "type": "illegal_argument_exception", "reason": "unknown setting [index.routing.allocation.disable_allocation] please check that any required plugins are installed, or check the breaking changes documentation for removed settings" } ], - person Janac Meena; 13.01.2020

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

NODE="YOUR NODE NAME"
IFS=$'\n'
for line in $(curl -s 'localhost:9200/_cat/shards' | fgrep UNASSIGNED); do
  INDEX=$(echo $line | (awk '{print $1}'))
  SHARD=$(echo $line | (awk '{print $2}'))

  curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
     "commands": [
        {
            "allocate": {
                "index": "'$INDEX'",
                "shard": '$SHARD',
                "node": "'$NODE'",
                "allow_primary": true
          }
        }
    ]
  }'
done
person W. Andrew Loe III    schedule 04.11.2014
comment
Работал как шарм. Спасибо! - person Paulo Pires; 03.03.2015
comment
Я получил эту ошибку: ‹br› {error: JsonParseException [Неожиданный символ r (',' (код 44)): ожидалось допустимое значение (число, строка, массив, объект, 'true', 'false' или 'null' ) \ n в [Источник: [B @ 3b1fadfb; строка: 6, столбец: 27]], статус: 500} ‹br› что мне делать, чтобы это исправить - person biolinh; 30.03.2015
comment
Благодаря тонну! Это сэкономило драгоценное время !! - person Sathish; 17.05.2018
comment
Скрипт выдает ошибку: {"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406}{"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406} - person Janac Meena; 13.01.2020
comment
Спасибо ! У меня работал (ElasticSearch 1.4.x). - person David Goodwin; 17.10.2020

Единственное, что у меня сработало, это изменение number_of_replicas (у меня было 2 реплики, поэтому я изменил его на 1, а затем снова на 2).

Первый:

PUT /myindex/_settings
{
    "index" : {
        "number_of_replicas" : 1
     }
}

Потом:

PUT /myindex/_settings
{
    "index" : {
        "number_of_replicas" : 2
     }
}

(Я уже ответил на это в этом вопросе)

person Edi    schedule 12.04.2015
comment
Похоже, что это создаст большую нагрузку на сеть и на обработку кластеров с интенсивным использованием данных. Вы пробовали это в системе больших данных? Не могли бы вы поделиться приблизительными цифрами? - person Ricardo; 11.09.2020

Я тоже столкнулся с подобной ошибкой. Это случилось со мной, потому что один из моих узлов данных был заполнен и из-за чего не удалось выделить шарды. Если есть неназначенные осколки, и ваш кластер КРАСНЫЙ, а несколько индексов также КРАСНЫЕ, в этом случае я выполнил следующие шаги, и они сработали как чемпион.
в инструменте разработки kibana -

GET _cluster/allocation/explain

Если есть какие-либо неназначенные осколки, вы получите подробную информацию, иначе будет выдана ОШИБКА.

просто запустив команду ниже, все решит -

POST _cluster/reroute?retry_failed

Спасибо -
https://github.com/elastic/elasticsearch/issues/23199#issuecomment-280272888.

person Yogesh Jilhawar    schedule 07.09.2020

Elasticsearch автоматически выделяет осколки, если в приведенной ниже конфигурации установлено значение all. Эту конфигурацию также можно установить с помощью rest api cluster.routing.allocation.enable: все

Если даже после применения приведенной ниже конфигурации es не может автоматически назначить шарды, вам придется принудительно назначить шарды самостоятельно. официальная ссылка ES для этого

Я написал сценарий для принудительного назначения всех неназначенных шардов в кластере.

ниже массив содержит список узлов, среди которых вы хотите сбалансировать неназначенные шарды

#!/bin/bash
array=( node1 node2 node3 )
node_counter=0
length=${#array[@]}
IFS=$'\n'
for line in $(curl -s 'http://127.0.0.1:9200/_cat/shards'|  fgrep UNASSIGNED); do
    INDEX=$(echo $line | (awk '{print $1}'))
    SHARD=$(echo $line | (awk '{print $2}'))
    NODE=${array[$node_counter]}
    echo $NODE
    curl -XPOST 'http://127.0.0.1:9200/_cluster/reroute' -d '{
        "commands": [
        {
            "allocate": {
                "index": "'$INDEX'",
                "shard": '$SHARD',
                "node": "'$NODE'",
                "allow_primary": true
            }
        }
        ]
    }'
    node_counter=$(((node_counter)%length +1))
done
person Nischal Kumar    schedule 13.12.2016
comment
Этот скрипт не работал, то есть после того, как я его запустил, у меня остались НЕПРИЗНАЧЕННЫЕ осколки. - person Chris F; 21.02.2017
comment
@ChrisF В строке1: вам нужно заменить node1, node2, node3 на фактические имена узлов. Вы можете получить их с помощью curl localhost: 9200 / _cat / nodes. - person sidi; 12.03.2017

Сегодня я столкнулся с той же проблемой распределения шардов. Скрипт, который W. Эндрю Ло III, предложенный в своем ответе, не сработал для меня, поэтому я немного изменил его, и он, наконец, сработал:

#!/usr/bin/env bash

# The script performs force relocation of all unassigned shards, 
# of all indices to a specified node (NODE variable)

ES_HOST="<elasticsearch host>"
NODE="<node name>"

curl ${ES_HOST}:9200/_cat/shards > shards
grep "UNASSIGNED" shards > unassigned_shards

while read LINE; do
  IFS=" " read -r -a ARRAY <<< "$LINE"
  INDEX=${ARRAY[0]}
  SHARD=${ARRAY[1]}

  echo "Relocating:"
  echo "Index: ${INDEX}"
  echo "Shard: ${SHARD}"
  echo "To node: ${NODE}"

  curl -s -XPOST "${ES_HOST}:9200/_cluster/reroute" -d "{
    \"commands\": [
       {
         \"allocate\": {
           \"index\": \"${INDEX}\",
           \"shard\": ${SHARD},
           \"node\": \"${NODE}\",
           \"allow_primary\": true
         }
       }
     ]
  }"; echo
  echo "------------------------------"
done <unassigned_shards

rm shards
rm unassigned_shards

exit 0

Я не гуру Bash, но сценарий действительно работал в моем случае. Обратите внимание, что вам необходимо указать соответствующие значения для переменных «ES_HOST» и «NODE».

person Splanger    schedule 23.02.2016
comment
к сожалению, ES5x нарушил совместимость: elastic.co/guide/ ru / elasticsearch / reference / 5.1 / - person Fawix; 12.01.2017
comment
Чтобы приведенный выше сценарий работал с ES5x, замените allocate на allocate_empty_primary и замените \"allow_primary\": true на \"accept_data_loss\": true - person Fawix; 12.01.2017
comment
Получение {"error":"Content-Type header [application/x-www-form-urlencoded] is not supported","status":406} даже после применения предложения Фавикса - person Janac Meena; 13.01.2020

В моем случае была достигнута верхняя граница места на жестком диске.

Посмотрите эту статью: https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html.

В основном я бегал:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "90%",
    "cluster.routing.allocation.disk.watermark.high": "95%",
    "cluster.info.update.interval": "1m"
  }
}

Таким образом, он будет выделять, если используется <90% пространства на жестком диске, и перемещать осколок на другую машину в кластере, если используется> 95% пространства на жестком диске; и он проверяет каждую минуту.

person manyways    schedule 29.08.2016

В моем случае, когда я создаю новый индекс, тогда number_of_replicas по умолчанию устанавливается как 1. И число узлов в моем кластере был только один, поэтому не было дополнительного узла для создания реплики, поэтому состояние здоровья стало желтым. Итак, когда я создал индекс со свойством settings и установил number_of_replicas как 0. Тогда все заработало. Надеюсь это поможет.

PUT /customer
{
    "settings": {
        "number_of_replicas": 0
    }
}
person Apoorv Nag    schedule 22.11.2015

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

Надеюсь, это кому-то поможет! :)

person Juanjo Lainez Reche    schedule 09.04.2015

У меня тоже была эта проблема, и я нашел простой способ ее решить.

  • Получить индекс неназначенных шардов

    $ curl -XGET http://172.16.4.140:9200/_cat/shards
    
  • Установите инструменты куратора и используйте его для удаления индекса

    $ curator --host 172.16.4.140 delete indices --older-than 1 \
           --timestring '%Y.%m.%d' --time-unit days --prefix logstash
    

    ПРИМЕЧАНИЕ. В моем случае индекс - это журнал дня 2016-04-21.

  • Затем проверьте шарды еще раз, все неназначенные шарды исчезнут!
person user3391471    schedule 26.04.2016
comment
@sim, большое спасибо за редактирование моего ответа. Я очень плохо разбираюсь в редактировании, буду уделять ему больше внимания. - person user3391471; 27.05.2016
comment
Для меня это было: curator_cli --host 127.0.0.1 delete_indices --filter_list '[{"filtertype":"pattern","kind":"prefix","value":"logstash-"}]' - person Gaui; 20.02.2018

У меня была такая же проблема, но основной причиной была разница в номерах версий (1.4.2 на двух узлах (с проблемами) и 1.4.4 на двух узлах (нормально)). Первый и второй ответы (установка index.routing.allocation.disable_allocation на false и установка cluster.routing.allocation.enable на all) не сработали.

Однако ответ @Wilfred Hughes (установка "cluster.routing.allocation.enable" на "all" с использованием переходного процесса) дал мне ошибку со следующим утверждением:

[НЕТ (версия целевого узла [1.4.2] старше, чем версия исходного узла [1.4.4])]

После обновления старых узлов до версии 1.4.4 эти узлы начали повторно подключаться к другим исправным узлам.

person Jörg Rech    schedule 09.03.2015

Я тоже встречаюсь с этой ситуацией и наконец исправил ее.

Сначала опишу свою ситуацию. У меня есть два узла в кластере ElasticSearch, они могут найти друг друга, но когда я создал индекс с настройками «number_of_replicas»: 2, «number_of_shards»: 5, ES показывает желтый сигнал, а unassigned_shards - 5.

Проблема возникает из-за того, что значение number_of_replicas, когда я устанавливаю его значение на 1, все в порядке.

person Armstrongya    schedule 17.10.2014
comment
Количество реплик всегда должно равняться N-1 количеству имеющихся у вас узлов. Итак, в вашем сценарии с 2 узлами 1 из узлов содержит первичный осколок, в то время как другой узел имеет реплику, поэтому ваше количество реплик должно быть установлено равным 1. N = 2, N - 1 = 1. - person slm; 09.05.2016

Для меня это было решено путем запуска из консоли разработчика: «POST / _cluster / reroute? Retry_failed»

.....

Я начал с просмотра списка индексов, чтобы увидеть, какие индексы были красными, а затем запустил

"получить /_cat/shards?h=[INDEXNAME ],shard,prirep,state,unassigned.reason"

и увидел, что осколки застряли в состоянии ALLOCATION_FAILED, поэтому повторная попытка вызвала повторную попытку выделения.

person ScottFoster1000    schedule 14.03.2018
comment
Начиная с версии 5.6.3 команда должна иметь вид /_cat/shards/[INDEXNAME ]?h=,shard,prirep,state,unassigned.reason. - person fasantos; 21.10.2018

В моем случае к кластеру присоединялся старый узел со старыми общими ресурсами, поэтому нам пришлось отключить старый узел и удалить индексы с неназначенными шардами.

person alwe    schedule 24.06.2015

Я попробовал несколько из вышеперечисленных предложений, но, к сожалению, ни одно из них не сработало. У нас есть индекс «Журнал» в нашей нижней среде, куда приложения записывают свои ошибки. Это кластер с одним узлом. Для меня это решило то, что я проверил файл конфигурации YML для узла и убедился, что у него все еще есть настройка по умолчанию "gateway.expected_nodes: 2". Это отменяло любые другие настройки, которые у нас были. Всякий раз, когда мы создавали индекс на этом узле, он пытался распространить 3 из 5 осколков на фантомный 2-й узел. Следовательно, они будут отображаться как неназначенные, и их нельзя будет переместить на 1-й и единственный узел.

Решением было отредактировать конфигурацию, изменить параметр gateway.expected_nodes на 1, чтобы он прекратил поиск своего брата, которого никогда не найти в кластере, и перезапустил экземпляр службы Elastic. Кроме того, мне пришлось удалить индекс и создать новый. После создания индекса все шарды появились на 1-м и единственном узле, и ни один из них не был назначен.

# Set how many nodes are expected in this cluster. Once these N nodes
# are up (and recover_after_nodes is met), begin recovery process immediately
# (without waiting for recover_after_time to expire):
#
# gateway.expected_nodes: 2
gateway.expected_nodes: 1
person Daniel Knowlton    schedule 28.04.2016

Может помочь, но у меня возникла эта проблема при попытке запустить ES во встроенном режиме. Исправление заключалось в том, чтобы убедиться, что для узла установлено локальное (истинное) значение.

person JARC    schedule 02.06.2015

Другой возможной причиной неназначенных сегментов является то, что в вашем кластере работает более одной версии двоичного файла Elasticsearch.

репликация шарда из более новой версии в предыдущие не будет работать

Это может быть основной причиной неназначенных сегментов.

Elastic Documentation - непрерывный процесс обновления

person Marc Tamsky    schedule 13.10.2015

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

В моем случае это было вызвано нехваткой свободного дискового пространства на узле данных. Неназначенные сегменты все еще находятся на узле данных после перезапуска, но не распознаются мастером.

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

person Brian van Rooijen    schedule 28.10.2015

Я попытался удалить неназначенные шарды или вручную назначить их конкретному узлу данных. Это не сработало, потому что все время появлялись неназначенные осколки, а состояние здоровья было "красным" снова и снова. Затем я заметил, что один из узлов данных застрял в состоянии «перезапуска». Уменьшил количество узлов данных, убил его. Проблема больше не воспроизводится.

person thepolina    schedule 25.10.2016

У меня было два индекса с неназначенными осколками, которые, похоже, не работали с самовосстановлением. В конце концов я решил эту проблему, временно добавив дополнительный узел данных [1]. После того, как индексы стали работоспособными и все стало зеленым, я удалил лишний узел, и система смогла (снова) повторно сбалансировать и перейти в работоспособное состояние.

Рекомендуется избегать одновременного отключения нескольких узлов данных (именно так я попал в это состояние). Вероятно, мне не удалось сохранить какие-либо копии / реплики хотя бы для одного из осколков. К счастью, Kubernetes сохранил дисковое хранилище и повторно использовал его, когда я перезапустил узел данных.


... Прошло какое-то время ...

Что ж, на этот раз простое добавление узла, похоже, не сработало (после нескольких минут ожидания, чтобы что-то произошло), поэтому я начал ковыряться в REST API.

GET /_cluster/allocation/explain

Это показал мой новый узел с "decision": "YES".

Кстати, все ранее существовавшие узлы имели "decision": "NO" из-за "the node is above the low watermark cluster setting". Так что, вероятно, это был другой случай, чем тот, который я рассматривал ранее.

Затем я сделал следующий простой POST [2] без тела, который запустил процесс ...

POST /_cluster/reroute

Прочие примечания:


[1] В Kubernetes довольно легко сделать, если у вас достаточно места: просто масштабируйте набор с отслеживанием состояния через панель управления.

[2] Используя интерфейс Kibana "Dev Tools", мне не пришлось возиться с оболочками SSH / exec.

person Brent Bradburn    schedule 10.02.2019

Я просто сначала увеличил

"index.number_of_replicas"

на 1 (подождите, пока узлы не будут синхронизированы), а затем уменьшил его на 1, что эффективно удаляет неназначенные сегменты, и кластер снова становится зеленым без риска потери каких-либо данных.

Я считаю, что есть способы получше, но мне так легче.

Надеюсь это поможет.

person Yusuf Demirag    schedule 04.06.2019

При работе с поврежденными шардами вы можете установить коэффициент репликации равным 0, а затем вернуть его к исходному значению. Это должно очистить большую часть, если не все ваши поврежденные шарды, и переместить новые реплики в кластер.

Настройка индексов с неназначенными репликами для использования коэффициента репликации 0:

curl -XGET http://localhost:9200/_cat/shards |\
  grep UNASSIGNED | grep ' r ' |\
  awk '{print $1}' |\
  xargs -I {} curl -XPUT http://localhost:9200/{}/_settings -H "Content-Type: application/json" \
  -d '{ "index":{ "number_of_replicas": 0}}'

Вернем их к 1:

curl -XGET http://localhost:9200/_cat/shards |\
  awk '{print $1}' |\
  xargs -I {} curl -XPUT http://localhost:9200/{}/_settings -H "Content-Type: application/json" \
  -d '{ "index":{ "number_of_replicas": 1}}'

Примечание. Не запускайте это, если у вас разные факторы репликации для разных индексов. Это жестко закодирует коэффициент репликации для всех индексов равным 1.

person bonzofenix    schedule 26.07.2019

Это также может быть причиной дискового пространства. В Elasticsearch 7.5.2 по умолчанию, если использование диска превышает 85%, то шарды реплик не назначаются никакому другому узлу.

Это можно исправить, установив другой порог или отключив его в .yml или через Kibana.

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.disk.threshold_enabled": "false"
  }
}
person M.abdelrhman    schedule 05.09.2020

Сначала используйте API работоспособности кластера, чтобы получить текущее состояние кластера, где КРАСНЫЙ означает отсутствие одного или нескольких первичных сегментов, а желтый означает отсутствие одного или нескольких реплик.

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

Как только вы выясните точную основную причину, попробуйте решить проблему, которая часто требует изменения нескольких настроек кластера (упомянутых в ответе @wilfred ранее) Но в некоторых случаях, если это шарды реплик и у вас есть другая копия того же шарда (т. е. другая реплика), вы можете уменьшить количество реплик, используя обновить настройку реплики, а затем снова увеличить ее, если вам это нужно.

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

person user156327    schedule 22.12.2020