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

Интеграция 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

Создание бакета GCS в US East 1

ch_bucket_us_east4

Создание бакета GCS в US East 4

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

Создание HMAC ключа и секрета для сервисного аккаунта

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

Генерация HMAC ключа сервисного аккаунта в GCS

Добавление нового сервисного аккаунта

Если это проект без существующего сервисного аккаунта, СОЗДАТЬ НОВЫЙ АККАНТ.

Добавление нового сервисного аккаунта в GCS

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

Определение имени и ID нов�ого сервисного аккаунта в GCS

В диалоговом окне настроек совместимости рекомендуется роль IAM Администратор объектов хранилища; выберите эту роль на втором шаге.

Выбор IAM роли Администратор объектов хранилища в GCS

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

Настройка дополнительных параметров для нового сервисного аккаунта в GCS

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

Получение сгенерированного HMAC ключа для GCS

Настройка 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 в кластере. Файл конфигурации по умолчанию содержит примеры определений кластера, чтобы показать только полностью настроенные кластеры, тег replace="true" добавляется к записи remote_servers, чтобы при объединении этой конфигурации с конфигурацией по умолчанию заменялся раздел 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. Разверните папки и вы увидите множество файлов, представляющих разделы данных.

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

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

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

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