Шард Elasticsearch - это единица, которая позволяет движку Elasticsearch распределять данные в кластере. В Elasticsearch мы говорим, что кластер является "сбалансированным", если он содержит равное количество шардов на каждом узле, без большой концентрации шардов на одном узле. В зависимости от того, как вы настроите Elasticsearch, он может автоматически выполнять ребалансировку шардов в вашем кластере для повышения производительности.
Автоматическая ребалансировка шардов выполняется с учетом ограничений и правил, таких как фильтрация распределения и принудительная осведомленность, что позволяет добиться максимальной эффективности и сбалансированности кластера.
Не путайте перераспределение осколков (shard reallocation), представляющее собой процесс поиска и перемещения не назначенных осколков на узлы, на которых они находятся, с ребалансировкой. При перераспределении назначенные шейды равномерно перемещаются на различные узлы, что позволяет равномерно распределить шейды по узлам.
Как включить автоматическую ребалансировку
Чтобы включить автоматическую ребалансировку кластера в Elasticsearch, мы можем воспользоваться конечной точкой API PUT request to_cluster и добавить необходимые нам настройки.
Для динамической ребалансировки шардов доступны следующие настройки:
- cluster.routing.rebalance.enable: Управляет автоматической ребалансировкой для различных типов шардов, например:
- All: Включает ребалансировку шардов для всех индексов.
- None: Отключает ребалансировку шардов для всех индексов.
- Replicas: Разрешается ребалансировка только реплик.
- Primary: разрешена ребалансировка только первичного шарда.
- cluster.routing.allocation.allow_rebalance: Устанавливает значение для ребалансировки шардов. Опции включают:
- Always: Включает ребалансировку на неопределенный срок.
- Indices_primaries_active: Разрешает ребалансировку только тогда, когда все первичные шарды в кластере распределены.
- Indices_all_active: Позволяет выполнять ребалансировку, когда в кластере выделены только шарды. Сюда входят как первичные, так и реплики шардов.
- cluster.routing.allocation.cluster.concurrent.rebalance: Эта опция задает количество одновременных ребалансировок, разрешенных в кластере. Значение по умолчанию равно 2.
Рассмотрим приведенный ниже запрос для разрешения автоматической ребалансировки шардов в кластере.
1 2 3 4 5 6 7 8 | PUT /_cluster/settings { "persistent": { "cluster.routing.rebalance.enable": "primaries", "cluster.routing.allocation.allow_rebalance": "always" , "cluster.routing.allocation.cluster_concurrent_rebalance":"2" } } |
Ниже приведена команда cURL:
1 | curl -XPUT "http://localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'{"persistent": { "cluster.routing.rebalance.enable": "primaries", "cluster.routing.allocation.allow_rebalance": "always" , "cluster.routing.allocation.cluster_concurrent_rebalance": "2" }}'' |
Эта команда должна вернуть ответ, так как JSON-объект подтверждает обновленные настройки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "acknowledged": true, "persistent" : { "cluster" : { "routing" : { "rebalance" : { "enable" : "primaries" }, "allocation" : { "allow_rebalance" : "always", "cluster_concurrent_rebalance" : "2" } } } }, "transient" : { } } |
Ручная ребалансировка индексов
Вы также можете вручную перебалансировать шард для определенного индекса. Я бы не рекомендовал использовать этот вариант, поскольку стандартные опции ребалансировки Elasticsearch очень эффективны.
Однако если возникнет необходимость выполнить ручную ребалансировку, можно воспользоваться следующим запросом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "acknowledged": true, "persistent" : { "cluster" : { "routing" : { "rebalance" : { "enable" : "primaries" }, "allocation" : { "allow_rebalance" : "always", "cluster_concurrent_rebalance" : "2" } } } }, "transient" : { } } |
1 | curl -XPOST "http://localhost:9200/_cluster/reroute" -H 'Content-Type: application/json' -d'{ "commands" : [ { "move" : { "index" : "kibana_sample_data_flights", "shard" : 0, "from_node" : "instance-0000000001", "to_node" : "instance-0000000002" } } ]}' |
Следует помнить, что при выполнении ручной ребалансировки Elasticsearch может автоматически перемещать шарды для обеспечения наилучшей ребалансировки.
Заключение
В этом руководстве мы рассмотрели обновление и изменение настроек кластера Elasticsearch для включения автоматической ребалансировки шардов. В статье также рассмотрена ручная ребалансировка, если она вам необходима.