ClickHouse настройка репликации и шардирования с нуля

Рейтинг: 37.6% · 5 голосов
SQL и NoSQL: PostgreSQL, MySQL, Redis, MongoDB, ClickHouse, ElasticSearch — проектирование схем, индексы, репликация и оптимизация запросов.
Ответить
Аватара пользователя
denis_hex97
Сообщения: 7
Зарегистрирован: Вт май 12, 2026 11:22 am

ClickHouse настройка репликации и шардирования с нуля

Сообщение denis_hex97 »

Поднимаем ClickHouse для аналитики, данные — события пользователей, около 5 млрд записей в год. Нужна отказоустойчивость и возможность горизонтально масштабироваться. Как правильно настроить репликацию и шардирование? Пока у нас один сервер, ZooKeeper/ClickHouse Keeper есть. Версия 23.8 LTS.
👍1 ❤️ 🔥1 😄 🤔
✔ Лучший ответ выбран автором и совпадает с автоматическим подбором — cryptodaemon5561
Развёрнуто про выбор ключа шардирования: это критически важно. Плохой ключ — и данные неравномерно распределятся, один шард будет горячим. Для событий пользователей часто берут cityHash64(userId) % num_shards или просто rand() если равномерное распределение важнее локальности. Если часто делаешь JOIN или GROUP BY по userId — имеет смысл шардировать по userId чтобы данные одного юзера лежали на од…
Перейти к ответу →
Аватара пользователя
dba_oracle
Сообщения: 5
Зарегистрирован: Вт май 12, 2026 5:55 am

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение dba_oracle »

Для репликации в ClickHouse используй ReplicatedMergeTree вместо обычного MergeTree. Таблица создаётся с параметрами пути в ZooKeeper и именем реплики: ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/events', '{replica}'). Макросы {shard} и {replica} задаются в config.xml для каждого сервера — это позволяет использовать одинаковый DDL на всех узлах.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
appflow9934
Сообщения: 5
Зарегистрирован: Пн май 11, 2026 6:31 am

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение appflow9934 »

Шардирование настраивается через конфигурацию кластера в remote_servers в config.xml (или в .d/ директории). Определяешь кластер с шардами и репликами, потом создаёшь Distributed-таблицу поверх ReplicatedMergeTree. Запросы к Distributed-таблице автоматически раскидываются по шардам и агрегируются.
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
matvey5497
Сообщения: 7
Зарегистрирован: Сб май 16, 2026 3:26 am

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение matvey5497 »

Обязательно настрой ClickHouse Keeper вместо ZooKeeper если ещё не сделал — он встроен в CH начиная с 22.x, меньше зависимостей, проще операционно. Три узла Keeper для кворума — стандартная схема. Конфиг в clickhouse-keeper.xml, порт по умолчанию 9181.
👍 ❤️ 🔥2 😄 🤔1
Аватара пользователя
cryptodaemon5561
Сообщения: 5
Зарегистрирован: Вт май 12, 2026 6:42 am

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение cryptodaemon5561 »

✔ Лучший ответ — выбран автором и совпадает с авто-подбором
Развёрнуто про выбор ключа шардирования: это критически важно. Плохой ключ — и данные неравномерно распределятся, один шард будет горячим. Для событий пользователей часто берут cityHash64(userId) % num_shards или просто rand() если равномерное распределение важнее локальности. Если часто делаешь JOIN или GROUP BY по userId — имеет смысл шардировать по userId чтобы данные одного юзера лежали на одном шарде, тогда локальные агрегации будут быстрее. Distributed таблица: CREATE TABLE events_dist ON CLUSTER my_cluster AS events ENGINE = Distributed(my_cluster, default, events, cityHash64(userId)). Важно: INSERT делай в Distributed-таблицу или напрямую на каждый шард — вставка через Distributed добавляет небольшой overhead на async_insert, но удобнее. Для отказоустойчивости: 2 реплики на каждый шард минимум. При падении одной реплики ReplicatedMergeTree автоматически восстановит данные с живой реплики после поднятия.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
fedor_tcp
Сообщения: 34
Зарегистрирован: Ср май 13, 2026 1:00 pm

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение fedor_tcp »

Один практический совет: сначала запусти на одном шарде с двумя репликами, проверь что репликация работает, данные сходятся. Потом добавляй шарды. Переход с нереплицированного MergeTree на ReplicatedMergeTree возможен через ATTACH PARTITION FROM, но это отдельная история.
👍 ❤️1 🔥2 😄2 🤔
Аватара пользователя
sasha_daemon
Сообщения: 5
Зарегистрирован: Чт май 21, 2026 3:40 pm

Re: ClickHouse настройка репликации и шардирования с нуля

Сообщение sasha_daemon »

Мониторь через system.replication_queue и system.replicas — там видно отставание реплик, ошибки синхронизации. SELECT * FROM system.replication_queue WHERE is_currently_executing = 1 покажет что сейчас реплицируется. Если очередь растёт и не уменьшается — смотри логи и связь с Keeper.
👍1 ❤️ 🔥 😄3 🤔1
Ответить
Поделиться темой: ✈ Telegram VK

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость