В этом примере вы узнаете, как настроить простой кластер ClickHouse, использующий репликацию и масштабирование. Он состоит из двух сегментов и двух реплик, а также 3-узлового кластера ClickHouse Keeper для управления координацией и поддержания кворума в кластере.Архитектура кластера, который вы будете настраивать, показана ниже:
Хотя ClickHouse Server и ClickHouse Keeper можно запускать вместе на одном сервере,
мы настоятельно рекомендуем использовать выделенные хосты для ClickHouse Keeper в производственных средах —
именно этот подход мы и продемонстрируем в данном примере.Серверы Keeper могут быть менее мощными, и 4 ГБ оперативной памяти обычно достаточно для каждого сервера Keeper
до тех пор, пока ваши серверы ClickHouse не станут достаточно крупными.
Предварительные требования
- Вы уже настраивали локальный сервер ClickHouse
- Вы знакомы с базовыми принципами конфигурирования ClickHouse, например с файлами конфигурации
- На вашем компьютере установлен Docker
1
Настройка структуры каталогов и тестовой среды
В этом руководстве вы будете использовать Docker compose для настройки кластера ClickHouse. Данную конфигурацию можно адаптировать для работы на отдельных локальных машинах, виртуальных машинах или облачных инстансах.Выполните следующие команды для создания структуры каталогов для данного примера:docker-compose.yml в каталог clickhouse-cluster:docker-compose.yml
- Каталог
config.dсодержит файл конфигурации сервера ClickHouseconfig.xml, в котором задаётся пользовательская конфигурация для каждого узла ClickHouse. Эта конфигурация объединяется с файлом конфигурации ClickHouseconfig.xmlпо умолчанию, который входит в состав каждой установки ClickHouse. - Каталог
users.dсодержит файл пользовательской конфигурацииusers.xml, в котором задаётся пользовательская конфигурация для пользователей. Эта конфигурация объединяется с файлом конфигурации ClickHouseusers.xmlпо умолчанию, который входит в состав каждой установки ClickHouse.
2
Настройка узлов ClickHouse
Настройка сервера
Теперь измените каждый пустой файл конфигурацииconfig.xml, расположенный по пути
fs/volumes/clickhouse-{}/etc/clickhouse-server/config.d. Выделенные ниже строки
необходимо изменить так, чтобы они соответствовали конкретному узлу:Каждый раздел приведённого выше конфигурационного файла подробно описан ниже.
Сеть и логирование
Возможность внешних подключений через сетевой интерфейс включается при активации настройки listen host. Это гарантирует, что хост сервера ClickHouse доступен с других хостов:8123:9000:<logger>. Приведённая ниже конфигурация
создаёт отладочный лог с ротацией по достижении 1000 МБ, выполняемой трижды:Конфигурация кластера
Конфигурация кластера задаётся в блоке<remote_servers>.
Здесь определяется имя кластера cluster_2S_2R.Блок <cluster_2S_2R></cluster_2S_2R> определяет структуру кластера
с помощью настроек <shard></shard> и <replica></replica> и служит
шаблоном для запросов distributed DDL — запросов, выполняемых по всему
кластеру с использованием предложения ON CLUSTER. По умолчанию запросы distributed DDL
разрешены, однако их можно отключить с помощью настройки allow_distributed_ddl_queries.internal_replication установлен в true, чтобы данные записывались только в одну из реплик.<cluster_2S_2R></cluster_2S_2R> определяет структуру кластера
и служит шаблоном для распределённых DDL-запросов — запросов, выполняемых
по всему кластеру с помощью предложения ON CLUSTER.Конфигурация Keeper
Раздел<ZooKeeper> сообщает ClickHouse, где запущен ClickHouse Keeper (или ZooKeeper).
Поскольку мы используем кластер ClickHouse Keeper, необходимо указать каждый узел <node> кластера,
задав его hostname и номер порта с помощью тегов <host> и <port> соответственно.Настройка ClickHouse Keeper рассматривается на следующем шаге руководства.Хотя ClickHouse Keeper можно запускать на том же сервере, что и ClickHouse Server,
для производственных сред мы настоятельно рекомендуем запускать ClickHouse Keeper на выделенных узлах.
Настройка макросов
Кроме того, раздел<macros> используется для определения подстановок параметров для
реплицированных таблиц. Они перечислены в system.macros и позволяют использовать подстановки
вида {shard} и {replica} в запросах.Конфигурация пользователя
Теперь внесите следующие изменения в каждый пустой файл конфигурацииusers.xml, расположенный по пути
fs/volumes/clickhouse-{}/etc/clickhouse-server/users.d:/users.d/users.xml
В этом примере файл
users.xml одинаков на всех узлах кластера.3
Настройка ClickHouse Keeper
Далее вы настроите ClickHouse Keeper, который используется для координации работы.Настройка Keeper
Чтобы репликация работала, необходимо развернуть и настроить кластер ClickHouse Keeper. ClickHouse Keeper обеспечивает систему координации для репликации данных, выступая в качестве замены ZooKeeper, который также можно использовать. Однако рекомендуется использовать ClickHouse Keeper, так как он обеспечивает более строгие гарантии и надежность, а также потребляет меньше ресурсов, чем ZooKeeper. Для Высокой доступности и сохранения кворума рекомендуется запускать как минимум три узла ClickHouse Keeper.ClickHouse Keeper может работать на любом узле кластера вместе с ClickHouse, однако
рекомендуется запускать его на выделенном узле, что позволяет масштабировать
кластер ClickHouse Keeper и управлять им независимо от кластера базы данных.
keeper_config.xml для каждого узла ClickHouse Keeper,
выполнив следующую команду из корневой папки примера:fs/volumes/clickhouse-keeper-{}/etc/clickhouse-keeper. Выделенные
ниже строки нужно изменить для каждого узла:/clickhouse-keeper/keeper_config.xml
Каждый файл конфигурации должен содержать следующую уникальную конфигурацию (показана ниже).
Используемый
server_id должен быть уникальным для соответствующего узла ClickHouse Keeper
в кластере и совпадать с <id> сервера, заданным в разделе <raft_configuration>.
tcp_port — порт, используемый клиентами ClickHouse Keeper.4
Проверка настройки
Убедитесь, что на вашей машине запущен Docker. Запустите кластер командойdocker-compose up из корня каталога cluster_2S_2R:Query
Response
Query
Response
mntr также часто используется, чтобы убедиться, что ClickHouse Keeper
запущен, и получить информацию о состоянии и ролях трёх узлов Keeper.
В конфигурации, используемой в этом примере, вместе работают три узла.
Они выберут leader, а остальные узлы будут followers.Команда mntr предоставляет информацию о производительности, а также о том,
является ли конкретный узел follower или leader.Выполните приведённую ниже команду в оболочке на clickhouse-keeper-01, clickhouse-keeper-02 и
clickhouse-keeper-03, чтобы проверить состояние каждого узла Keeper. Команда
для clickhouse-keeper-01 показана ниже:Response
Response
5
Создайте базу данных
Теперь, когда вы убедились, что cluster настроен правильно и работает, вам предстоит заново создать ту же таблицу, что использовалась в руководстве по примеру набора данных UK property prices. Она состоит примерно из 30 миллионов строк с ценами сделок с недвижимым имуществом в Англии и Уэльсе с 1995 года.Подключитесь к клиенту каждого хоста, выполнив по одной из следующих команд в отдельных вкладках или окнах терминала:clickhouse-client на каждом узле, чтобы убедиться, что, кроме баз данных по умолчанию, другие базы данных ещё не созданы:Query
Response
clickhouse-01 выполните следующий распределённый DDL-запрос, используя
предложение ON CLUSTER, чтобы создать новую базу данных uk:clickhouse-01:6
Создайте таблицу в кластере
Теперь, когда база данных создана, создайте таблицу с репликацией.Выполните следующий запрос с любого клиентского хоста:CREATE в
руководстве по примеру набора данных о ценах на недвижимость в Великобритании,
за исключением предложения ON CLUSTER и использования движка ReplicatedMergeTree.Предложение ON CLUSTER предназначено для распределённого выполнения DDL-запросов (языка определения данных),
таких как CREATE, DROP, ALTER и RENAME, и гарантирует, что эти
изменения схемы будут применены ко всем узлам кластера.Движок ReplicatedMergeTree
работает так же, как обычный движок таблицы MergeTree, но при этом также реплицирует данные.
Для него нужно указать два параметра:zoo_path: Путь в Keeper/ZooKeeper к метаданным таблицы.replica_name: Имя реплики таблицы.
Параметр
zoo_path можно задать произвольно, однако рекомендуется
использовать префикс{database}и{table}будут подставлены автоматически.{shard}и{replica}— это макросы, которые были определены ранее в файлеconfig.xmlна каждом узле ClickHouse.
Query
Response
7
Вставка данных в distributed таблицу
Чтобы вставить данные в таблицу,ON CLUSTER использовать нельзя, так как это предложение
не применяется к DML-запросам (языку манипулирования данными), таким как INSERT, UPDATE
и DELETE. Для вставки данных необходимо использовать
движок таблицы Distributed.
Как вы узнали из руководства по настройке кластера с 2 сегментами и 1 репликой, distributed таблицы — это таблицы, которые имеют доступ к сегментам, расположенным на разных
хостах, и определяются с помощью движка таблицы Distributed.
Distributed таблица выступает интерфейсом для всех сегментов в кластере.С любого из клиентских хостов выполните следующий запрос, чтобы создать distributed таблицу
на основе существующей реплицируемой таблицы, которую мы создали на предыдущем шаге:uk будут отображаться следующие таблицы:uk_price_paid_distributed с любого
из клиентских хостов, выполнив следующий запрос: