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

Хранилища данных

Что такое разделение вычислений?

Разделение вычислений доступно для уровней Scale и Enterprise.

Каждая служба ClickHouse Cloud включает:

  • Группу из двух или более узлов ClickHouse (или реплик) необязательно, но дочерние службы могут быть одиночной репликой.
  • Конечную точку (или несколько конечных точек, созданных через интерфейс ClickHouse Cloud), которая является URL службы, который вы используете для подключения к службе (например, https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443).
  • Папку объектного хранилища, где служба хранит все данные и частично метаданные:
примечание

Дочерние одиночные службы могут масштабироваться вертикально, в отличие от одиночных родительских служб.


Рис. 1 - текущая служба в ClickHouse Cloud

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

Каждая группа узлов вычислений будет иметь свою собственную конечную точку, поэтому вы можете выбрать, какой набор реплик использовать для ваших рабочих нагрузок. Некоторые из ваших рабочих нагрузок могут удовлетворяться только одной малой репликой, в то время как другим могут потребоваться полная высокая доступность (HA) и сотни гигабайт памяти. Разделение вычислений также позволяет отделить операции чтения от операций записи, чтобы они не мешали друг другу:


Рис. 2 - разделение вычислений в ClickHouse Cloud

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

Что такое хранилище данных?

В ClickHouse Cloud хранилище данных — это набор служб, которые делят одни и те же данные. Каждое хранилище данных имеет основную службу (эта служба была создана первой) и вторичные службы. Например, на скриншоте ниже вы можете видеть хранилище данных "DWH Prod" с двумя службами:

  • Основная служба DWH Prod
  • Вторичная служба DWH Prod Subservice

Рис. 3 - Пример хранилища

Все службы в хранилище данных делят одно и то же:

  • Регион (например, us-east1)
  • Облачный провайдер (AWS, GCP или Azure)
  • Версия базы данных ClickHouse

Вы можете сортировать службы по хранилищу, к которому они принадлежат.

Контроль доступа

Учетные данные базы данных

Поскольку все в хранилище делят один и тот же набор таблиц, они также делят контроль доступа к этим другим службам. Это означает, что все пользователи базы данных, созданные в Службе 1, также смогут использовать Службу 2 с теми же разрешениями (предоставления для таблиц, представлений и т.д.), и наоборот. Пользователи будут использовать другую конечную точку для каждой службы, но будут использовать одно и то же имя пользователя и пароль. Другими словами, пользователи делятся между службами, работающими с одним и тем же хранилищем:


Рис. 4 - пользователь Алиса была создана в Службе 1, но она может использовать те же учетные данные для доступа ко всем службам, которые делят одни и те же данные

Контроль сетевого доступа

Обычно полезно ограничить доступ к конкретным службам для других приложений или случайных пользователей. Это можно сделать, используя сетевые ограничения, аналогично тому, как это настроено в данный момент для обычных служб (перейдите в Настройки на вкладке службы в конкретной службе в консоли ClickHouse Cloud).

Вы можете применить настройки фильтрации IP к каждой службе отдельно, что означает, что вы можете контролировать, какое приложение может получить доступ к какой службе. Это позволяет ограничить пользователей в использовании конкретных служб:


Рис. 5 - Алиса ограничена в доступе к Службе 2 из-за сетевых настроек

Чтение против чтения-записи

Иногда бывает полезно ограничить доступ на запись к конкретной службе и разрешить записи только подмножеству служб в хранилище. Это можно сделать при создании второй и последующих служб (первая служба всегда должна быть с доступом на чтение и запись):


Рис. 6 - Службы только для чтения и чтения-записи в хранилище

примечание
  1. В данный момент службы только для чтения позволяют операции управления пользователями (создание, удаление и т.д.). Это поведение может быть изменено в будущем.
  2. В настоящее время обновляемые материализованные представления выполняются на всех службах в хранилище, включая службы только для чтения. Это поведение будет изменено в будущем, и они будут выполняться только на службах с доступом на чтение и запись.

Масштабирование

Каждая служба в хранилище может быть настроена в соответствии с вашей рабочей нагрузкой по следующим параметрам:

  • Число узлов (реплик). Основная служба (служба, которая была создана первой в хранилище) должна иметь 2 или более узлов. Каждая вторичная служба может иметь 1 или более узлов.
  • Размер узлов (реплик)
  • Должна ли служба масштабироваться автоматически
  • Должна ли служба простаивать при бездействии (не может быть применено к первой службе в группе - смотрите раздел Ограничения)

Изменения в поведении

