gprecoverseg
Восстанавливает основной или зеркальный сегмент, отмеченный как неактивный (если включено зеркалирование).
Синтаксис
gprecoverseg [-p <new_recover_host>[,...]]
|-i <recover_config_file>
[-d <master_data_directory>]
[-B <batch_size>] [-b <segment_batch_size>] [--differential]
[-F] [-a] [-q] [-s] [--no-progress]
[--hba-hostnames]
[-l <logfile_directory>]
[-v | --verbose]
gprecoverseg -r [--replay-lag <replay_lag>]
gprecoverseg -o <output_recover_config_file>
[-p <new_recover_host>[,...]]
gprecoverseg -? | -h | --help
gprecoverseg --version
Описание
В системе с включенным зеркалированием утилита gprecoverseg реактивирует отказавший сегмент и определяет измененные файлы базы данных, требующие синхронизации.
После завершения процесса СУБД переходит в режим Not in Sync и остается в нем до полной синхронизации восстановленного сегмента.
При этом система остается доступной и полностью работоспособной.
При инкрементальном восстановлении (без указания параметра -F) утилита gprecoverseg, обнаружив сегмент без зеркала в кластере с включенным зеркалированием, выводит соответствующее сообщение, пропускает восстановление данного сегмента и продолжает выполнение.
Сегмент может отказать по разным причинам: отказ хоста, сбой сети или проблемы с диском.
При отказе сегмента его статус помечается как d (down) в системном каталоге Greengage DB, а его зеркало активируется в режиме Not in Sync.
Для восстановления отказавшего сегмента необходимо сначала устранить причину отказа, после чего выполнить восстановление сегмента с помощью утилиты gprecoverseg.
Восстановление сегментов с помощью gprecoverseg требует наличия активного зеркала.
Для систем без зеркалирования или в случае двойного отказа (основной сегмент и зеркало неактивны одновременно) необходимо вручную восстановить отказавшие сегменты, а затем перезапустить систему.
Например, эта команда перезапускает СУБД:
$ gpstop -r
По умолчанию отказавший сегмент восстанавливается на месте (in-place recovery): система переводит его в рабочее состояние на том же хосте и в том же каталоге данных, где сегмент был изначально настроен.
В этом случае для файла конфигурации восстановления (опция -i) используется следующий формат.
Параметр failed_host_name является необязательным:
<failed_host_name>|<failed_host_address>|<port>|<data_directory>
В некоторых случаях восстановление на месте невозможно (например, при аппаратном отказе хоста).
В таких ситуациях gprecoverseg позволяет восстановить отказавшие сегменты на другой хост (с помощью -p), в альтернативный каталог данных на работающих сегмент-хостах (с помощью -s) или с использованием файла конфигурации восстановления (опция -i) в следующем формате.
Символ <SPACE> обозначает обязательный пробел — дополнительных пробелов добавлять не следует.
Параметр failed_host_name является необязательным:
<failed_host_name>|<failed_host_address>|<port>|<data_directory><SPACE><recovery_host_name>|<recovery_host_address>|<port>|<data_directory>
Подробности и примеры файла конфигурации восстановления см. в описании параметра -i ниже.
Таблица системного каталога gp_segment_configuration помогает определить текущую конфигурацию сегментов для планирования восстановления зеркал. Например:
SELECT dbid, content, address, port, datadir
FROM gp_segment_configuration
ORDER BY dbid;
Новый хост, на который будут восстановлены сегменты, должен иметь предустановленное программное обеспечение Greengage DB и быть настроен идентично существующим сегмент-хостам. На всех сегмент-хостах, участвующих в восстановлении, должен быть доступен каталог данных с правами на запись и достаточным дисковым пространством для размещения восстановленных сегментов.
Процесс восстановления помечает сегмент как активный в системном каталоге Greengage DB и инициирует его ресинхронизацию для приведения транзакционного состояния в соответствие с последними изменениями.
Сегмент в это время находится в состоянии Not in Sync, а остальная часть системы продолжает работать.
Параметры
- -a
-
Не запрашивает подтверждение у пользователя.
- -b <segment_batch_size>
-
Максимальное количество сегментов на хост для параллельной обработки. Допустимые значения от
1до128. Если параметр не указан, утилита начнет восстанавливать до 64 сегментов параллельно на каждом хосте. - -B <batch_size>
-
Количество хостов для параллельной обработки. Если параметр не указан, утилита будет обрабатывать до 16 хостов параллельно. Допустимые значения: от
1до64. - -d <master_data_directory>
-
(Необязательно) Каталог данных мастер-хоста. Если параметр не указан, будет использовано значение, установленное для MASTER_DATA_DIRECTORY.
- -F
-
(Необязательно) Выполняет полное копирование активного экземпляра сегмента для восстановления отказавшего сегмента, вместо поведения по умолчанию — копирования только изменений, накопленных с момента отключения сегмента.
ВНИМАНИЕПолное восстановление удаляет каталог данных неактивного экземпляра сегмента перед копированием данных из активного (текущего основного) экземпляра сегмента. Перед выполнением полного восстановления убедитесь, что отказ сегмента не вызвал повреждения данных и что любые проблемы с диском сегмент-хоста были исправлены.
Кроме того, при полном восстановлении утилита не восстанавливает пользовательские файлы, хранящиеся в каталоге данных экземпляра сегмента, даже если пользовательские файлы также находятся в активном экземпляре сегмента. Вы должны восстановить пользовательские файлы вручную. Например, при использовании протокола GPFDISTS (gpfdist с шифрованием SSL) для управления внешними данными требуются файлы клиентских сертификатов в каталоге PGDATA/gpfdists экземпляра сегмента. Эти файлы не восстанавливаются. Для получения информации о настройке
gpfdistsсм. раздел Настройка SSL.Используйте параметр
-sдля вывода новой строки раз в секунду для каждого сегмента. Также можно использовать параметр--no-progressдля полного отключения отчетов о прогрессе. Чтобы ускорить полное восстановление после неудачного предыдущего запуска и избежать копирования всего содержимого каталога данных, используйте параметр--differential. Он пропускает файлы и каталоги, которые не изменились с момента последнего запускаgprecoverseg. - --differential
-
(Необязательно) Выполняет дифференциальное копирование активного сегмента для восстановления отказавшего сегмента. По умолчанию копируются только изменения, произошедшие за время отсутствия сегмента.
Во время полного восстановления из основного сегмента в зеркальный копируются только те файлы и каталоги, которые изменились с момента отказа сегмента. Параметр
--differentialможно использовать только при полном восстановлении на месте.ПРИМЕЧАНИЕПараметр
--differentialнельзя использовать вместе с любым из следующих параметровgprecoverseg:-i,-o,-Fили-p. - --hba-hostnames
-
(Необязательно) Определяет, будут ли адреса в файле pg_hba.conf обновляться с использованием имен хостов для подключения к Greengage DB. По умолчанию утилита использует IP-адреса. Для согласованности рекомендуется использовать то же значение, которое было задано для HBA_HOSTNAMES при инициализации системы Greengage DB.
- -i <recover_config_file>
-
Указывает имя файла с информацией об отказавших сегментах для восстановления.
Каждая строка файла конфигурации описывает сегмент, который необходимо восстановить. Строка может быть указана в одном из трех форматов. При восстановлении на месте (инкрементальном) каждая строка должна содержать одну группу полей, разделенных вертикальной чертой. Например:
failedAddress|failedPort|failedDataDirectory
или
failedHostname|failedAddress|failedPort|failedDataDirectory
Для восстановления в новое расположение укажите в строке две группы полей, разделенные пробелом. Обязательный пробел обозначается как
<SPACE>. Не добавляйте лишние пробелы.failedAddress|failedPort|failedDataDirectory<SPACE>newAddress|newPort|newDataDirectory
или
failedHostname|failedAddress|failedPort|failedDataDirectory<SPACE>newHostname|newAddress|newPort|newDataDirectory
Для смешанного восстановления укажите в каждой строке поле со значениями
I/D/F/i/d/f. Если полеrecovery_typeне задано, по умолчанию выполняется инкрементальное восстановление.recoveryType|failedAddress|failedPort|failedDataDirectory
Поле
recoveryTypeподдерживает следующие значения:-
I/iдля инкрементального восстановления. -
D/dдля дифференциального восстановления. -
F/fдля полного восстановления.ПРИМЕЧАНИЕСтроки, начинающиеся с
#, рассматриваются как комментарии и игнорируются.Примеры
Восстановление на месте (инкрементальное) одного зеркала:
sdw1-1|50001|/data1/mirror/gpseg16
Восстановление одного зеркала на новый хост:
sdw1-1|50001|/data1/mirror/gpseg16<SPACE>sdw4-1|50001|/data1/recover1/gpseg16
Восстановление на месте неактивных зеркал с типом восстановления:
sdw1-1|50001|/data1/mirror/gpseg1 // Выполняет инкрементальное восстановление (по умолчанию) I|sdw1-1|50001|/data1/mirror/gpseg1 // Выполняет инкрементальное восстановление i|sdw1-1|50001|/data1/mirror/gpseg1 // Выполняет инкрементальное восстановление D|sdw2-1|50002|/data1/mirror/gpseg2 // Выполняет дифференциальное восстановление d|sdw2-1|50002|/data1/mirror/gpseg2 // Выполняет дифференциальное восстановление F|sdw3-1|50003|/data1/mirror/gpseg3 // Выполняет полное восстановление f|sdw3-1|50003|/data1/mirror/gpseg3 // Выполняет полное восстановление
Получение примера файла
Вы можете использовать параметр
-oдля создания примера файла конфигурации восстановления, который можно использовать как отправную точку. Выходной файл содержит список текущих недоступных сегментов и их расположение для восстановления по умолчанию. Этот файл можно использовать с параметром-iдля восстановления на месте (инкрементального).
-
- -l <logfile_directory>
-
Каталог для записи логов. По умолчанию: ~/gpAdminLogs.
- -o <output_recover_config_file>
-
Задает имя и путь файла для вывода примера файла конфигурации восстановления. Файл можно редактировать, чтобы указать альтернативные расположения восстановления при необходимости. Пример ниже демонстрирует вывод файла конфигурации восстановления по умолчанию:
$ gprecoverseg -o /home/gpadmin/recover_conf_file - -p <new_recover_host>[,…]
-
Указывает новый хост вне текущей настроенной системы Greengage DB, на который следует восстановить недоступные сегменты.
Новый хост должен иметь установленное и настроенное программное обеспечение Greengage DB и соответствовать конфигурации существующих сегмент-хостов: ту же версию ОС, локали, учетную запись пользователя
gpadmin, созданные каталоги данных, SSH-ключи, количество сетевых интерфейсов, соглашение об именовании интерфейсов и т.д. В частности, на новом хосте должны быть установлены бинарные файлы Greengage DB, обеспечена возможность подключения без пароля ко всем сегментам, включая мастер, и применены все другие специфические для Greengage DB настройки ОС.ПРИМЕЧАНИЕВ случае нескольких отказавших сегмент-хостов вы можете указать хосты для восстановления в виде списка, разделенного запятыми. Однако настоятельно рекомендуется восстанавливать по одному хосту за раз. Если необходимо восстановить более одного хоста одновременно, критически важно обеспечить, чтобы не произошел сценарий двойного отказа, при котором и основной сегмент, и соответствующее зеркало одновременно недоступны.
- -q
-
Запуск в тихом режиме. Вывод команды не отображается на экране, но по-прежнему записывается в лог-файл.
- -r
-
После восстановления сегмента сегмент-экземпляры могут не быть возвращены к их предпочтительным ролям, назначенным при инициализации системы. Это может привести к потенциально несбалансированному состоянию, когда на некоторых сегмент-хостах будут работать больше активных сегментов, чем необходимо для наилучшей производительности. Параметр
-rвыполняет балансировку основных и зеркальных сегментов, возвращая их к предпочтительным ролям. Перед запускомgprecoverseg -rвсе сегменты должны быть работоспособными и синхронизированными. Если в системе выполняются запросы, они будут отменены и откатятся. - --replay-lag <replay_lag>
-
Допустимая задержка воспроизведения на зеркале (в ГБ) при балансировке сегментов. Если
replay_lag(flush_lsn-replay_lsn) превышает указанное значение, балансировка будет прервана. - -s
-
Отображает ход выполнения
pg_basebackupилиpg_rewindпострочно вместо перезаписи одной строки. Полезно при записи в файл или если терминал не поддерживает управляющие последовательности. По умолчанию прогресс отображается в одной строке. - --no-progress
-
Отключает вывод прогресса утилит
pg_basebackup,pg_rewindиrsync. По умолчанию прогресс отображается. - -v | --verbose
-
Включает подробный вывод логов.
- --version
-
Отображает версию утилиты.
- -? | -h | --help
-
Выводит справку.
Примеры
Пример 1: восстановление отказавших сегментов на месте
Восстановить любые отказавшие экземпляры сегментов на месте:
$ gprecoverseg
Пример 2: балансировка сегментов, не находящихся в предпочтительных ролях
Сначала убедитесь, что все сегменты запущены, работают и завершена их синхронизация, а также что есть сегменты, не находящиеся в предпочтительных ролях:
$ gpstate -e
Если это необходимо, выполните балансировку сегментов:
$ gprecoverseg -r
Пример 3: восстановление отказавших сегментов на отдельный хост
Восстановите все отказавшие экземпляры сегментов на вновь настроенный сегмент-хост:
$ gprecoverseg -i <recover_config_file>