Есть ли способ заставить распределенную таблицу продолжать работать для запроса, когда один из серверов сегментов отключен?

#clickhouse

#clickhouse

Вопрос:

Существует распространенный случай, когда мы будем обновлять конфигурацию clickhouse, которая должна перезапустить clickhouse, чтобы вступить в силу. И во время перезапуска службы запросов, зависящие от распределенной таблицы clickhouse, вернут исключение из-за разъединения с перезапускаемым сервером.

Итак, как следует из названия, я хочу, чтобы способ заставить распределенную таблицу по-прежнему работать для запроса, когда один из серверов сегментов отключен. Спасибо.

Комментарии:

1. Просто уточните, проблема в том, что вы отправляете запрос на перезапущенный сервер? Или перезапуск любого сервера приводит к сбою распределенной таблицы? Ответ на первый вопрос смотрите ниже. Что касается второго вопроса — похоже, вы не настроили репликацию — не могли бы вы предоставить конфигурацию кластера, чтобы проверить это?

2. @vladimirG Собственно, это второй вопрос. Да, репликация кластера должна быть лучшим способом решения этой проблемы. Но в моем случае у меня есть реплицированная таблица A и десять нереплицированных таблиц Bs , сгенерированных из A с использованием materialized view, все запросы теперь отправляются в Bs . Распределенная таблица по-прежнему не будет работать при перезапуске, если я не преобразоваю Bs в реплицируемую таблицу, а преобразование десяти таблиц на десяти серверах — тяжелая работа, согласно документам ck.

Ответ №1:

Я вижу два способа:

  1. Поскольку этот сбой сервера носит временный характер, вы можете реорганизовать свой серверный код, добавив политику повторных попыток к вашему запросу (для c # я бы рекомендовал использовать Polly)

  2. Используйте прокси (балансировщик нагрузки) для CH (например, chproxy).

Обновить

Когда один узел перезапускается в кластере, распределенная таблица, созданная поверх реплицированных таблиц, должна быть доступна (конечно, запрос не должен отправляться на перезапущенный узел).

Доступность данных достигается с помощью репликации, следовательно, вам нужно создать реплицированные *-таблицы поверх материализованного представления, а затем создать распределенные таблицы поверх реплицированных *-таблиц.

Пожалуйста, ознакомьтесь со статьями Распределение данных CH, Distributed vs Shard vs Replicated.. и в качестве рабочего примера (это не ваш случай) используйте круговую кластерную топологию.

Комментарии:

1. Да, они работают для отправки запроса на один сервер. Но для распределенной таблицы это не так. Кстати, перезапуск сервера с массивными данными займет много времени, почти десять минут или больше, вот почему я хочу найти элегантный способ сделать пользователей бесчувственными. Спасибо

2. Вы перезапускаете сервер или clickhouse-service? Перезапуска службы достаточно и занимает немного времени — служба sudo clickhouse-перезапуск сервера . Тем не менее, перезагрузка, которая занимает несколько минут, выглядит довольно подозрительно — я бы попытался исследовать эту проблему.

3. Я определенно перезапускал службу clickhouse с помощью service clickhouse-server restart . Существует проблема , в которой обсуждается этот вопрос.