Elasticsearch: что означает «распределение осколков»? - PullRequest
4 голосов
/ 20 июня 2019

Мы столкнулись с производственным инцидентом, когда проверка работоспособности кластера Elasticsearch вернула red статус.Отчет о проверке работоспособности показывает, что marvel-2019.06.20 имеет 2 unassigned_shards, что является основной причиной.

curl -XGET 'localhost:9200/_cluster/health?level=indices&pretty'

{
  "cluster_name" : "sap-jam-jam8",
  "status" : "red",
  "timed_out" : false,
  "number_of_nodes" : 2,
  "number_of_data_nodes" : 2,
  "active_primary_shards" : 122,
  "active_shards" : 239,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 7,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "indices" : {
     ...
     ...
     ".marvel-2019.06.20" : {
          "status" : "red",
          "number_of_shards" : 1,
          "number_of_replicas" : 1,
          "active_primary_shards" : 0,
          "active_shards" : 0,
          "relocating_shards" : 0,
          "initializing_shards" : 0,
          "unassigned_shards" : 2
    }
  }

мы проверили конфигурацию Elasticseach, обнаружил, что cluster.routing.allocation был отключен.

curl -XGET 'localhost:9200/_cluster/settings?pretty'
{
  "persistent" : { },
  "transient" : {
    "cluster" : {
      "routing" : {
        "allocation" : {
          "enable" : "none"
        }
      }
    }
  }
}

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1015 *

* * * * * * * * * * * * * * *1015* * * * * * * * * * * * * * * * * * * * * * * * *

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
* После того, как этот инцидент решениз основной концепции shard allocation.Я провел некоторое исследование, но следующие вопросы все еще сбивают меня с толку.

1.Почему эластичный поиск должен assign shard к другим узлам?

В моем случае у нас есть два узла эластичного поиска, A и B. Два сегмента уже созданы в A и занимают место на диске.

Когда B недоступен, почему бы просто не активировать эти два шарда на сервере A?

По крайней мере, он возвращает yellow состояние здоровья.

2.Каковы процедуры assign a shard?

В первом вопросе мы предполагаем, что и первичный осколок, и реплика были созданы на сервере A. Когда вы говорите assign shard to B, что это значит?

То есть копировать осколок с сервера А на сервер Б?

3.Как объяснить этот нулевой активный шард?

И основной шард, и его копия созданы, но не активны.Как это возможно?Помимо дискового пространства, есть ли другие накладные расходы для активации шарда?например, память?

".marvel-2019.06.20" : {
  "status" : "red",
  "number_of_shards" : 1,
  "number_of_replicas" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0, // both shards are inactive.
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 2
}

4.Верно ли следующее предположение?

Чтобы активировать осколок, Elasticsearch необходимо выполнить следующие шаги:

  • Создать осколок.
  • Найти сервер, который имеетдостаточно дискового пространства и оперативной памяти для его запуска.
  • скопируйте этот шард с исходного сервера на целевой сервер.
  • Активируйте этот шард.

Ссылка

  1. Блог Elasticsearch: Красный кластер Elasticsearch?Паника больше не

  2. Переполнение стека: эластичный поиск - что делать с неназначенными осколками

1 Ответ

0 голосов
/ 22 июня 2019

Я не эксперт, но есть некоторые мысли:

  1. У вас есть 2 узла кластера.ES попытается распределить сегменты на обоих узлах, чтобы обеспечить HA в случае сбоя одного из узлов (и даже для лучшей производительности чтения / записи)
  2. Относится к 1. ES пытается выделить сегменты через узлы для предоставления HA,Если оба сегмента размещены на узле A, и вы добавляете узел B в кластер, ES попытается переместить фрагменты реплики в B.
  3. Создается только индекс, а не сегменты.Так что он говорит: «Хорошо, мне удалось создать индекс, но я не могу найти, где разместить его данные».Вы можете выяснить, почему, запустив cat shards (https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-shards.html). Осколки стоят памяти, поскольку их метаданные должны быть кэшированы.
  4. Это, вероятно, процедура добавления осколков реплики с несколькими возможными дополнительными условиями (например, попытатьсясоздать реплику на узле, который не содержит основного сегмента, который имеет наименьшую нагрузку и может содержать данные ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...