Шарды OpenSearch: Определение, размер шардов и многое другое, с примерами

Данные в индексе OpenSearch могут вырасти до огромных размеров. Для того чтобы сделать его управляемым, он разбивается на несколько осколков. Каждый осколок OpenSearch представляет собой индекс Apache Lucene, причем каждый отдельный индекс Lucene содержит подмножество документов в индексе OpenSearch. Такое разделение индексов позволяет контролировать использование ресурсов. Предельный объем индекса Apache Lucene составляет 2 147 483 519 документов.

Примеры

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

Идеальное количество шардов должно определяться в зависимости от объема данных в индексе. Как правило, оптимальный шард должен вмещать 30-50 Гбайт данных. Например, если за день в индексе накапливается около 300 Гбайт журналов приложений, то целесообразно иметь около 10 шардов.

В течение своего существования шарды могут переходить в различные состояния, в том числе:

  • Initializing (Инициализация): Начальное состояние перед использованием шарда.
  • Started (Запущен): Состояние, в котором шард активен и может принимать запросы.
  • Relocating (Перемещение): Состояние, возникающее при перемещении шардов на другой узел. Это может быть необходимо при определенных условиях, например, когда на узле, где они находятся, заканчивается дисковое пространство.
  • Unassigned: Состояние шарда, который не удалось назначить. В этом случае указывается причина. Например, если узел, на котором находится шард, больше не входит в кластер (NODE_LEFT) или если он восстанавливается в закрытый индекс (EXISTING_INDEX_RESTORED).

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

Чтобы просмотреть осколки для конкретного индекса, добавьте к URL имя индекса, например:

В результате выполнения этой команды будет получен вывод, как показано в следующем примере. По умолчанию в столбцах отображается имя индекса, имя (т.е. номер) шарда, является ли он основным или репликой, его состояние, количество документов, размер на диске, IP-адрес и ID узла.

Примечания и полезные сведения

  • Слишком большие шарды просто неэффективны. Перемещение огромных индексов по машинам требует больших затрат времени и сил. Во-первых, слияние индексов в Lucene будет выполняться дольше и потребует больше ресурсов. Кроме того, перемещение шардов по узлам для ребалансировки также займет больше времени, а время восстановления увеличится. Таким образом, разделение данных и распределение их по нескольким машинам позволяет хранить их в управляемых кусках и минимизировать риски.
  • Наличие нужного количества шардов имеет большое значение для производительности. Поэтому целесообразно планировать их заранее. Когда запросы выполняются параллельно на разных шардах, они выполняются быстрее, чем индекс, состоящий из одного шарда, но только в том случае, если каждый шард расположен на отдельном узле и в кластере достаточно узлов. В то же время шарды занимают память и дисковое пространство, как в виде индексированных данных, так и в виде метаданных кластера. Слишком большое количество шардов может замедлить выполнение запросов, индексирование и операции управления, поэтому соблюдение правильного баланса очень важно.
Понравилась статья? Поделиться с друзьями:
Добавить комментарий