Кластер ClickHouse: 2 ноды + keeper в compose, smoke ON CLUSTER #12
Notifications
Due Date
No due date set.
Blocks
#13 Остальной стенд: Kafka, Airflow 3, Superset, мониторинг — make up и сквозной smoke
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#12
Reference in New Issue
Block a user
Родитель
#3 — Этап 1: каркас стенда, кластерный compose.
Что сделать
Поднять в compose кластер ClickHouse: две ноды и отдельный
clickhouse-keeper(координатор именно keeper, а не ZooKeeper — так решено по бюджету памяти). Топология — 2 шарда × 1 реплика, и это единственный режим: выключателя «стенд без кластера» нет.У каждой ноды свои макросы
shardиreplicaи одинаковое описание кластера. Локальные таблицы создаются движками семействаReplicated*, путь в keeper собирается из макросов; поверх локальных таблиц — Distributed. Балансировщика нет: балансировать нечего, в доках про это остаётся абзац «в бою здесь был бы балансировщик».Роли нод закладываются сразу, потому что от них зависят следующие тикеты: нода 1 — инициатор DDL и будущее подключение Airflow, к ноде 2 позже подключается Superset.
Критерии приёмки
make up, отвечающая за ClickHouse, поднимает две ноды и keeper; все три контейнера доходят до здорового состояния.SELECT * FROM system.clustersна обеих нодах показывает один и тот же кластер из двух шардов.SELECT * FROM system.macrosна каждой ноде отдаёт свои значенияshardиreplica; между нодами они различаются.SELECT * FROM system.zookeeper WHERE path = '/'выполняется без ошибки.CREATE TABLE ... ON CLUSTERс движкомReplicated*проходит, и созданная таблица видна вsystem.tablesна обеих нодах — то есть DDL-очередь не повисла.DROP TABLE ... ON CLUSTERубирает временные объекты проверки с обеих нод — стенд остаётся чистым.Границы
Сначала прочитать
docs/specs/2026-07-30-stand-v2-realism.md: раздел 6 (топология, макросы, роли нод, бюджет памяти) и 1.3 (ключи, шардирование поcityHash64(ClientID)).AGENTS.md. Синтаксис кластерных DDL ClickHouse — как раз тот спорный API, который правила велят сверять через MCP Context7 до написания кода.Проверка
make up.system.distributed_ddl_queue).Блокируется
Нет.
Работа выполнена в ветке
feat/12-clickhouse-cluster, закрывается PR #16.Все девять критериев приёмки прошли на живом стенде: холодный
make up— 11,7 с и три здоровых контейнера,make smoke— 8 из 8,make smoke-guards— 3 из 3,make clean— стенд удалён без остатка.Итоги ревью: девять находок, восемь починены, одна отклонена с доводом (пустые каталоги
/clickhouse/tables/{shard}в keeper — общее пространство имён будущих таблиц, а не мусор проверки; довод признан верным при перепроверке). Главное исправление — smoke при упавшей ноде висел 362 секунды и не прерывался по Ctrl-C; стало 107–118 мс, а при падении ноды посреди прогона — 13 секунд с ограниченной по времени уборкой.Решения, не предрешённые тикетом: образ зафиксирован точным LTS-выпуском 26.3.17.56; документация стенда живёт быстрым стартом в README; файл compose называется
compose.yaml, легаси-имя не используется.Наблюдения, вынесенные дальше: три в #13, одно в #4.