На прошлой неделе я работал с некоторыми данными Logstash на моем ноутбуке. Существует около 350 индексов, которые содержат данные logstash и индекс, который содержит метаданные для Kibana 4 . При попытке запустить кластер с одним узлом мне нужно немного подождать, пока все индексы не станут доступны. Некоторые API-интерфейсы можно использовать для наблюдения за процессом запуска.
API состояния кластера предоставляет общую информацию о состоянии кластера и указывает, является ли состояние кластера зеленым, желтым или красным. Через некоторое время количество неназначенных осколков больше не менялось, но кластер все еще оставался в красном состоянии.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true' { "cluster_name" : "elasticsearch" , "status" : "red" , "timed_out" : false , "number_of_nodes" : 1 , "number_of_data_nodes" : 1 , "active_primary_shards" : 1850 , "active_shards" : 1850 , "relocating_shards" : 0 , "initializing_shards" : 0 , "unassigned_shards" : 1852 } |
Один осколок не мог быть восстановлен: 1850 были в порядке, но это должен был быть 1851. Чтобы увидеть проблему, мы можем использовать команду индексов кошек , которая покажет нам все индексы и их здоровье.
1
2
3
4
5
6
|
curl http: //localhost:9200/_cat/indices [...] yellow open logstash- 2014.02 . 16 5 1 1184 0 1 .5mb 1 .5mb red open .kibana 1 1 yellow open logstash- 2014.06 . 03 5 1 1857 0 2mb 2mb [...] |
Индекс .kibana
не пожелтел. Он состоит только из одного основного осколка, который не может быть выделен.
Перезапуск узла, закрытие и открытие индекса не помогли. Глядя наasticsearch-kopf, я мог видеть, что первичные сегменты и фрагменты реплик не были опрошены (вам нужно поставить галочку напротив «Скрыть специальное», чтобы увидеть индекс).
К счастью, есть способ вернуть кластер в желтое состояние снова. Мы можем вручную выделить основной шард на нашем узле.
Elasticsearch предоставляет API-интерфейс Cluster Reroute, который можно использовать для выделения сегмента на узле. При попытке выделить осколок индекса .kibana
я впервые получил исключение.
01
02
03
04
05
06
07
08
09
10
11
12
|
{ "commands" : [ { "allocate" : { "index" : ".kibana" , "shard" : 0 , "node" : "Jebediah Guthrie" } } ] }' [ 2015 - 01 - 30 13 : 35 : 47 , 848 ][DEBUG][action.admin.cluster.reroute] [Jebediah Guthrie] failed to perform [cluster_reroute (api)] org.elasticsearch.ElasticsearchIllegalArgumentException: [allocate] trying to allocate a primary shard [.kibana][ 0 ], which is disabled |
К счастью, сообщение уже говорит нам о проблеме: по умолчанию вам не разрешено выделять основные шарды из-за опасности потери данных. Если вы хотите выделить основной шард, вам нужно явно указать ему Elasticsearch, установив свойство allow_primary.
1
2
3
4
5
6
7
8
9
|
{ "commands" : [ { "allocate" : { "index" : ".kibana" , "shard" : 0 , "node" : "Jebediah Guthrie" , "allow_primary" : "true" } } ] }' |
Для меня это помогло, и мой осколок перераспределился, и здоровье кластера стало желтым.
Я не уверен, что вызвало проблемы, но это, скорее всего, связано с тем, как я работаю на месте. Я регулярно отправляю свой ноутбук спать, чего вы никогда не делаете на сервере. Тем не менее я несколько раз видел эту проблему локально, что оправдывает написание необходимых шагов для ее устранения.
Ссылка: | Исправление проблем распределения Elasticsearch от нашего партнера JCG Флориана Хопфа в блоге Dev Time . |