На прошлой неделе я работал с некоторыми данными 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 . |
