Перейти к основному содержимому
Перейти к основному содержимому

Репликация для отказоустойчивости

Описание

В этой архитектуре настроено пять серверов. Два из них используются для размещения копий данных. Остальные три сервера используются для координации репликации данных. На этом примере мы создадим базу данных и таблицу, которые будут реплицироваться на обоих узлах данных с использованием движка таблиц ReplicatedMergeTree.

Уровень: Базовый

Терминология

Реплика

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

Шард

Подмножество данных. ClickHouse всегда имеет хотя бы один шард для ваших данных, поэтому если вы не разделяете данные на несколько серверов, ваши данные будут храниться в одном шарде. Шардирование данных на несколько серверов можно использовать для распределения нагрузки, если вы превышаете мощность одного сервера. Целевой сервер определяется по шифрующему ключу, который задаётся при создании распределенной таблицы. Шифрующий ключ может быть случайным или являться результатом хеш-функции. Примеры развертывания, связанные с шардированием, будут использовать rand() в качестве шифрующего ключа и предоставят дополнительную информацию о том, когда и как выбрать другой шифрующий ключ.

Распределённая координация

ClickHouse Keeper предоставляет систему координации для репликации данных и выполнения распределённых DDL запросов. ClickHouse Keeper совместим с Apache ZooKeeper.

Среда

Диаграмма архитектуры

УзелОписание
clickhouse-01Данные
clickhouse-02Данные
clickhouse-keeper-01Распределенная координация
clickhouse-keeper-02Распределенная координация
clickhouse-keeper-03Распределенная координация
примечание

В продуктивных средах мы настоятельно рекомендуем использовать выделенные хосты для ClickHouse Keeper. В тестовой среде приемлемо запускать ClickHouse Server и ClickHouse Keeper на одном сервере. Другой основной пример, Масштабирование, использует этот метод. В этом примере мы представляем рекомендуемый метод отделения Keeper от ClickHouse Server. Серверы Keeper могут быть меньше, 4 ГБ RAM обычно достаточно для каждого сервера Keeper до тех пор, пока ваши ClickHouse Server не станут очень большими.

Установка

Установите сервер и клиент ClickHouse на двух серверах clickhouse-01 и clickhouse-02, следуя инструкциям для вашего типа архива (.deb, .rpm, .tar.gz и т.д.).

Установите ClickHouse Keeper на трех серверах clickhouse-keeper-01, clickhouse-keeper-02 и clickhouse-keeper-03, следуя инструкциям для вашего типа архива (.deb, .rpm, .tar.gz и т.д.).

Редактирование файлов конфигурации

best practices

При настройке ClickHouse Server путем добавления или редактирования конфигурационных файлов, вы должны:

  • Добавлять файлы в директорию /etc/clickhouse-server/config.d/
  • Добавлять файлы в директорию /etc/clickhouse-server/users.d/
  • Оставить файл /etc/clickhouse-server/config.xml без изменений
  • Оставить файл /etc/clickhouse-server/users.xml без изменений

Конфигурация clickhouse-01

Для clickhouse-01 существует пять файлов конфигурации. Вы можете выбрать, чтобы объединить эти файлы в один, но для ясности в документации может быть проще рассмотреть их по отдельности. Читая файлы конфигурации, вы увидите, что большая часть конфигурации одинакова между clickhouse-01 и clickhouse-02; различия будут выделены.

Конфигурация сети и логирования

Эти значения могут быть настроены по вашему усмотрению. Эта примерная конфигурация предоставляет вам:

  • отладочный журнал, который будет сворачиваться при достижении 1000M три раза
  • название, отображаемое при подключении с помощью clickhouse-client, - cluster_1S_2R node 1
  • ClickHouse будет слушать на IPV4 сети на портах 8123 и 9000.

Конфигурация макросов

Макросы shard и replica снижают сложность распределенного DDL. Настроенные значения автоматически подставляются в ваши DDL-запросы, что упрощает ваш DDL. Макросы для этой конфигурации задают номер шарда и реплики для каждого узла. В этом примере с 1 шардом и 2 репликами макрос реплики - replica_1 на clickhouse-01 и replica_2 на clickhouse-02. Макрос шарда - 1 на обоих clickhouse-01 и clickhouse-02, поскольку имеется только один шард.

Конфигурация репликации и шардирования

Начнем с верхней части:

  • Секция remote_servers в XML определяет каждый из кластеров в среде. Атрибут replace=true заменяет образцы remote_servers в конфигурации по умолчанию ClickHouse на конфигурацию remote_server, указанную в этом файле. Без этого атрибута удаленные серверы в этом файле были бы добавлены в список образцов в конфигурации по умолчанию.
  • В этом примере есть один кластер с именем cluster_1S_2R.
  • Создается секрет для кластера с именем cluster_1S_2R со значением mysecretphrase. Секрет делится между всеми удаленными серверами в среде, чтобы гарантировать, что правильные серверы соединяются друг с другом.
  • Кластер cluster_1S_2R имеет один шард и две реплики. Взгляните на диаграмму архитектуры в начале этого документа и сравните ее с определением shard в приведенном ниже XML. Определение шарда содержит две реплики. Хост и порт для каждой реплики указаны. Одна реплика хранится на clickhouse-01, а другая реплика хранится на clickhouse-02.
  • Внутренняя репликация для шарда установлена как true. Каждый шард может иметь параметр internal_replication, определенный в файле конфигурации. Если этот параметр установлен на true, операция записи выбирает первую здоровую реплику и записывает данные в нее.

