Skip to main content
Эти настройки доступны в system.settings и автоматически генерируются на основе исходного файла.

load_balancing

Указывает алгоритм выбора реплик, используемый для распределённой обработки запросов. ClickHouse поддерживает следующие алгоритмы выбора реплик: См. также:

Random (по умолчанию)

Для каждой реплики подсчитывается количество ошибок. Запрос отправляется на реплику с наименьшим числом ошибок, а если таких несколько — на любую из них. Недостатки: не учитывается близость сервера; если на репликах разные данные, вы также получите разные результаты.

Наиболее близкое имя хоста

Количество ошибок подсчитывается для каждой реплики. Каждые 5 минут количество ошибок целочисленно делится на 2. Таким образом, для недавнего времени количество ошибок вычисляется с экспоненциальным сглаживанием. Если есть одна реплика с минимальным количеством ошибок (то есть на других репликах ошибки возникали недавно), запрос отправляется на неё. Если есть несколько реплик с одинаковым минимальным количеством ошибок, запрос отправляется на реплику с именем хоста, наиболее похожим на имя хоста сервера в файле конфигурации (по числу различающихся символов в одинаковых позициях, до минимальной длины обоих имён хостов). Например, example01-01-1 и example01-01-2 различаются в одной позиции, а example01-01-1 и example01-02-2 — в двух. Этот метод может показаться примитивным, но он не требует внешних данных о топологии сети и не сравнивает IP-адреса, что было бы сложно в случае наших IPv6-адресов. Таким образом, если есть равноценные реплики, предпочтение отдаётся ближайшей по имени. Мы также можем предположить, что при отправке запроса на один и тот же сервер при отсутствии сбоев распределённый запрос тоже будет отправляться на одни и те же серверы. Поэтому, даже если на репликах размещены разные данные, запрос будет возвращать в основном одинаковые результаты.

Расстояние Левенштейна для имени хоста

Как и nearest_hostname, но сравнивает имена хостов по расстоянию Левенштейна. Например:

Наибольший общий префикс имени хоста

Как и nearest_hostname, но предпочтение отдаётся реплике, чьё имя хоста имеет самый длинный общий префикс с локальным именем хоста (чем длиннее общий префикс, тем выше приоритет). В отличие от nearest_hostname, который подсчитывает различающиеся символы позиция за позицией, эта стратегия не сбивается из-за имён хостов, у которых числовые части имеют разную длину. Например, для локального имени хоста sfe301:
Здесь предпочтение отдаётся sfe10101, потому что у него самый длинный общий префикс (sfe, длина 3) с sfe301. Реплики с одинаковой длиной общего префикса выбираются случайным образом. В частности, если ни одна реплика не имеет общего префикса с локальным именем хоста (все длины общих префиксов равны нулю), эта стратегия работает точно так же, как random.

Наибольший общий суффикс имени хоста

Как и hostname_longest_common_prefix, но вместо префикса сравнивается самый длинный общий суффикс. Это полезно, когда идентификатор центра обработки данных закодирован в виде суффикса имени хоста. Например, для локального имени хоста et46gtghn.qc.localdomain:
Здесь предпочтение отдаётся ab999.qc.localdomain, поскольку у него самый длинный общий суффикс (.qc.localdomain, длина 15) с et46gtghn.qc.localdomain. Реплики с одинаковой длиной общего суффикса выбираются случайным образом. В частности, если ни одна реплика не имеет общего суффикса с локальным именем хоста (то есть длина всех общих суффиксов равна нулю), эта стратегия работает точно так же, как random.

В заданном порядке

К репликам с одинаковым числом ошибок обращаются в том порядке, в котором они указаны в конфигурации. Этот метод подходит, если вы точно знаете, какая реплика предпочтительнее.

Первый либо случайный

Этот алгоритм выбирает первую реплику в наборе или случайную, если первая недоступна. Он эффективен в топологиях с перекрестной репликацией, но бесполезен в других конфигурациях. Алгоритм first_or_random решает проблему алгоритма in_order. При использовании in_order, если одна реплика выходит из строя, следующая получает двойную нагрузку, тогда как остальные реплики обрабатывают обычный объем трафика. При использовании алгоритма first_or_random нагрузка равномерно распределяется между репликами, которые остаются доступными. Можно явно задать, какая реплика считается первой, с помощью настройки load_balancing_first_offset. Это дает больше контроля над перебалансировкой рабочих нагрузок запросов между репликами.

Round Robin

Этот алгоритм использует политику round-robin для реплик с одинаковым количеством ошибок (учитываются только запросы с политикой round_robin).

load_balancing_first_offset

Указывает, в какую реплику предпочтительно отправлять запрос при использовании стратегии балансировки нагрузки FIRST_OR_RANDOM.
Последнее изменение 23 июля 2026 г.