Интеграция Google Cloud Storage с ClickHouse
Если вы используете ClickHouse Cloud в Google Cloud, эта страница к вам не относится, так как ваши сервисы уже используют Google Cloud Storage. Если вы хотите выполнять SELECT или INSERT данных из GCS, обратитесь к табличной функции gcs.
В ClickHouse GCS рассматривается как привлекательное решение для хранения данных для пользователей, стремящихся разделить хранение и вычисления. Для этого реализована поддержка использования GCS в качестве хранилища для движка MergeTree. Это позволит пользователям использовать масштабируемость и экономические преимущества GCS, а также производительность вставки и выполнения запросов движка MergeTree.
MergeTree с хранилищем в GCS
Создание диска
Чтобы использовать bucket GCS как диск, сначала необходимо объявить его в конфигурации ClickHouse в файле в каталоге conf.d. Ниже приведён пример объявления диска GCS. Эта конфигурация включает несколько секций для настройки GCS‑«диска», кэша и политики, которая указывается в DDL‑запросах при создании таблиц на диске GCS. Каждая из них описана ниже.
Storage configuration > disks > gcs
Эта часть конфигурации показана на выделенном фрагменте и задаёт следующее:
- Пакетные удаления не выполняются. GCS в настоящее время не поддерживает пакетные удаления, поэтому автоопределение отключено, чтобы подавить сообщения об ошибках.
- Тип диска —
s3, поскольку используется API S3. - Endpoint, предоставленный GCS
- HMAC‑ключ и секрет сервисного аккаунта
- Путь к метаданным на локальном диске
Конфигурация хранилища > disks > cache
Пример конфигурации, показанный ниже, включает кэш в памяти объёмом 10Gi для диска gcs.
Конфигурация хранилища > policies > gcs_main
Политики хранения в конфигурации позволяют выбирать, где размещаются данные. Политика, показанная ниже, позволяет хранить данные на диске gcs, указывая политику gcs_main. Например, CREATE TABLE ... SETTINGS storage_policy='gcs_main'.
Полный список настроек, относящихся к этому описанию диска, можно найти здесь.
Создание таблицы
Если вы настроили диск на использование бакета с правом записи, вы сможете создать таблицу, как в примере ниже. Ради краткости мы используем подмножество столбцов набора данных NYC taxi и отправляем данные напрямую в таблицу на базе GCS:
В зависимости от характеристик оборудования выполнение этой последней вставки 1 млн строк может занять несколько минут. Вы можете отслеживать ход выполнения через таблицу system.processes. При желании увеличьте количество строк до предела в 10 млн и выполните несколько пробных запросов.
Работа с репликацией
Репликация с использованием дисков GCS может быть реализована с помощью движка таблиц ReplicatedMergeTree. Подробности см. в руководстве репликация одного шарда в двух регионах GCP с использованием GCS.
Дополнительные материалы
Cloud Storage XML API совместим с некоторыми инструментами и библиотеками, которые работают с такими сервисами, как Amazon Simple Storage Service (Amazon S3).
Дополнительные сведения о настройке потоков см. в разделе Оптимизация производительности.
Использование Google Cloud Storage (GCS)
В ClickHouse Cloud по умолчанию используется объектное хранилище, поэтому вам не нужно выполнять эту процедуру, если вы используете ClickHouse Cloud.
Планирование развертывания
В этом руководстве описано реплицированное развертывание ClickHouse в Google Cloud с использованием Google Cloud Storage (GCS) в качестве типа диска для хранилища ClickHouse.
В этом руководстве вы развернете серверные узлы ClickHouse на виртуальных машинах Google Compute Engine, при этом у каждой ВМ будет свой бакет GCS для хранения данных. Репликация координируется набором узлов ClickHouse Keeper, также развернутых как виртуальные машины.
Пример требований для обеспечения высокой доступности:
- Два серверных узла ClickHouse в двух регионах GCP
- Два бакета GCS, развернутые в тех же регионах, что и два серверных узла ClickHouse
- Три узла ClickHouse Keeper, два из которых развернуты в тех же регионах, что и серверные узлы ClickHouse; третий может находиться в том же регионе, что и один из первых двух узлов Keeper, но в другой зоне доступности.
ClickHouse Keeper для работы требует двух узлов, поэтому для высокой доступности используются три узла.
Подготовка виртуальных машин
Разверните пять виртуальных машин (VMs) в трех регионах:
| Region | ClickHouse Server | Bucket | ClickHouse Keeper |
|---|---|---|---|
| 1 | chnode1 | bucket_regionname | keepernode1 |
| 2 | chnode2 | bucket_regionname | keepernode2 |
3 * | keepernode3 |
* Это может быть другая зона доступности в том же регионе, что и 1 или 2.
Развертывание ClickHouse
Разверните ClickHouse на двух хостах; в примерах конфигурации они называются chnode1, chnode2.
Разместите chnode1 в одном регионе GCP, а chnode2 — во втором. В этом руководстве для виртуальных машин Compute Engine, а также для бакетов GCS используются регионы us-east1 и us-east4.
Не запускайте clickhouse server, пока он не будет настроен. Просто установите его.
См. инструкции по установке при выполнении шагов развертывания на серверных узлах ClickHouse.
Развертывание ClickHouse Keeper
Разверните ClickHouse Keeper на трех хостах; в примерах конфигурации они называются keepernode1, keepernode2 и keepernode3. keepernode1 можно развернуть в том же регионе, что и chnode1, keepernode2 — в том же регионе, что и chnode2, а keepernode3 — в любом из этих регионов, но в другой зоне доступности по сравнению с узлом ClickHouse в этом регионе.
См. инструкции по установке при выполнении шагов развертывания на узлах ClickHouse Keeper.
Создание двух бакетов
Два сервера ClickHouse будут находиться в разных регионах для обеспечения высокой доступности. У каждого будет бакет GCS в том же регионе.
В Cloud Storage > Buckets выберите CREATE BUCKET. Для этого руководства создаются два бакета, по одному в us-east1 и us-east4. Бакеты имеют тип single region, класс хранения Standard и не являются публичными. По запросу включите запрет публичного доступа (public access prevention). Не создавайте папки — они будут созданы, когда ClickHouse начнет записывать данные в хранилище.
Если вам нужны пошаговые инструкции по созданию бакетов и HMAC-ключа, разверните раздел Create GCS buckets and an HMAC key и следуйте указаниям:
Создайте бакеты GCS и HMAC-ключ
ch_bucket_us_east1

