elasticsearch – что делать с неназначенными осколками
мой кластер с желтым статусом, потому что некоторые осколки неназначены. что с этим делать?
Я попробовал set cluster.routing.allocation.disable_allocation = false
для всех индексов, но я думаю, что это не работает, потому что я использую версию 1.1.1.
Я также попытался перезапустить все машины, но это случилось.
- Как изменить максимальный размер памяти Elasticsearch
- Запросы против фильтров
- no зарегистрирован для
- Расчет времени между событиями
- Импортировать / индексировать файл JSON в Elasticsearch
Есть идеи?
РЕДАКТИРОВАТЬ :
-
Статистика кластера:
{ 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 }
- FIELDDATA Данные слишком велики
- Как получить уникальный счетчик поля с помощью Kibana + Elastic Search
- Репликация Elasticsearch других системных данных?
- Осколки и реплики в Elasticsearch
- Удаление дубликатов документов из поиска в Elasticsearch
- Кодировка UTF8 длиннее максимальной длины 32766
- Как не анализировать в ElasticSearch?
- ES продолжает возвращать каждый документ
Эти неназначенные осколки являются фактически неназначенными репликами ваших фактических осколков от главного узла.
Чтобы назначить эти осколки, вам нужно запустить новый экземпляр elasticsearch для создания вторичного узла для переноса реплик данных.
EDIT: Иногда неназначенные осколки относятся к индексам, которые были удалены, делая их чересчурными осколками, которые никогда не будут назначаться независимо от добавления узлов или нет. Но здесь дело обстоит не так!
Существует много причин, по которым распределение не произойдет:
- Вы используете разные версии Elasticsearch на разных узлах
- У вас есть только один узел в вашем кластере, но у вас есть количество реплик, установленных на что-то отличное от нуля.
- Недостаточно места на диске.
- У вас отключено выделение осколков.
- У вас включен брандмауэр или SELinux. Если SELinux включен, но не настроен должным образом, вы увидите, что навсегда застряли черепа в INITIALIZING или RELOCATING.
Как правило, вы можете устранить такие проблемы:
- Посмотрите на узлы в вашем кластере:
curl -s 'localhost:9200/_cat/nodes?v'
. Если у вас только один узел, вам нужно установитьnumber_of_replicas
0. (См. Документацию по ES или другие ответы). - Посмотрите на дисковое пространство, доступное в вашем кластере:
curl -s 'localhost:9200/_cat/allocation?v'
- Проверьте настройки кластера:
curl 'http://localhost:9200/_cluster/settings?pretty'
иcluster.routing
настройкиcluster.routing
- Посмотрите, какие осколки являются UNASSIGNED
curl -s localhost:9200/_cat/shards?v | grep UNASS
curl -s localhost:9200/_cat/shards?v | grep UNASS
-
Попробуйте принудительно настроить осколок
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
-
Посмотрите на ответ и посмотрите, что он говорит. Там будет куча ДА, которые в порядке, а затем НЕТ. Если нет 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
и окончательная перезагрузка сервера.