Как только разделение вычислений включено для службы (была создана хотя бы одна вторичная служба), вызов функции clusterAllReplicas() с именем кластера default будет использовать только реплики из службы, где она была вызвана. Это значит, что если две службы подключены к одной и той же базе данных, и clusterAllReplicas(default, system, processes) вызывается из службы 1, только процессы, выполняющиеся на службе 1, будут показаны. При необходимости вы все еще можете вызвать clusterAllReplicas('all_groups.default', system, processes), например, чтобы обратиться ко всем репликам.

Ограничения

  1. Основная служба всегда должна быть включена и не должна простаивать (ограничение будет снято спустя некоторое время после GA). Во время закрытого предпросмотра и некоторое время после GA основная служба (обычно существующая служба, которую вы хотите расширить, добавив другие службы) всегда будет активна и настройки простоя будут отключены. Вы не сможете остановить или приостановить основную службу, если существует хотя бы одна вторичная служба. После удаления всех вторичных служб вы снова сможете остановить или приостановить исходную службу.

  2. Иногда нагрузки не могут быть изолированы. Хотя цель состоит в том, чтобы предоставить вам возможность изолировать рабочие нагрузки баз данных друг от друга, могут возникнуть крайние случаи, когда одна рабочая нагрузка в одной службе повлияет на другую службу, делящую одни и те же данные. Эти ситуации достаточно редки и в основном связаны с нагрузками, похожими на OLTP.

  3. Все службы с доступом на чтение и запись выполняют фоновый процесс слияния. Когда данные вставляются в ClickHouse, база данных сначала вставляет данные в некоторые временные партиции, а затем выполняет слияния в фоновом режиме. Эти слияния могут потреблять память и ресурсы CPU. Когда две службы с доступом на чтение и запись делят одно и то же хранилище, обе они выполняют фоновые операции. Это означает, что может возникнуть ситуация, когда в Службе 1 проходит INSERT, но операция слияния завершается в Службе 2. Обратите внимание, что службы только для чтения не выполняют фоновые слияния и, следовательно, не расходуют свои ресурсы на эту операцию.

  4. Вставки в одной службе с доступом на чтение и запись могут предотвратить другую службу с доступом на чтение и запись от простоя, если этот режим включен. Из-за предыдущего пункта вторая служба выполняет фоновые операции слияния для первой службы. Эти фоновые операции могут помешать второй службе перейти в режим простоя при его включении. Как только фоновые операции завершатся, служба будет находиться в режиме простоя. Службы только для чтения не затрагиваются и будут находиться в режиме простоя без задержки.

  5. Запросы CREATE/RENAME/DROP DATABASE могут быть заблокированы приостановленными/остановленными службами по умолчанию. Эти запросы могут застрять. Чтобы обойти это, вы можете выполнять запросы управления базами данных с помощью settings distributed_ddl_task_timeout=0 на уровне сессии или для отдельных запросов. Например:

  1. В очень редких случаях вторичные службы, которые были приостановлены или остановлены на длительное время (дни) без пробуждения/старта, могут вызвать деградацию производительности других служб в том же хранилище. Эта проблема будет решена в ближайшее время и связана с мутациями, выполняющимися в фоновом режиме. Если вы считаете, что сталкиваетесь с этой проблемой, пожалуйста, свяжитесь со службой поддержки ClickHouse Support.

  2. В настоящее время существует мягкий лимит в 5 служб на одно хранилище. Свяжитесь с командой поддержки, если вам нужно более 5 служб в одном хранилище.

Цены

Цены на вычисления одинаковы для всех служб в хранилище (основной и вторичные). Хранение выставляется только один раз - оно включено в первую (оригинальную) службу.

Резервные копии

  • Поскольку все службы в одном хранилище делят одно и то же хранилище, резервные копии создаются только на основной (первоначальной) службе. Таким образом, данные для всех служб в хранилище резервируются.
  • Если вы восстанавливаете резервную копию из основной службы хранилища, она будет восстановлена в совершенно новой службе, не связанной с существующим хранилищем. Вы можете добавить больше служб в новую службу сразу после завершения восстановления.

Использование хранилищ

Создание хранилища

Чтобы создать хранилище, вы должны создать вторичную службу, которая будет делить данные с существующей службой. Это можно сделать, нажав на знак плюса на любой из существующих служб:


Рис. 7 - Нажмите на знак плюса, чтобы создать новую службу в хранилище

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

Переименование хранилища

Существует два способа переименовать хранилище:

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

Удаление хранилища

Удаление хранилища означает удаление всех вычислительных служб и данных (таблиц, представлений, пользователей и т.д.). Это действие нельзя отменить. Вы можете удалить хранилище, только удалив первую созданную службу. Для этого:

  1. Удалите все службы, которые были созданы в дополнение к службе, которая была создана первой;
  2. Удалите первую службу (предупреждение: все данные хранилища будут удалены на этом этапе).