Дисковое пространство кластера AWS Elasticsearch не сбалансировано между экземплярами данных

Фон

У меня есть управляемый AWS кластер Elascsearch v6.0 с 14 экземплярами данных.

Он имеет временные индексы, такие как data-2010-01, ..., data-2020-01.

Проблема

Свободное пространство для хранения очень неравномерно по инстансам, что я вижу в консоли AWS:

введите здесь описание изображения

Я заметил, что это распределение меняется каждый раз, когда сервисы AWS проходят сине-зеленое развертывание. Это происходит при изменении настроек кластера или при выпуске обновления AWS.

Иногда сине-зеленый приводит к тому, что в одном из экземпляров полностью заканчивается место. Когда это происходит, сервис AWS запускает еще один сине-зеленый, и это устраняет проблему без влияния на клиента. (Хотя это влияет на мой сердечный ритм!)

Размер сегмента

Размер осколков для наших индексов составляет гигабайты, но меньше Elasticsearch рекомендация от 50GB. Однако размер сегмента зависит от индекса. Многие наши старые индексы содержат всего несколько документов.

Вопрос

Алгоритм балансировки AWS плохо балансируется и каждый раз приводит к разным результатам, что является неожиданным.

Мой вопрос заключается в том, как алгоритм выбирает, какие осколки выделить для какого экземпляра, и могу ли я самостоятельно устранить этот дисбаланс?


person gondalez    schedule 09.01.2020    source источник


Ответы (1)


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

Короче говоря:

  • AWS Elasticsearch распределяет сегменты на основе количества сегментов, а не размера сегментов, поэтому по возможности поддерживайте баланс размеров сегментов.
  • Если ваш кластер настроен для распределения по трем зонам доступности, сделайте количество экземпляров данных кратным трем.

Мое дело

Каждый из моих 14 экземпляров получает ~100 shards вместо ~100 GB каждый.

Помните, что у меня много относительно пустых индексов. Это приводит к смешению маленьких и больших осколков, что вызывает дисбаланс, когда AWS Elasticsearch (непреднамеренно) выделяет экземпляру много больших осколков.

Это еще больше усугубляется тем фактом, что мой кластер настроен на распределение по 3 зонам доступности, а количество экземпляров данных (14) не делится на 3.

Увеличение количества экземпляров данных до 15 (или уменьшение до 12) решило проблему.

Из документов AWS Elasticsearch в нескольких зонах доступности:

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

Дальнейшее улучшение

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

В моем случае я могу объединить старые индексы, например. data-2019-01 ... data-2019-12 -> data-2019.

person gondalez    schedule 09.01.2020