ch_bucket_us_east4

Сгенерируйте ключ доступа
Создайте HMAC-ключ и секрет для сервисного аккаунта
Откройте Cloud Storage > Settings > Interoperability и либо выберите существующий Access key, либо нажмите CREATE A KEY FOR A SERVICE ACCOUNT. В этом руководстве описывается процесс создания нового ключа для нового сервисного аккаунта.

Добавьте новый сервисный аккаунт
Если в проекте ещё нет сервисного аккаунта, нажмите CREATE NEW ACCOUNT.

Для создания сервисного аккаунта есть три шага; на первом шаге задайте аккаунту понятные имя, ID и описание.

В диалоге настроек Interoperability рекомендуется назначить роль IAM Storage Object Admin; выберите эту роль на втором шаге.

Третий шаг является необязательным и в этом руководстве не используется. Вы можете предоставить пользователям эти привилегии в соответствии с вашими политиками.

HMAC-ключ сервисного аккаунта будет отображён. Сохраните эту информацию, так как она будет использоваться в конфигурации ClickHouse.

Настройка ClickHouse Keeper
Все узлы ClickHouse Keeper используют один и тот же файл конфигурации, за исключением строки server_id (первая выделенная строка ниже). Измените файл, указав имена хостов ваших серверов ClickHouse Keeper, и на каждом сервере задайте server_id в соответствии с соответствующей записью server в raft_configuration. Поскольку в этом примере server_id установлен в 3, мы выделили соответствующие строки в raft_configuration.
- Отредактируйте файл, указав свои имена хостов, и убедитесь, что они разрешаются по именам как с серверных узлов ClickHouse, так и с узлов Keeper
- Скопируйте файл на место (
/etc/clickhouse-keeper/keeper_config.xmlна каждый из серверов Keeper) - Отредактируйте
server_idна каждой машине в соответствии с ее номером записи вraft_configuration
Настройка сервера ClickHouse
На некоторых шагах этого руководства вам потребуется поместить конфигурационный файл в /etc/clickhouse-server/config.d/. Это каталог по умолчанию в системах Linux для файлов переопределения конфигурации. Когда вы помещаете эти файлы в этот каталог, ClickHouse объединяет их содержимое с конфигурацией по умолчанию. Размещая эти файлы в каталоге config.d, вы избежите потери настроек при обновлении.
Сеть
По умолчанию ClickHouse прослушивает только loopback‑интерфейс; в реплицированной конфигурации требуется сетевое взаимодействие между серверами. Включите прослушивание на всех сетевых интерфейсах:
Удалённые серверы ClickHouse Keeper
Репликация координируется ClickHouse Keeper. Этот конфигурационный файл идентифицирует узлы ClickHouse Keeper по имени хоста и номеру порта.
- Измените имена хостов так, чтобы они соответствовали вашим узлам Keeper
Удалённые серверы ClickHouse
Этот файл задаёт имя хоста и порт каждого сервера ClickHouse в кластере. Конфигурационный файл по умолчанию содержит примеры описаний кластеров; чтобы отображались только полностью настроенные кластеры, к записи remote_servers добавляется тег replace="true", чтобы при слиянии этой конфигурации с конфигурацией по умолчанию она заменяла секцию remote_servers, а не дополняла её.
- Отредактируйте файл, указав ваши имена хостов, и убедитесь, что они корректно разрешаются с узлов серверов ClickHouse
Идентификация реплики
Этот файл настраивает параметры, связанные с путём в ClickHouse Keeper. В частности, в нём задаются макросы, используемые для идентификации реплики, к которой относятся данные. На одном сервере реплика должна быть указана как replica_1, а на другом сервере — как replica_2. Эти имена можно изменить: например, в нашем случае, когда одна реплика хранится в Южной Каролине, а другая — в Северной Вирджинии, значениями могут быть carolina и virginia; просто убедитесь, что на каждой машине они отличаются.
Хранение в GCS
Конфигурация хранилища ClickHouse включает disks и policies. Диск, настраиваемый ниже, называется gcs и имеет type s3. Тип s3 используется, потому что ClickHouse обращается к бакету GCS так, как если бы это был бакет AWS S3. Понадобятся две копии этой конфигурации — по одной для каждого узла сервера ClickHouse.
В конфигурации ниже необходимо выполнить следующие подстановки.
Эти подстановки различаются для двух узлов сервера ClickHouse:
REPLICA 1 BUCKETдолжен быть задан именем бакета в том же регионе, что и серверREPLICA 1 FOLDERдолжен быть изменён наreplica_1на одном из серверов и наreplica_2на другом
Эти подстановки общие для обоих узлов:
access_key_idдолжен быть установлен равным значению HMAC Key, сгенерированного ранееsecret_access_keyдолжен быть установлен равным значению HMAC Secret, сгенерированного ранее
Запустите ClickHouse Keeper
Используйте команды, соответствующие вашей операционной системе, например:
Проверьте статус ClickHouse Keeper
Отправляйте команды в ClickHouse Keeper с помощью netcat. Например, команда mntr возвращает состояние кластера ClickHouse Keeper. Если выполнить эту команду на каждом узле Keeper, вы увидите, что один из них является лидером, а два других — ведомыми:
Запуск сервера ClickHouse
На chnode1 и chnode выполните:
Проверка
Проверка конфигурации дисков
system.disks должна содержать записи для каждого диска:
- default
- gcs
- cache
3 строки в наборе. Прошло: 0,002 сек.
Убедитесь, что данные можно вставить
Убедитесь, что для таблицы используется политика хранения данных gcs_main.
Проверьте в консоли Google Cloud
Если открыть бакеты, вы увидите, что в каждом из них создана папка с именем, указанным в конфигурационном файле storage.xml. Разверните папки, и вы увидите множество файлов, соответствующих разделам данных.
Бакет для первой реплики

Бакет для второй реплики
