session_id.
Предварительные требования
- Вашему сервису требуется 2 или более реплики. В сервисе с одной репликой привязывать попросту не к чему.
- Сервис должен быть запущен. Вывод неактивного сервиса из спящего режима может изменить, какой реплике соответствует
session_id. - По умолчанию доступно на уровне Enterprise после выхода возможности в GA.
- Поддерживается в стандартных сервисах ClickHouse Cloud. BYOC пока не поддерживается.
Настройка маршрутизации с учетом реплик
?session_id= в HTTPS-запросах. Перезапуск не требуется.
Маршрутизация на основе HTTP (session_id)
session_id в интерфейсе HTTPS. Прокси использует согласованное хеширование по этому значению для выбора реплики, поэтому все запросы с одинаковым session_id направляются на один и тот же сервер, пока не изменится топология кластера.
Используйте существующее имя хоста сервиса. Никаких специальных sticky-хостов или изменений DNS не требуется.
session_id=my-workload-1 попадает на одну и ту же реплику. Другое значение session_id хэшируется независимо и может попасть на ту же или на другую реплику. Соответствие остаётся постоянным, но выбрать, на какую именно реплику попадёт конкретное значение, нельзя.
session_id — это любая строка на ваш выбор (имя приложения, идентификатор пользователя или метка рабочей нагрузки). Запросы без session_id сохраняют обычную балансировку нагрузки.
Подойдёт любой HTTP-клиент, который умеет добавлять параметр запроса, включая curl, clickhouse-connect, JDBC/ODBC и другие. Для clickhouse-go (v2) используйте режим HTTP, как указано выше.
Проверьте, на какую реплику вы попали
SELECT hostName() с тем же session_id. Вы должны получить то же имя хоста. Другой session_id может направить вас на другую реплику.
Маршрутизация на основе поддоменов (устарело)
УстарелоОписанный ниже механизм на основе поддоменов устарел и больше не включается для новых сервисов. Он не масштабируется (для каждой sticky-конечной точки требуется собственный TLS-сертификат). Вместо него используйте HTTP-метод
session_id. Если вы уже используете sticky-поддомены, обратитесь в поддержку, чтобы включить маршрутизацию session_id. Это обратно несовместимое изменение, и потребуется миграция.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 — алгоритм маршрутизации по умолчанию.
Ограничения маршрутизации с учетом реплик
Привязка может нарушиться при изменениях сервиса
session_id могут попасть на другой серверный под. Если вы используете временные таблицы или настройки на уровне сеанса, будьте готовы создать их заново после переназначения.
Маршрутизация с учетом реплик не является изоляцией рабочих нагрузок
Private Link и устаревший метод с поддоменом
session_id работает с частным сетевым подключением на стандартном хосте вашего сервиса. Дополнительные записи DNS не требуются.
Устаревший метод с поддоменом так не работает: нужно добавить DNS для шаблона хоста *.sticky.*, а неправильная настройка может привести к неравномерному распределению нагрузки между репликами.
Для маршрутизации с учетом реплик требуется HTTP-протокол
session_id, который существует только в HTTP/HTTPS-интерфейсе. Собственный бинарный протокол не передает такой параметр, по которому прокси мог бы вычислить хеш, поэтому маршрутизация с учетом реплик недоступна через собственный протокол. На сегодняшний день, чтобы использовать эту возможность, клиентам собственного протокола необходимо перенести соответствующую рабочую нагрузку на HTTP-интерфейс.
Устранение неполадок
session_id
- Убедитесь, что
session_id— это query parameter в URL (?session_id=...), а не HTTP-заголовок. - После включения немного подождите. Изменения могут вступить в силу меньше чем за минуту.
- Проверьте, не масштабировался и не перезапускался ли сервис недавно; после изменений топологии перепривязка ожидаема. Используйте
SELECT hostName(), чтобы определить новую привязку.