ClickHouse Keeper — это распределенная система координации. Она обеспечивает согласованность данных в кластере ClickHouse. Этот компонент был разработан как встроенная альтернатива Apache ZooKeeper. Таким образом, он устраняет внешние зависимости. ClickHouse Keeper играет ключевую роль в репликации и отказоустойчивости. Он управляет метаданными для реплицируемых таблиц. Кроме того, он координирует выполнение распределенных DDL-запросов. Его использование позволяет создавать надежные и масштабируемые аналитические системы. ClickHouse Keeper полностью совместим с протоколом ZooKeeper. Это делает переход на него простым и прозрачным.
Архитектура и ключевые особенности ClickHouse Keeper
Архитектура ClickHouse Keeper спроектирована для высокой производительности. Она также обеспечивает надежность хранения метаданных. В ее основе лежит консенсус-алгоритм Raft. Он гарантирует согласованность данных между узлами кластера. ClickHouse Keeper обычно разворачивается в виде ансамбля. Ансамбль состоит из нечетного числа серверов, например, трех или пяти. Это необходимо для обеспечения кворума и отказоустойчивости.
Рассмотрим ключевые архитектурные аспекты CHKeeper.
- Алгоритм консенсуса Raft: В отличие от ZAB в ZooKeeper, Raft считается более простым для понимания и реализации. Он определяет, как узлы договариваются о состоянии системы. Один узел выбирается лидером, а остальные становятся последователями. Лидер обрабатывает все запросы на запись.
- Модель хранения данных: ClickHouse Keeper хранит свое состояние в оперативной памяти. Это обеспечивает очень низкую задержку при чтении данных. Все изменения сначала записываются в журнал упреждающей записи (WAL). Только после этого они применяются к состоянию в памяти. Периодически создаются снимки (snapshots) состояния для ускорения восстановления.
- Отсутствие JVM: CHKeeper написан на C++. Он не требует виртуальной машины Java (JVM) для работы. Как следствие, он потребляет значительно меньше оперативной памяти. Также он избавлен от проблем, связанных с настройкой и “прогревом” JVM.
Таким образом, архитектура CHKeeper предлагает более легковесное и интегрированное решение. Она идеально подходит для задач координации в рамках ClickHouse.
Принцип работы ClickHouse Keeper
Принцип работы CHKeeper основан на взаимодействии узлов в ансамбле. Этот процесс обеспечивает целостность и доступность метаданных. Все операции проходят через узел-лидер. Он отвечает за координацию и репликацию изменений. Это гарантирует, что все узлы имеют одинаковое представление о состоянии системы.
Процесс обработки запроса в CHKeeper можно описать пошагово.
- Выборы лидера: При запуске кластера или отказе текущего лидера узлы запускают процесс выборов. Они обмениваются сообщениями, пока один из них не наберет большинство голосов. Этот узел становится новым лидером.
- Обработка клиентского запроса: Клиент (сервер ClickHouse) отправляет запрос на любой узел CHKeeper . Если запрос пришел к последователю, он перенаправляется лидеру.
- Репликация изменений: Лидер получает запрос на запись. Он добавляет запись об операции в свой локальный журнал. Затем он рассылает эту запись всем последователям.
- Достижение консенсуса: Последователи получают запись и добавляют ее в свои журналы. Они отправляют лидеру подтверждение. Когда лидер получает подтверждения от большинства узлов, операция считается зафиксированной.
- Применение изменений и ответ клиенту: После фиксации лидер применяет изменение к своему состоянию в памяти. Затем он отправляет клиенту подтверждение об успешном выполнении операции.
Благодаря этому механизму ClickHouse Keeper гарантирует, что данные не будут потеряны. Даже в случае отказа части узлов система продолжит работать корректно.
Построение DWH на ClickHouse
Код курса
CLICH
Ближайшая дата курса
22 сентября, 2025
Продолжительность
24 ак.часов
Стоимость обучения
72 000
Сценарии использования ClickHouse Keeper
ClickHouse Keeper является критически важным компонентом. Он используется для построения распределенных кластеров ClickHouse. Его основная задача — обеспечить надежную репликацию данных. Однако его функции этим не ограничиваются. ClickHouse Keeper координирует множество фоновых процессов в кластере.
Основные сценарии применения ClickHouse Keeper включают следующие задачи.
- Репликация таблиц Replicated*MergeTree: Это самый главный сценарий. ClickHouse Keeper хранит метаданные о репликах. Он отслеживает состояние каждой реплики. Также он управляет очередью задач на слияние кусков данных. Без него автоматическая синхронизация данных между серверами невозможна.
- Выполнение распределенных DDL-запросов: Когда вы выполняете запрос ON CLUSTER, ClickHouse Keeper берет на себя его координацию. Он создает задачу в общем каталоге. Каждый узел кластера отслеживает эти задачи и выполняет их. Это гарантирует атомарное применение изменений схемы данных на всех серверах.
- Обнаружение и обработка сбоев: ClickHouse Keeper помогает узлам ClickHouse обнаруживать сбои друг друга. Если реплика перестает быть активной, другие реплики узнают об этом. Они могут взять на себя ее фоновые задачи.
- Управление доступом: Хотя это менее частый сценарий, ClickHouse Keeper может хранить информацию о квотах и правах доступа.
Таким образом, ClickHouse Keeper выступает в роли единого источника правды. Он обеспечивает слаженную работу всего кластера ClickHouse.
Управление и базовая настройка ClickHouse Keeper
Настройка ClickHouse Keeper выполняется в основном конфигурационном файле ClickHouse. Обычно это config.xml или отдельный файл в директории config.d. Конфигурация определяет параметры сервера и состав его ансамбля. Правильная настройка является ключом к стабильной работе всего кластера.
Ниже приведен пример базовой конфигурации для одного узла ClickHouse Keeper.
<clickhouse> <keeper_server> <tcp_port>9181</tcp_port> <server_id>1</server_id> <log_storage_path>/var/lib/clickhouse/keeper/log</log_storage_path> <snapshot_storage_path>/var/lib/clickhouse/keeper/snapshots</snapshot_storage_path> <coordination_settings> <operation_timeout_ms>10000</operation_timeout_ms> <session_timeout_ms>30000</session_timeout_ms> <raft_logs_level>information</raft_logs_level> </coordination_settings> <raft_configuration> <server> <id>1</id> <hostname>keeper-1.example.com</hostname> <port>9234</port> </server> <server> <id>2</id> <hostname>keeper-2.example.com</hostname> <port>9234</port> </server> <server> <id>3</id> <hostname>keeper-3.example.com</hostname> <port>9234</port> </server> </raft_configuration> </keeper_server> </clickhouse>
В этом примере server_id должен быть уникальным для каждого узла. Блок raft_configuration перечисляет все узлы, входящие в ансамбль ClickHouse Keeper. Серверы ClickHouse затем настраиваются на подключение к этому ансамблю.
Код курса | Даты начала курса | Стоимость обучения | Длительность обучения | Формат обучения |
---|---|---|---|---|
CLICH | 22 сентября 2025 15 декабря 2025 |
72 000 руб. | 24 ак.часов Количество дней: 5 |
Дистанционный |
Регистрация |
Сравнение ClickHouse Keeper с Apache ZooKeeper
CHKeeper был создан как прямая замена Apache ZooKeeper. Он решает те же задачи, но делает это с учетом специфики ClickHouse. Сравнение этих двух систем помогает понять преимущества нативного решения. Основные отличия лежат в области производительности и операционной простоты.
Рассмотрим ключевые аспекты сравнения CHKeeper и Apache ZooKeeper.
- Производительность: CHKeeper демонстрирует значительно меньшую задержку и более высокую пропускную способность. Это достигается за счет реализации на C++ и отсутствия накладных расходов JVM.
- Потребление ресурсов: Apache ZooKeeper работает на JVM. Это требует выделения значительного объема оперативной памяти. CHKeeper намного экономнее расходует ресурсы, что позволяет размещать его на тех же серверах, что и ClickHouse.
- Операционная сложность: Управление кластером ZooKeeper требует отдельных знаний и инструментов. CHKeeper является частью ClickHouse. Его настройка, мониторинг и обновление встроены в общие процессы управления базой данных.
- Совместимость: Keeper полностью совместим с клиентским протоколом ZooKeeper. Это означает, что переход с ZooKeeper на Keeper не требует изменений в конфигурации реплицируемых таблиц.
В итоге, CHKeeper предлагает более современное и эффективное решение. Он снижает общую сложность системы и повышает ее производительность.
Преимущества и недостатки ClickHouse Keeper
Как и любая технология, CHKeeper имеет свои сильные и слабые стороны. Их понимание позволяет принять взвешенное решение о его использовании. В большинстве случаев для кластеров ClickHouse его преимущества значительно перевешивают недостатки. Однако важно учитывать и потенциальные риски.
Сначала рассмотрим основные преимущества ClickHouse Keeper.
- Высокая производительность: Написанный на C++, он обрабатывает запросы с минимальной задержкой.
- Низкое потребление ресурсов: Отсутствие JVM делает его очень экономичным по памяти.
- Нативная интеграция: Является частью экосистемы ClickHouse, что упрощает развертывание и управление.
- Протокольная совместимость: Обеспечивает легкую миграцию с Apache Zookeeper.
Теперь перейдем к недостаткам ClickHouse Keeper.
- Относительная новизна: Технология моложе, чем Zookeeper. Zookeeper используется в индустрии более десяти лет и проверен временем в тысячах систем.
- Узкая специализация: CHKeeper оптимизирован именно для ClickHouse. Его использование в качестве универсальной системы координации для других приложений менее распространено.
- Меньшее сообщество: Сообщество пользователей и экспертов по Zookeeper значительно больше. Найти решение нестандартной проблемы с Zookeeper может быть проще.
Несмотря на эти недостатки, для задач координации кластера ClickHouse Keeper является предпочтительным выбором.
Заключение
CHKeeper представляет собой мощную и эффективную систему координации. Он специально разработан для нужд современных кластеров ClickHouse. Его появление стало важным шагом в развитии экосистемы. Оно позволило избавиться от зависимости от стороннего продукта, такого как Apache ZooKeeper. Благодаря нативной интеграции, высокой производительности и простоте в эксплуатации CHKeeper снижает общую стоимость владения системой. Он обеспечивает надежную репликацию данных и атомарное выполнение распределенных операций. Таким образом, CHKeeper является ключевым элементом для построения отказоустойчивых и масштабируемых аналитических платформ на базе ClickHouse.
Референсные ссылки
- Официальное введение в систему координации Официальная документация по Keeper
- Сравнение производительности с аналогами https://altinity.com/blog/clickhouse-keeper-a-zookeeper-alternative/
- Руководство по миграции на новую систему https://kb.altinity.com/altinity-kb-setup-and-maintenance/keeper/migrating-from-zookeeper-to-clickhouse-keeper/