elasticsearch – что делать с неназначенными осколками

мой кластер с желтым статусом, потому что некоторые осколки неназначены. что с этим делать?

Я попробовал set cluster.routing.allocation.disable_allocation = false для всех индексов, но я думаю, что это не работает, потому что я использую версию 1.1.1.

Я также попытался перезапустить все машины, но это случилось.

Есть идеи?

РЕДАКТИРОВАТЬ :

  • Статистика кластера:

     { cluster_name: "elasticsearch", status: "red", timed_out: false, number_of_nodes: 5, number_of_data_nodes: 4, active_primary_shards: 4689, active_shards: 4689, relocating_shards: 0, initializing_shards: 10, unassigned_shards: 758 } 

Эти неназначенные осколки являются фактически неназначенными репликами ваших фактических осколков от главного узла.

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

EDIT: Иногда неназначенные осколки относятся к индексам, которые были удалены, делая их чересчурными осколками, которые никогда не будут назначаться независимо от добавления узлов или нет. Но здесь дело обстоит не так!

Существует много причин, по которым распределение не произойдет:

  1. Вы используете разные версии Elasticsearch на разных узлах
  2. У вас есть только один узел в вашем кластере, но у вас есть количество реплик, установленных на что-то отличное от нуля.
  3. Недостаточно места на диске.
  4. У вас отключено выделение осколков.
  5. У вас включен брандмауэр или SELinux. Если SELinux включен, но не настроен должным образом, вы увидите, что навсегда застряли черепа в INITIALIZING или RELOCATING.

Как правило, вы можете устранить такие проблемы:

  1. Посмотрите на узлы в вашем кластере: curl -s 'localhost:9200/_cat/nodes?v' . Если у вас только один узел, вам нужно установить number_of_replicas 0. (См. Документацию по ES или другие ответы).
  2. Посмотрите на дисковое пространство, доступное в вашем кластере: curl -s 'localhost:9200/_cat/allocation?v'
  3. Проверьте настройки кластера: curl 'http://localhost:9200/_cluster/settings?pretty' и cluster.routing настройки cluster.routing
  4. Посмотрите, какие осколки являются UNASSIGNED curl -s localhost:9200/_cat/shards?v | grep UNASS curl -s localhost:9200/_cat/shards?v | grep UNASS
  5. Попробуйте принудительно настроить осколок

     curl -XPOST -d '{ "commands" : [ { "allocate" : { "index" : ".marvel-2014.05.21", "shard" : 0, "node" : "SOME_NODE_HERE", "allow_primary":true } } ] }' http://localhost:9200/_cluster/reroute?pretty 
  6. Посмотрите на ответ и посмотрите, что он говорит. Там будет куча ДА, которые в порядке, а затем НЕТ. Если нет NO, это, вероятно, проблема с брандмауэром / SELinux.

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

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

Затем включите кластер для перераспределения осколков (вы всегда можете включить это после того, как все сказано и сделано):

 curl -XPUT http://localhost:9200/_cluster/settings -d ' { "transient" : { "cluster.routing.allocation.enable": true } }' 

Теперь откиньтесь назад и наблюдайте, как кластер очистит неназначенные черепки реплик. Если вы хотите, чтобы это вступило в силу с будущими индексами, не забудьте изменить файл elasticsearch.yml со следующей настройкой и отказом кластера:

 index.number_of_replicas: 0 

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

Первый:

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

Затем:

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

Первые два пункта ответа от Alcanzar сделали это для меня, но мне пришлось добавить

 "allow_primary" : true 

вот так

 curl -XPOST http://localhost:9200/_cluster/reroute?pretty -d '{ "commands": [ { "allocate": { "index": ".marvel-2014.05.21", "shard": 0, "node": "SOME_NODE_HERE", "allow_primary": true } } ] }' 

Убедитесь, что версии ElasticSearch на каждом узле одинаковы. Если это не так, то ES не будет выделять копии копий индекса на «более старые» узлы.

Используя ответ @ Alcanzar, вы можете получить некоторые сообщения об ошибках диагностики:

 curl -XPOST 'http://localhost:9200/_cluster/reroute?pretty' -d '{ "commands": [ { "allocate": { "index": "logstash-2016.01.31", "shard": 1, "node": "arc-elk-es3", "allow_primary": true } } ] }' 

результат:

 { "error" : "ElasticsearchIllegalArgumentException[[allocate] allocation of [logstash-2016.01.31][1] on node [arc-elk-es3] [Xn8HF16OTxmnQxzRzMzrlA][arc-elk-es3][inet[/172.16.102.48:9300]]{master=false} is not allowed, reason: [YES(shard is not allocated to same node or host)] [YES(node passes include/exclude/require filters)] [YES(primary is already active)] [YES(below shard recovery limit of [2])] [YES(allocation disabling is ignored)] [YES(allocation disabling is ignored)] [YES(no allocation awareness enabled)] [YES(total shard limit disabled: [-1] <= 0)] *** [NO(target node version [1.7.4] is older than source node version [1.7.5]) *** [YES(enough disk for shard on node, free: [185.3gb])] [YES(shard not primary or relocation disabled)]]", "status" : 400 } 

Как определить номер версии ElasticSearch:

 [email protected]:/var/log/kibana$ curl -XGET 'localhost:9200' { "status" : 200, "name" : "arc-elk-web", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.5", "build_hash" : "00f95f4ffca6de89d68b7ccaf80d148f1f70e4d4", "build_timestamp" : "2016-02-02T09:55:30Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" } 

В моем случае я неправильно установил repository apt-get и они не синхронизировались на разных серверах. Я исправил его на всех серверах:

 echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list 

а затем обычный:

 sudo apt-get update sudo apt-get upgrade 

и окончательная перезагрузка сервера.

  • elasticsearch bool query объединяется с OR
  • Как проиндексировать PDF-файл в Elasticsearch 5.0.0 с помощью плагина ingest-attachment?
  • есть ли способ десериализации поискового запроса Elasticsearch Nest?
  • Как найти часть слова с помощью ElasticSearch
  • Максимальное ограничение на количество значений, которые я могу указать в фильтре идентификаторов или в общем случае запроса?
  • Изменение отображения по умолчанию для строки «не анализировано» в Elasticsearch
  • Сделать elasticsearch только возвращать определенные поля?
  • Найти документы с пустой строковой стоимостью на elasticsearch
  • Elasticearch 2.1: окно результатов слишком велико (index.max_result_window)
  • Как использовать Elasticsearch с MongoDB?
  • Запрос Elasticsearch для возврата всех записей
  • Interesting Posts

    C # DLL не может повлиять на значение числа, переданного по ссылке из приложения VB6

    Сделайте обновление Windows Update моей программой?

    Как я могу получить соответствующий заголовок таблицы (th) из ячейки таблицы (td)?

    Пакетное преобразование XLS в XLSX

    Может ли локальное хранилище считаться безопасным?

    Автоматическое добавление / завершение из текстового файла в поле редактирования delphi

    500 Внутренняя ошибка сервера в ASP.NET MVC

    Как я могу управлять тем, как Emacs создает файлы резервных копий?

    Как я могу получить идентификатор канала с YouTube?

    Каков наилучший способ слияния двух наборов файлов, но для дубликатов для выбора старого файла в Windows?

    Создание прозрачного windows в C ++ Win32

    Основные данные – сохранение изображений (iPhone)

    Есть ли способ определить, какая служба (в svchost.exe) выполняет исходящее соединение?

    Sublime Text 2: пользовательские PATH и PYTHONPATH

    Можно ли указать путь в атрибуте для сопоставления свойства в моем classе с дочерним свойством в моем JSON?

    Давайте будем гением компьютера.