Конфигурация использования Keeper

Этот файл конфигурации use-keeper.xml настраивает ClickHouse Server для использования ClickHouse Keeper для координации репликации и распределенного DDL. Этот файл указывает, что ClickHouse Server должен использовать Keeper на узлах clickhouse-keeper-01 - 03 на порту 9181, и файл одинаковый на clickhouse-01 и clickhouse-02.

Конфигурация clickhouse-02

Поскольку конфигурация очень похожа на clickhouse-01 и clickhouse-02, здесь будут указаны только различия.

Конфигурация сети и логирования

Этот файл одинаков на обоих узлах clickhouse-01 и clickhouse-02, за исключением display_name.

Конфигурация макросов

Конфигурация макросов различается между clickhouse-01 и clickhouse-02. replica установлен на 02 на этом узле.

Конфигурация репликации и шардирования

Этот файл одинаков на обоих узлах clickhouse-01 и clickhouse-02.

Конфигурация использования Keeper

Этот файл одинаков на обоих узлах clickhouse-01 и clickhouse-02.

Конфигурация clickhouse-keeper-01

best practices

При настройке ClickHouse Keeper путём редактирования конфигурационных файлов вы должны:

  • Создать резервную копию файла /etc/clickhouse-keeper/keeper_config.xml
  • Отредактировать файл /etc/clickhouse-keeper/keeper_config.xml

ClickHouse Keeper обеспечивает систему координации для репликации данных и выполнения распределенных запросов DDL. ClickHouse Keeper совместим с Apache ZooKeeper. Эта конфигурация включает ClickHouse Keeper на порту 9181. Выделенная строка указывает, что у этого экземпляра Keeper идентификатор сервера равен 1. Это единственное различие в файле enable-keeper.xml на трех серверах. clickhouse-keeper-02 будет иметь server_id, установленный на 2, а clickhouse-keeper-03 будет иметь server_id, установленный на 3. Секция конфигурации raft одинакова на всех трех серверах; она выделена ниже, чтобы показать вам взаимосвязь между server_id и экземпляром server в конфигурации raft.

примечание

Если по какой-либо причине узел Keeper заменяется или пересобирается, не повторно используйте существующий server_id. Например, если узел Keeper с server_id 2 пересобирается, задайте ему server_id равный 4 или больше.

Конфигурация clickhouse-keeper-02

Существует только одна строка различий между clickhouse-keeper-01 и clickhouse-keeper-02. server_id установлен на 2 на этом узле.

Конфигурация clickhouse-keeper-03

Существует только одна строка различий между clickhouse-keeper-01 и clickhouse-keeper-03. server_id установлен на 3 на этом узле.

Тестирование

Чтобы получить опыт работы с ReplicatedMergeTree и ClickHouse Keeper, вы можете выполнить следующие команды, которые позволят вам:

  • Создать базу данных на кластер, настроенном выше
  • Создать таблицу в базе данных, используя движок таблиц ReplicatedMergeTree
  • Вставить данные на одном узле и запросить их на другом узле
  • Остановить один узел сервера ClickHouse
  • Вставить больше данных на работающем узле
  • Перезапустить остановленный узел
  • Убедиться, что данные доступны при выполнении запроса к перезапущенному узлу

Убедитесь, что ClickHouse Keeper работает

Команда mntr используется для проверки того, что ClickHouse Keeper работает, и получения информации о состоянии отношений между тремя узлами Keeper. В конфигурации, использованной в этом примере, есть три узла, работающие вместе. Узлы выберут лидера, а остальные узлы будут последователями. Команда mntr предоставляет информацию, связанную с производительностью, и о том, является ли конкретный узел последователем или лидером.

подсказка

Вам может понадобиться установить netcat, чтобы отправить команду mntr на Keeper. Пожалуйста, смотрите страницу nmap.org для получения информации о загрузке.

Проверьте работоспособность кластера ClickHouse

Подключитесь к узлу clickhouse-01 с помощью clickhouse client в одной оболочке и подключитесь к узлу clickhouse-02 с помощью clickhouse client в другой оболочке.

  1. Создайте базу данных на кластере, настроенном выше
  1. Создайте таблицу в базе данных, используя движок таблиц ReplicatedMergeTree
  1. Вставьте данные на одном узле и запросите их на другом узле
  1. Запросите таблицу на узле clickhouse-02
  1. Вставьте данные на другом узле и запросите их на узле clickhouse-01
  1. Остановите один узел сервера ClickHouse Остановите один из узлов сервера ClickHouse, выполнив команду операционной системы, аналогичную команде, использованной для запуска узла. Если вы использовали systemctl start для запуска узла, то используйте systemctl stop для его остановки.

  2. Вставьте больше данных на работающем узле

Выберите данные:

  1. Перезапустите остановленный узел и выберите данные оттуда также