Elasticsearch - это распределенная система, предназначенная для поддержания доступности данных даже в тех случаях, когда отдельные узлы Elasticsearch становятся недоступными. По этой причине Elasticsearch создает реплики шардов. Если один из узлов выходит из строя или становится недоступным, то реплицированный шард становится основным, а взамен потерянного создается новая реплика.
По умолчанию Elasticsearch гарантирует, что копия шарда никогда не будет создана на том же узле, что и основной шард, чтобы избежать гипотетической ситуации, когда ОБЕ копии шарда находятся на одном и том же аварийном узле, и ни одна из них не доступна.
Зональная осведомленность позволяет расширить эту концепцию еще на один шаг. Что произойдет, если вместо одного сервера выйдет из строя целая стойка серверов из-за проблем с сетью или электропитанием? Если первичный и копирующий шарды находятся на двух разных серверах, но в одной зоне доступности, мы все равно можем потерять и первичный, и копирующий шарды - наш индекс окажется недоступным.
Чтобы этого не произошло, существует функция, называемая "зональной осведомленностью". Она заключается в определении "зон доступности" в центре обработки данных, где каждая "зона доступности" максимально независима от других (с точки зрения электропитания, сетевого взаимодействия и т.д.). Затем указываем Elasticsearch, какие узлы находятся в той или иной "зоне доступности", и просим Elasticsearch распределить первичный и репликовый шарды по максимально возможному количеству зон доступности.
Многие коммерческие центры обработки данных используют концепцию "зон доступности". Например, в AWS буква в имени кластера (a,b,c) будет означать различную зону доступности - eu-central-1b, eu-central-1c и т.д.
Как настроить информирование о зонах
Вставьте следующие строки в файл elasticsearch.yml для каждого узла в кластере:
1 2 | node.attr.availabilityzone: az1 cluster.routing.allocation.awareness.attributes: availabilityzone |
Как правило, используется 2 или 3 зоны доступности, например, az1, az2 и az3.
Перезапустите каждый узел. После этого вы должны увидеть, что копирующие шарды никогда не будут создаваться в той же зоне доступности, что и основной шард.
О чем следует помнить
- Следует помнить, что зональная осведомленность работает в сочетании с другими правилами выделения шардов, такими как использование диска. Если эти правила вступят в конфликт, то кластер может стать "желтым" из-за невозможности выделения реплик шардов. Например, если вы потеряете один узел и не замените его немедленно, возможно, что у других узлов в той же зоне не хватит дискового пространства для хранения всех реплик, необходимых в данной зоне доступности. Это может привести кластер к состоянию Yellow.
- Убедитесь, что количество узлов в каждой зоне доступности сбалансировано, иначе возникнет дисбаланс по количеству шардов и объему данных на узлах.
- Несмотря на важность независимости зон доступности, не стоит доходить до крайностей и размещать узлы в географически разделенных центрах обработки данных, если только между ними нет очень хорошего соединения.