Предварительные требования
- Вашему сервису требуется 2 или более реплики. В сервисе с одной репликой привязывать попросту не к чему.
- По умолчанию доступно на уровне Enterprise после выхода возможности в GA.
- Поддерживается в стандартных сервисах ClickHouse Cloud. BYOC пока не поддерживается.
Настройка маршрутизации с учетом реплик
session_id, пока не получите подтверждение; X-ClickHouse-Replica-Tag не обеспечит липкую маршрутизацию, пока развертывание не дойдет до вашего сервиса. Перезапуск не требуется.
Маршрутизация на основе HTTP
- X-ClickHouse-Replica-Tag (предпочтительный)
- session_id (legacy)
Чтобы закрепить рабочую нагрузку за репликой, передавайте заголовок Для clickhouse-go (v2) укажите
X-ClickHouse-Replica-Tag через HTTPS-интерфейс. Прокси применяет согласованное хеширование к значению заголовка, поэтому запросы с одинаковым значением направляются к одной и той же реплике, пока число реплик не меняется. Другое значение хешируется независимо и может попасть на ту же или другую реплику, но выбрать, какой именно реплике будет соответствовать значение, нельзя.Используйте существующее имя хоста сервиса. Специальные закреплённые имена хостов или изменения DNS не требуются. Значением заголовка может быть любая строка на ваш выбор, например имя приложения, идентификатор пользователя или метка рабочей нагрузки. Для запросов без заголовка сохраняется обычная балансировка нагрузки.Указывайте заголовок X-ClickHouse-Replica-Tag в каждом запросе:Protocol: clickhouse.HTTP и передайте заголовок через параметр подключения HttpHeaders.X-ClickHouse-Replica-Tag обеспечивает закрепление за репликой без создания HTTP-сеанса ClickHouse. Параллельные запросы могут использовать один и тот же тег, не сталкиваясь с SESSION_IS_LOCKED.Согласованность чтения после записи
В сервисе с несколькими репликами запись, выполненная на одной реплике, может быть не видна на других, пока репликация не завершится. Отправьте запись с заголовкомX-ClickHouse-Replica-Tag, а затем используйте то же значение заголовка при последующих операциях чтения. Прокси направит оба запроса на одну и ту же реплику, поэтому вы сможете прочитать собственную запись, даже если другие реплики всё ещё отстают. Этот подход подходит для рабочих нагрузок, при которых данные записываются, а затем сразу считываются, например для интерактивных приложений или задач ETL, проверяющих вставки перед продолжением работы.Для более строгих гарантий на всех репликах можно также установить select_sequential_consistency в значение 1 в ClickHouse Cloud.Проверьте, к какой реплике вы подключены
Снова выполните примерSELECT hostName() с тем же значением X-ClickHouse-Replica-Tag. Пока число реплик не изменится, вы должны получить то же имя хоста. Другое значение заголовка может соответствовать другой реплике.Устаревшая маршрутизация на основе поддоменов
Как работает устаревшая маршрутизация на основе поддоменов
Как работает устаревшая маршрутизация на основе поддоменов
Ранее включение маршрутизации с учетом реплик позволяло использовать подстановочный поддомен для имени хоста сервиса. Для сервиса с именем хоста
abcxyz123.us-west-2.aws.clickhouse.cloud любое имя хоста, соответствующее шаблону *.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud (например, aaa.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud), Envoy по хешу направлял на одну и ту же реплику. Исходное имя хоста по-прежнему использовало балансировку нагрузки LEAST_CONNECTION — алгоритм маршрутизации по умолчанию.Ограничения маршрутизации с учетом реплик
Привязка меняется при изменении числа реплик
Маршрутизация с учетом реплик не является изоляцией рабочих нагрузок
Private Link и устаревший метод с поддоменом
*.sticky.*, а неправильная настройка может привести к неравномерному распределению нагрузки между репликами.
Для маршрутизации с учетом реплик требуется HTTP-протокол
Устранение неполадок
- Убедитесь, что используете метод маршрутизации, доступный для вашего сервиса: заголовок
X-ClickHouse-Replica-Tagили устаревший URL-параметр запросаsession_id. - Убедитесь, что во всех запросах используется точно одно и то же значение маршрутизации.
- Немного подождите после включения. Изменения могут вступить в силу менее чем за минуту.
- Проверьте, не изменилось ли недавно количество реплик: после масштабирования ожидается переназначение. Используйте
SELECT hostName(), чтобы определить новое соответствие.