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

Интеграция Google Cloud Storage с ClickHouse

примечание

Если вы используете ClickHouse Cloud на Google Cloud, эта страница не применима, так как ваши сервисы уже будут использовать Google Cloud Storage. Если вы хотите SELECT или INSERT данные из GCS, пожалуйста, посмотрите на gcs табличную функцию.

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

MergeTree с поддержкой GCS

Создание диска

Чтобы использовать корзину GCS в качестве диска, необходимо сначала объявить её в конфигурации ClickHouse в файле в папке conf.d. Пример объявления диска GCS показан ниже. Эта конфигурация включает несколько секций для настройки "диска" GCS, кэша и политики, которая указывается в DDL запросах, когда таблицы создаются на диске GCS. Каждая из них описана ниже.

storage_configuration > disks > gcs

Эта часть конфигурации показана в выделенной секции и указывает, что:

  • Пакетные удаления не будут выполнены. В настоящее время GCS не поддерживает пакетные удаления, поэтому автопоиск отключен, чтобы подавить сообщения об ошибках.
  • Тип диска s3, так как используется API S3.
  • Конечная точка, предоставленная GCS.
  • HMAC ключ и секрет сервисного аккаунта.
  • Путь метаданных на локальном диске.

storage_configuration > disks > cache

Пример конфигурации, выделенный ниже, включает кэш памяти 10Gi для диска gcs.

storage_configuration > policies > gcs_main

Политики конфигурации хранения позволяют выбирать, где хранятся данные. Выделенная ниже политика позволяет хранить данные на диске gcs, указывая политику gcs_main. Например, CREATE TABLE ... SETTINGS storage_policy='gcs_main'.

Полный список настроек, относящихся к этому объявлению диска, можно найти здесь.

Создание таблицы

Предполагая, что вы настроили свой диск так, чтобы использовать корзину с правами на запись, вы сможете создать таблицу, как в примере ниже. Для краткости мы используем подмножество столбцов такси NYC и передаем данные непосредственно в таблицу с поддержкой 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 Cloud Engine, каждая из которых будет иметь связанную корзину GCS для хранения. Репликация координируется набором узлов ClickHouse Keeper, также развернутых как ВМ.

Пример требований для высокой доступности:

  • Два узла сервера ClickHouse, в двух регионах GCP
  • Две корзины GCS, развернутые в тех же регионах, что и два узла сервера ClickHouse
  • Три узла ClickHouse Keeper, два из которых развернуты в тех же регионах, что и узлы сервера ClickHouse. Третий может находиться в том же регионе, что один из первых двух узлов Keeper, но в другой зоне доступности.

ClickHouse Keeper требует два узла для работы, поэтому необходимость в трех узлах для высокой доступности.

Подготовка ВМ

Разверните пять ВМ в трех регионах:

РегионСервер ClickHouseКорзинаClickHouse Keeper
1chnode1bucket_regionnamekeepernode1
2chnode2bucket_regionnamekeepernode2
3 *keepernode3

* Это может быть другая зона доступности в том же регионе, что 1 или 2.

Развертывание ClickHouse

Разверните ClickHouse на двух хостах, в примерных конфигурациях они называются chnode1, chnode2.

Разместите chnode1 в одном регионе GCP, а chnode2 во втором. В этой инструкции используются us-east1 и us-east4 для ВМ вычислительного двигателя, а также для корзин GCS.

примечание

Не запускайте 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. Корзины являются стандартными и однорегионными, и не являются публичными. Когда вас попросят, включите предотвращение доступа в общедоступную сеть. Не создавайте папки, они будут созданы, когда ClickHouse будет записывать в хранилище.

Если вам нужны пошаговые инструкции по созданию корзин и HMAC ключа, разверните Создание корзин GCS и HMAC ключа и следуйте инструкции:

Создайте корзины GCS и ключ HMAC

ch_bucket_us_east1

ch_bucket_us_east4

Генерация ключа доступа

Создание ключа и секрета HMAC для учетной записи службы

Откройте Cloud Storage > Настройки > Взаимодействие и выберите существующий Ключ доступа или СОЗДАТЬ КЛЮЧ ДЛЯ УЧЕТНОЙ ЗАПИСИ СЛУЖБЫ. Этот гид описывает процесс создания нового ключа для новой учетной записи службы.

Добавить новую учетную запись службы

Если это проект без существующей учетной записи службы, СОЗДАТЬ НОВУЮ УЧЕТНУЮ ЗАПИСЬ.

Существует три шага для создания учетной записи службы, на первом шаге дайте учетной записи понятное имя, ID и описание.

В диалоговом окне настроек взаимодействия рекомендуется использовать роль 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

best practice

Некоторые шаги в этом руководстве попросят вас поместить файл конфигурации в /etc/clickhouse-server/config.d/. Это местоположение по умолчанию для файлов переопределения конфигурации в Linux системах. Когда вы помещаете эти файлы в этот каталог, ClickHouse объединит содержимое с конфигурацией по умолчанию. Помещая эти файлы в каталог config.d, вы избежите потерь конфигурации при обновлении.

Сеть

По умолчанию ClickHouse слушает на интерфейсе обратной связи; в реплицированной конфигурации необходима сетевая связь между машинами. Слушайте на всех интерфейсах:

Удаленные серверы 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 ключ, сгенерированный ранее.
  • secret_access_key должен быть установлен на HMAC секрет, сгенерированный ранее.

Запуск ClickHouse Keeper

Используйте команды для вашей операционной системы, например:

Проверка статуса ClickHouse Keeper

Отправляйте команды ClickHouse Keeper с помощью netcat. Например, mntr возвращает состояние кластера ClickHouse Keeper. Если вы выполните команду на каждом из узлов Keeper, вы увидите, что один является лидером, а другие два - подписчиками:

Запуск сервера ClickHouse

На chnode1 и chnode выполните:

Проверка

Проверка конфигурации диска

system.disks должен содержать записи для каждого диска:

  • default
  • gcs
  • cache

Проверка того, что таблицы, созданные в кластере, созданы на обоих узлах

Проверка, что данные могут быть вставлены

Проверка, что политика хранения gcs_main используется для таблицы.

Проверка в Google Cloud Console

Просматривая корзины, вы увидите, что в каждой корзине была создана папка с именем, использованном в конфигурационном файле storage.xml. Раскройте папки, и вы увидите много файлов, представляющих партиции данных.

Корзина для реплики один

Корзина для реплики два