Расширение кластера
Вы можете расширить кластер Managed Service for Greenplum®, добавив хосты-сегменты. Количество добавляемых хостов не может быть меньше двух.
Во время расширения кластера данные автоматически перераспределяются в новые сегменты. Перераспределение данных выполняется последовательно для каждой таблицы в течение таймаута, указанного в параметрах расширения. В это время таблица недоступна для операций чтения и записи.
Для расширения кластера используется утилита gp_expand
. Подробнее об утилите и ее режиме работы см. в документации Greenplum®
Добавить хосты-сегменты
-
Перейдите на страницу каталога
и выберите сервис Managed Service for Greenplum. -
Выберите кластер и откройте вкладку
Хосты. -
Нажмите кнопку Расширить кластер в правом верхнем углу.
-
Укажите настройки расширения кластера:
- Количество новых хостов-сегментов — количество добавляемых хостов-сегментов. Минимальное значение —
2
. - Добавить сегментов на хост — количество добавляемых сегментов на хост. Максимальное значение зависит от класса хостов.
- Таймаут редистрибуции — таймаут перераспределения данных по новым сегментам в секундах. При значении
0
(рекомендуемое значение) величина таймаута будет подобрана автоматически, исходя из конфигурации кластера и объема данных.
- Количество новых хостов-сегментов — количество добавляемых хостов-сегментов. Минимальное значение —
-
Нажмите кнопку Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы добавить хосты-сегменты в кластер Greenplum®:
-
Посмотрите описание команды CLI для расширения кластера:
yc managed-greenplum cluster expand --help
-
Укажите параметры расширения кластера в команде:
yc managed-greenplum cluster expand <имя_или_идентификатор_кластера> \ --segment-host-count <количество_добавляемых_хостов_сегментов> \ --add-segments-per-host-count <количество_добавляемых_сегментов_на_хост> \ --duration-seconds <таймаут_перераспределения_данных_в_секундах>
Где:
--segment-host-count
— количество добавляемых хостов-сегментов. Минимальное значение (по умолчанию) —2
.--add-segments-per-host-count
— количество добавляемых сегментов на хост. Максимальное значение зависит от класса хостов. По умолчанию —0
.--duration-seconds
— таймаут перераспределения данных по новым сегментам в секундах. При значении0
(это рекомендуемое значение устанавливается по умолчанию) величина таймаута будет подобрана автоматически, исходя из конфигурации кластера и объема данных.
Идентификатор и имя кластера можно получить со списком кластеров в каталоге.
Чтобы добавить хосты-сегменты, воспользуйтесь методом REST API expand для ресурса Cluster или вызовом gRPC API ClusterService/Expand и передайте в запросе:
- Идентификатор кластера в параметре
clusterId
. - Количество добавляемых хостов-сегментов в параметре
segmentHostCount
. - Количество добавляемых сегментов на хост в параметре
addSegmentsPerHostCount
. - Таймаут перераспределения данных (в секундах) в параметре
duration
. При значении0
(это рекомендуемое значение устанавливается по умолчанию) величина таймаута будет подобрана автоматически, исходя из конфигурации кластера и объема данных.
Идентификатор кластера можно получить со списком кластеров в каталоге.
Важно
Малое значение таймаута перераспределения (меньше 2 часов) может быть недостаточным для перераспределения данных всех таблиц кластера. В этом случае запустите перераспределение повторно.
Мониторинг перераспределения данных
Чтобы следить за ходом перераспределения данных по новым сегментам, подключитесь к базе postgres
и выполните запрос от имени пользователя с ролью mdb_admin
:
SELECT dbname, fq_name, status, expansion_started, source_bytes FROM gpexpand.status_detail;
Результат:
dbname | fq_name | status | expansion_started | source_bytes
-----------+-------------------------------------+-------------+----------------------------+-------------
diskquota | diskquota_namespace.database_list | NOT STARTED | | 0
postgres | public.rnd_nocomp_distrnd_ao_res3 | NOT STARTED | | 52558742480
postgres | public.rnd_nocomp_distrnd_ao1 | COMPLETED | 2022-09-06 12:44:36.71759 | 13013536
postgres | public.rnd_nocomp_distrnd_ao_res2 | IN PROGRESS | 2022-09-06 13:03:29.231359 | 63070490912
(4 rows)
Текущий статус перераспределения будет указан в колонке status
.
Приоритет перераспределения таблиц
Чтобы указать таблицы, данные которых должны перераспределятся в первую очередь, повысьте их приоритет. Для этого подключитесь к базе postgres
и выполните запрос от имени пользователя с ролью mdb_admin
:
UPDATE gpexpand.status_detail SET rank=1 WHERE fq_name IN (<список_таблиц>);
Запуск перераспределения данных
Ошибка Unknown error: Partially Distributed Data
в логах работы кластера означает, что не все таблицы были перераспределены на все новые сегменты. Такое может произойти, если для перераспределения всех таблиц не хватило времени, указанного в значении таймаута перераспределения. Чтобы исправить ошибку:
-
Найдите таблицы, которые перераспределились не полностью:
SELECT count(*) FROM gp_distribution_policy WHERE numsegments != <количество_сегментов>;
Где
количество_сегментов
— это общее число сегментов всех хостов-сегментов кластера Greenplum®. -
Запустите перераспределения данных:
-
Для обычных таблиц:
ALTER TABLE ONLY <имя_таблицы> EXPAND TABLE;
-
Для партиционированных таблиц:
ALTER TABLE <имя_таблицы> SET WITH (REORGANIZE=true) <политика_распределения>;
Где
политика_распределения
— политика распределения Greenplum®.Политику распределения Greenplum® для партиции выбранной таблицы можно получить с помощью вызова встроенной функции:
SELECT pg_get_table_distributedby(<OID_партиции>) AS distribution_policy;
-
Greenplum® и Greenplum Database® являются зарегистрированными товарными знаками или товарными знаками VMware, Inc в США и/или других странах.