gpexpand
Расширяет существующий кластер Greengage DB за счет добавления новых хостов в систему.
Синтаксис
gpexpand [ { -f | --hosts-file } <hosts_file> ]
| { -i | --input } <input_file> [ -B <batch_size> ]
| [ { -d | --duration } <hh:mm:ss>
| { -e | --end } '<YYYY-MM-DD hh:mm:ss>' ]
[ -a | --analyze ]
[ -n <parallel_processes> ]
| { -r | --rollback }
| { -c | --clean }
[ -v | --verbose ] [ -s | --silent ]
[ { -t | --tardir } <directory> ]
[ -S | --simple-progress ]
gpexpand -? | -h | --help
gpexpand --version
Предварительные требования
-
Вы вошли в систему как суперпользователь Greengage DB (
gpadmin). -
Новые сегмент-хосты предварительно подготовлены и настроены так же, как и существующие сегмент-хосты. Это включает:
-
Настройку аппаратного и программного обеспечения.
-
Установку Greengage DB.
-
Создание учетной записи пользователя
gpadmin. -
Обмен SSH-ключами.
-
-
На сегмент-хостах должно быть достаточно дискового пространства для временного хранения копии самой большой таблицы.
-
При перераспределении данных кластер Greengage DB должен работать в обычном режиме. Greengage DB не может работать в ограниченном (restricted) режиме или в режиме мастера. Параметры
gpstart -Rили-mне должны использоваться при запуске Greengage DB.
Эти утилиты нельзя запускать во время инициализации сегментов с помощью gpexpand:
При расширении кластера Greengage DB необходимо отключить прокси-серверы интерконнекта перед добавлением новых хостов и сегментов, а также обновить параметр gp_interconnect_proxy_addresses с учетом новых сегментов до повторного включения прокси-серверов.
Дополнительную информацию о прокси-серверах для интерконнекта в кластере Greengage DB см. в статье Настройка прокси для интерконнекта.
Описание
Утилита gpexpand выполняет расширение системы в два этапа: сначала выполняется инициализация новых экземпляров сегментов, а затем — перераспределение данных таблиц.
На этапе инициализации gpexpand запускается с входным файлом, который содержит каталоги данных, значения dbid и другие характеристики новых сегментов.
Вы можете создать входной файл вручную или в интерактивном режиме, следуя подсказкам утилиты.
При интерактивном создании входного файла можно дополнительно указать файл со списком хостов для расширения системы.
Если платформа или оболочка ограничивает длину списка имен хостов при интерактивном вводе, использование параметра -f может быть обязательным.
Помимо создания новых сегментов, на этапе инициализации в базе данных postgres создается схема расширения gpexpand, предназначенная для хранения статуса операции расширения, включая подробную информацию о каждой таблице.
На этапе перераспределения данных таблиц gpexpand выполняет балансировку данных между старыми и новыми экземплярами сегментов.
Перераспределение данных следует выполнять в периоды низкой нагрузки. Его можно разбивать на пакеты и растянуть выполнение во времени.
Чтобы начать этап перераспределения, запустите gpexpand без параметров или с параметрами -d (длительность), -e (время окончания) или -i.
Если указаны время окончания или длительность, утилита перераспределяет таблицы в схеме расширения до достижения указанного времени или длительности.
Если указан параметр -i или параметры не заданы, перераспределение продолжается до реорганизации всех таблиц в схеме расширения.
Каждая таблица реорганизуется с помощью команд ALTER TABLE для балансировки данных между новыми сегментами и восстановления исходной политики распределения.
После реорганизации всех таблиц gpexpand выводит сообщение об успешном выполнении и завершает работу.
gpexpand использует подключения Secure Shell (SSH) между системами для выполнения своих задач.
В крупных или облачных инсталляциях Greengage DB, а также при большом количестве сегментов на хосте, утилита может превысить максимальный лимит неаутентифицированных SSH-подключений.
Рассмотрите возможность увеличения этого лимита, обновив параметры конфигурации SSH MaxStartups и MaxSessions.
Дополнительную информацию о параметрах конфигурации SSH см. в документации SSH для вашего дистрибутива Linux.
Параметры
- -a | --analyze
-
Запускает ANALYZE для обновления статистики таблиц после расширения. По умолчанию
ANALYZEне выполняется. - -B | --batch-size <batch_size>
-
Количество команд в пакете, отправляемом на хост перед паузой в одну секунду. По умолчанию
16. Допустимые значения:1—128.Утилита
gpexpandгенерирует множество команд, которые могут превысить максимальное количество неаутентифицированных соединений на хосте, установленное параметромMaxStartupsв конфигурации SSH. Пауза в одну секунду обеспечивает завершение аутентификации перед отправкой следующего пакета команд.Значение по умолчанию обычно корректно и не требует изменения. Однако при ошибках подключения, таких как
ssh_exchange_identification: Connection closed by remote host, может потребоваться уменьшить размер пакета. - -c | --clean
-
Удаляет схему расширения.
- -d | --duration <hh:mm:ss>
-
Указывает длительность сеанса расширения от начала до конца.
- -e | --end '<YYYY-MM-DD hh:mm:ss>'
-
Дата и время окончания сеанса расширения.
- -f | --hosts-file <filename>
-
Имя файла, содержащего список новых хостов для расширения системы. Каждая строка файла должна содержать одно имя хоста.
Файл может содержать имена хостов с указанием сетевых интерфейсов или без них. Утилита
gpexpandкорректно обрабатывает оба варианта, добавляя номера интерфейсов в конец имени хоста, если исходные узлы имеют несколько сетевых интерфейсов.ПРИМЕЧАНИЕСоглашение об именовании сегмент-хостов Greengage DB:
sdwN, гдеsdw— префикс, аN— целое число. Например,sdw1,sdw2и так далее. Для хостов с несколькими сетевыми интерфейсами к имени хоста добавляется дефис (-) и номер интерфейса. Например,sdw1-1иsdw1-2— это имена двух интерфейсов хостаsdw1.Информацию об использовании имени хоста или IP-адреса см. в разделе Указание хостов с помощью имен хостов или IP-адресов. Также см. раздел Использование хост-систем с несколькими сетевыми интерфейсами.
- -i | --input <input_file>
-
Указывает имя файла конфигурации расширения, содержащего одну строку на каждый добавляемый сегмент в формате:
hostname|address|port|datadir|dbid|content|preferred_role
- --hba-hostnames
-
(Опционально) Определяет, использовать ли имена хостов в файле pg_hba.conf при добавлении адресов для подключения к Greengage DB. По умолчанию утилита использует IP-адреса. Для согласованности рекомендуется использовать то же значение, которое было задано для HBA_HOSTNAMES при инициализации системы Greengage DB.
- -n | --parallel <parallel_processes>
-
Количество таблиц для одновременного перераспределения. Допустимые значения:
1—96.Каждый процесс перераспределения таблицы требует двух подключений к базе данных: одно для изменения таблицы, другое — для обновления статуса таблицы в схеме расширения. Перед увеличением значения
-nпроверьте текущий параметр сервераmax_connectionsи убедитесь, что лимит подключений не превышен. - -r | --rollback
-
Откатывает неудачную операцию расширения.
- -s | --silent
-
Запуск в тихом режиме. Не запрашивает подтверждение для продолжения при предупреждениях.
- -S | --simple-progress
-
Если указан, утилита
gpexpandзаписывает только минимальную информацию о прогрессе в таблицу Greengage DB gpexpand.expansion_progress. Информация о размере отношений и статусе не записывается в таблицу gpexpand.status_detail.Использование этого параметра может повысить производительность за счет уменьшения объема данных о прогрессе, записываемых в таблицы
gpexpand. - -t | --tardir <directory>
-
Полный путь к каталогу на сегмент-хостах, куда
gpexpandкопирует временный tar-файл. Файл содержит данные Greengage DB, необходимые для создания экземпляров сегментов. По умолчанию используется домашний каталог пользователя. - -v | --verbose
-
Подробный вывод отладочной информации. С этим параметром утилита выводит все DDL- и DML-команды, используемые для расширения базы данных.
- --version
-
Выводит версию утилиты и завершает работу.
- -? | -h | --help
-
Выводит справку.
Указание хостов с помощью имен хостов или IP-адресов
При расширении системы Greengage DB можно указывать либо имя хоста, либо IP-адрес:
-
Если указывается имя хоста, его разрешение в IP-адрес должно выполняться локально в целях безопасности. Например, следует использовать записи в локальном файле /etc/hosts для сопоставления имени хоста с IP-адресом. Разрешение через внешние сервисы, такие как общедоступный DNS, недопустимо. Необходимо остановить кластер Greengage DB перед изменением сопоставления имени хоста с другим IP-адресом.
-
Если указывается IP-адрес, он не должен изменяться после первоначальной настройки. При включенном зеркалировании сегментов репликация с основного сегмента на зеркальный завершится ошибкой, если IP-адрес изменится относительно настроенного значения. По этой причине рекомендуется использовать имя хоста при расширении системы Greengage DB, если нет особых требований для указания IP-адресов.
Во время расширения gpexpand заполняет таблицу каталога gp_segment_configuration информацией о новых экземплярах сегментов.
Greengage DB использует значение address из этой таблицы при поиске хост-систем для взаимодействия через интерконнект между мастером и сегментами, а также между сегментами для других внутренних коммуникаций.
Использование хост-систем с несколькими сетевыми интерфейсами
Если хост-системы имеют несколько сетевых интерфейсов, можно расширять кластер Greengage DB, используя каждый интерфейс как отдельную хост-систему. Необходимо убедиться, что на хостах достаточно ресурсов для поддержки всех добавляемых экземпляров сегментов. Кроме того, при включенном зеркалировании сегментов необходимо убедиться, что конфигурация расширенной системы Greengage DB сохраняет отказоустойчивость при сбое хоста.
Пример файла конфигурации gpexpand для системы Greengage DB.
Сегмент-хосты gp6s1 и gp6s2 имеют по два интерфейса (-s1 и -s2), и кластер Greengage DB использует каждый интерфейс как отдельную хост-систему.
gp6s1-s2|gp6s1-s2|40001|/data/data1/gpseg2|6|2|p gp6s2-s1|gp6s2-s1|50000|/data/mirror1/gpseg2|9|2|m gp6s2-s1|gp6s2-s1|40000|/data/data1/gpseg3|7|3|p gp6s1-s2|gp6s1-s2|50001|/data/mirror1/gpseg3|8|3|m
Примеры
Запустить gpexpand с входным файлом для инициализации новых сегментов и создания схемы расширения в базе данных postgres:
$ gpexpand -i input_file
Запустить gpexpand для перераспределения таблиц на новые сегменты с максимальной длительностью 60 часов:
$ gpexpand -d 60:00:00