Статьи

Исправление проблем с Elasticsearch

На прошлой неделе я работал с некоторыми данными Logstash на моем ноутбуке. Существует около 350 индексов, которые содержат данные logstash и индекс, который содержит метаданные для Kibana 4 . При попытке запустить кластер с одним узлом мне нужно немного подождать, пока все индексы не станут доступны. Некоторые API-интерфейсы можно использовать для наблюдения за процессом запуска.

API состояния кластера предоставляет общую информацию о состоянии кластера и указывает, является ли состояние кластера зеленым, желтым или красным. Через некоторое время количество неназначенных осколков больше не менялось, но кластер все еще оставался в красном состоянии.

01
02
03
04
05
06
07
08
09
10
11
12
13
{
  "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"
          }
        }
    ]
}'

Для меня это помогло, и мой осколок перераспределился, и здоровье кластера стало желтым.

kibana-перераспределены

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

Ссылка: Исправление проблем распределения Elasticsearch от нашего партнера JCG Флориана Хопфа в блоге Dev Time .