Запуск и остановка кластера
Этот раздел описывает, как запустить, остановить и перезапустить кластер Greengage DB (на основе Greenplum).
Кластер Greengage DB обычно включает несколько процессов, распределенных по разным серверам. Эти процессы обеспечивают работу баз данных PostgreSQL, лежащих в основе экземпляров Greengage DB на соответствующих серверах. Для консистентного запуска или остановки всех процессов кластера одной командой доступны следующие утилиты:
-
gpstart
— запуск кластера. -
gpstop
— остановка или перезапуск кластера, перезагрузка конфигурации.
Утилиты расположены в подкаталоге bin каталога установки Greengage DB ($GPHOME).
Запуск кластера
Вызов gpstart
на мастер-хосте запускает инициализированный кластер Greengage DB:
$ gpstart
Вызов gpstart
не требуется при первом запуске кластера после его инициализации с помощью gpinitsystem
.
Кластер запускается автоматически.
Эта команда проверяет окружение и выводит информацию о конфигурации кластера:
[INFO]:--------------------------- [INFO]:-Master instance parameters [INFO]:--------------------------- [INFO]:-Database = template1 [INFO]:-Master Port = 5432 [INFO]:-Master directory = /data1/master/gpseg-1 [INFO]:-Timeout = 600 seconds [INFO]:-Master standby start = On [INFO]:--------------------------------------- [INFO]:-Segment instances that will be started [INFO]:--------------------------------------- [INFO]:- Host Datadir Port Role [INFO]:- sdw1 /data1/primary/gpseg0 10000 Primary [INFO]:- sdw2 /data1/mirror/gpseg0 10500 Mirror [INFO]:- sdw1 /data1/primary/gpseg1 10001 Primary [INFO]:- sdw2 /data1/mirror/gpseg1 10501 Mirror [INFO]:- sdw2 /data1/primary/gpseg2 10000 Primary [INFO]:- sdw1 /data1/mirror/gpseg2 10500 Mirror [INFO]:- sdw2 /data1/primary/gpseg3 10001 Primary [INFO]:- sdw1 /data1/mirror/gpseg3 10501 Mirror
Введите y
и нажмите Enter
, чтобы подтвердить конфигурацию и продолжить запуск кластера.
Чтобы запустить кластер без подтверждения, используйте параметр -a
:
$ gpstart -a
Команда запускает все экземпляры кластера — мастер, резервный мастер, основные и зеркальные сегменты — на соответствующих хостах параллельно. Если запуск выполнен успешно, в выводе появится сообщение:
[INFO]:-Database successfully started
По умолчанию gpstart
использует до 64 процессов для параллельного запуска экземпляров.
Чтобы изменить это число, используйте параметр -B
:
$ gpstart -B 16
Запуск только мастера
Режим запуска только мастера (master-only) позволяет запустить мастер-экземпляр кластера, не запуская сегменты. Этот режим в основном используется для выполнения задач технического обслуживания, не затрагивающих хранимые данные.
Для запуска в режиме master-only вызовите gpstart
с параметром -m
на мастер-хосте:
$ gpstart -m
Введите y
и нажмите Enter
, чтобы подтвердить запуск.
Изменение системного каталога вручную может привести к несогласованности кластера. Используйте режим master-only с осторожностью.
Для выполнения обслуживания в режиме master-only:
-
Запустите кластер в режиме только мастера:
$ gpstart -m
-
Подключитесь к базе данных мастера в служебном режиме:
$ PGOPTIONS='-c gp_session_role=utility' psql postgres
-
Выполните обслуживание.
-
Остановите мастер:
$ gpstop -m
-
(Опционально) Запустите весь кластер:
$ gpstart
Для задач обслуживания, требующих работы всего кластера или доступа к данным, можно использовать ограниченный (restricted) режим запуска. В этом режиме запускаются все экземпляры, но подключаться могут только суперпользователи:
$ gpstart -R
Остановка кластера
Не используйте команду kill
для остановки экземпляров Greengage DB.
Это может привести к повреждению данных и несогласованности кластера.
Чтобы остановить кластер Greengage DB, выполните gpstop
на мастер-хосте:
$ gpstop
Команда выводит информацию об экземплярах, которые будут остановлены:
[INFO]:--------------------------------------------- [INFO]:-Master instance parameters [INFO]:--------------------------------------------- [INFO]:- Master Greengage instance process active PID = 14255 [INFO]:- Database = template1 [INFO]:- Master port = 5432 [INFO]:- Master directory = /data1/master/gpseg-1 [INFO]:- Shutdown mode = smart [INFO]:- Timeout = 120 [INFO]:- Shutdown Master standby host = On [INFO]:--------------------------------------------- [INFO]:-Segment instances that will be shutdown: [INFO]:--------------------------------------------- [INFO]:- Host Datadir Port Status [INFO]:- sdw1 /data1/primary/gpseg0 10000 u [INFO]:- sdw2 /data1/mirror/gpseg0 10500 u [INFO]:- sdw1 /data1/primary/gpseg1 10001 u [INFO]:- sdw2 /data1/mirror/gpseg1 10501 u [INFO]:- sdw2 /data1/primary/gpseg2 10000 u [INFO]:- sdw1 /data1/mirror/gpseg2 10500 u [INFO]:- sdw2 /data1/primary/gpseg3 10001 u [INFO]:- sdw1 /data1/mirror/gpseg3 10501 u
Введите y
и нажмите Enter
, чтобы подтвердить остановку кластера.
Чтобы остановить кластер без подтверждения, используйте параметр -a
:
$ gpstop -a
Если остановка прошла успешно, в выводе появится сообщение:
[INFO]:-Database successfully shutdown with no errors reported
По умолчанию gpstop
использует до 64 процессов для параллельной остановки экземпляров.
Чтобы изменить это число, используйте параметр -B
:
$ gpstop -B 16
Режимы остановки кластера
Greengage DB предоставляет три режима остановки кластера в контексте работы с активными транзакциями: smart
, fast
и immediate
.
Режим определяет, как обрабатываются активные транзакции и клиентские подключения во время остановки кластера.
Режим | Команда | Описание |
---|---|---|
Smart |
gpstop gpstop -M smart |
Режим по умолчанию. Ожидает завершения активных транзакций. Если транзакции остаются неподтвержденными по истечении двух минут, предлагает пользователю выбор: ожидать дальше в том же режиме или переключиться на другой |
Fast |
gpstop -M fast |
Выполняет откат активных транзакций, завершает клиентские подключения и корректно останавливает кластер |
Immediate |
gpstop -M immediate |
Завершает процессы кластера без ожидания или очистки временных файлов. Включает следующие шаги:
|
Использование режима остановки immediate
может привести к повреждению базы данных и несогласованности кластера.
Типичная остановка кластера Greengage DB может проходить следующим образом:
-
Попытайтесь остановить кластер в режиме
smart
:$ gpstop
-
Если активные транзакции мешают остановке, завершите их, используя системные функции
pg_cancel_backend()
иpg_terminate_backend()
. Узнайте больше в разделе Остановка клиентских запросов и процессов. -
Когда завершение клиентских подключений безопасно, продолжите остановку в режиме
fast
.$ gpstop -M fast
Остановка клиентских запросов и процессов
Каждое клиентское подключение порождает отдельный серверный процесс PostgreSQL. Когда нужно остановить кластер, вы можете управлять активными клиентскими транзакциями и подключениями с помощью следующих функций:
-
pg_cancel_backend()
отменяет выполнение запроса по указанному идентификатору процесса (PID), оставляя открытым клиентское подключение. -
pg_terminate_backend()
принудительно завершает указанный процесс, закрывая связанное с ним клиентское подключение.
Для вызова этих функций требуются права суперпользователя. Функции принимают идентификатор процесса в качестве аргумента. Вы также можете добавить сообщение для отправки клиенту:
SELECT pg_cancel_backend(1234);
SELECT pg_terminate_backend(2345, 'Shutting down the server for maintenance.');
Идентификаторы активных клиентских процессов хранятся в системном представлении pg_stat_activity
:
SELECT pid, usename, state, query FROM pg_stat_activity;
Результат выполнения этого запроса может выглядеть так:
pid | usename | state | query ------+---------+---------------------+---------------------------------------------------------- 7662 | gpadmin | active | SELECT pid, usename, state, query FROM pg_stat_activity; 7831 | alice | idle in transaction | select count (*) from pg_settings; (2 rows)
Пользуясь информацией из этого представления, вы можете остановить или прервать несколько процессов одним запросом:
-
Отменить выполнение всех текущих запросов:
SELECT pg_cancel_backend(pid) FROM pg_stat_activity WHERE state = 'active' AND pid <> pg_backend_pid();
ПРИМЕЧАНИЕУсловие
pid <> pg_backend_pid()
не позволяет запросу прервать свое собственное выполнение. -
Прервать все клиентские подключения к указанной базе:
SELECT pg_terminate_backend (pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = '<database_name>';
где
<database_name>
— имя базы данных.
Остановка сегментов на хосте
Для обслуживания единичного хоста вы можете остановить все сегменты, работающие на нем:
$ gpstop --host <hostname>
где <hostname>
— имя сегмент-хоста.
Аргумент --host
нужно указывать в соответствии с колонкой hostname
таблицы gp_segment_configuration
.
В результате выполнения этой команды:
-
Для каждого основного сегмента, работающего на этом хосте, соответствующий зеркальный сегмент становится основным.
-
Основные и зеркальные сегменты на этом хосте останавливаются.
Сегменты, работающие на хосте, нельзя отключить с помощью gpstop --host
, если:
-
Зеркалирование сегментов отключено.
-
Зеркало основного сегмента, который будет остановлен, работает на том же хосте.
-
Основной сегмент, который будет остановлен, не синхронизирован со своим зеркалом.
-
На этом хосте работает основной или резервный мастер.
Перезапуск кластера
Для перезапуска кластера Greengage DB выполните gpstop
с параметром -r
на мастер-хосте:
$ gpstop -r
Эта команда останавливает все экземпляры, а затем запускает их заново.
Вы можете объединять несколько аргументов вызова в одну строку для краткости.
Например, использовать gpstop -arM fast
вместо gpstop -a -r -M fast
для перезагрузки кластера с остановкой в режиме fast
без подтверждения.
Перезагрузка конфигурации кластера
Чтобы применить изменения конфигурации без прерывания работы, выполните gpstop
с параметром -u
:
$ gpstop -u
Перезагрузка конфигурации используется, например, после изменения файлов конфигурации pg_hba.conf или postgresql.conf (только для параметров, изменяемых во время работы). Изменения применяются ко всем активным сессиям и не требуют переподключения.
Для применения параметров, которые нельзя изменить во время работы, требуется перезапуск с вызовом gpstop -r
.
Проверка состояния кластера
Для отображения сводной информации о состоянии кластера используйте утилиту gpstate
:
$ gpstate
Эта команда выводит общую информацию о кластере, например, суммарное число сегментов, процессов, ошибок и так далее.
[INFO]:-Starting gpstate with args: [INFO]:-local Greengage Version: 'postgres (Greengage Database) 6.28.0+dev.1.g8552cb80e5 build dev' [INFO]:-master Greengage Version: 'PostgreSQL 9.4.26 (Greengage Database 6.28.0+dev.1.g8552cb80e5 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit compiled on Mar 7 2025 05:20:53' [INFO]:-Obtaining Segment details from master... [INFO]:-Gathering data from segments... . [INFO]:-Greengage instance status summary [INFO]:----------------------------------------------------- [INFO]:- Master instance = Active [INFO]:- Master standby = smdw [INFO]:- Standby master state = Standby host passive [INFO]:- Total segment instance count from metadata = 16 [INFO]:----------------------------------------------------- [INFO]:- Primary Segment Status [INFO]:----------------------------------------------------- [INFO]:- Total primary segments = 8 [INFO]:- Total primary segment valid (at master) = 8 [INFO]:- Total primary segment failures (at master) = 0 [INFO]:- Total number of postmaster.pid files missing = 0 [INFO]:- Total number of postmaster.pid files found = 8 [INFO]:- Total number of postmaster.pid PIDs missing = 0 [INFO]:- Total number of postmaster.pid PIDs found = 8 [INFO]:- Total number of /tmp lock files missing = 0 [INFO]:- Total number of /tmp lock files found = 8 [INFO]:- Total number postmaster processes missing = 0 [INFO]:- Total number postmaster processes found = 8 [INFO]:----------------------------------------------------- [INFO]:- Mirror Segment Status [INFO]:----------------------------------------------------- [INFO]:- Total mirror segments = 8 [INFO]:- Total mirror segment valid (at master) = 8 [INFO]:- Total mirror segment failures (at master) = 0 [INFO]:- Total number of postmaster.pid files missing = 0 [INFO]:- Total number of postmaster.pid files found = 8 [INFO]:- Total number of postmaster.pid PIDs missing = 0 [INFO]:- Total number of postmaster.pid PIDs found = 8 [INFO]:- Total number of /tmp lock files missing = 0 [INFO]:- Total number of /tmp lock files found = 8 [INFO]:- Total number postmaster processes missing = 0 [INFO]:- Total number postmaster processes found = 8 [INFO]:- Total number mirror segments acting as primary segments = 0 [INFO]:- Total number mirror segments acting as mirror segments = 8 [INFO]:-----------------------------------------------------
Чтобы просмотреть детальную информацию по каждому сегменту, добавьте параметр -s
:
$ gpstate -s
Информация о кластере и мастер-экземпляре:
[INFO]:-Starting gpstate with args: -s [INFO]:-local Greengage Version: 'postgres (Greengage Database) 6.28.0+dev.1.g8552cb80e5 build dev' [INFO]:-master Greengage Version: 'PostgreSQL 9.4.26 (Greengage Database 6.28.0+dev.1.g8552cb80e5 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit compiled on Mar 7 2025 05:20:53' [INFO]:-Obtaining Segment details from master... [INFO]:-Gathering data from segments... [INFO]:----------------------------------------------------- [INFO]:--Master Configuration & Status [INFO]:----------------------------------------------------- [INFO]:- Master host = mdw [INFO]:- Master postgres process ID = 2118 [INFO]:- Master data directory = /data1/master/gpseg-1 [INFO]:- Master port = 5432 [INFO]:- Master current role = dispatch [INFO]:- Greengage initsystem version = 6.28.0+dev.1.g8552cb80e5 build dev [INFO]:- Greengage current version = PostgreSQL 9.4.26 (Greengage Database 6.28.0+dev.1.g8552cb80e5 build dev) on x86_64-unknown-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit compiled on Mar 7 2025 05:20:53 [INFO]:- Postgres version = 9.4.26 [INFO]:- Master standby = smdw [INFO]:- Standby master state = Standby host passive
Информация о каждом сегменте в следующем формате:
[INFO]:- Segment Info [INFO]:- Hostname = sdw1 [INFO]:- Address = sdw1 [INFO]:- Datadir = /data1/primary/gpseg0 [INFO]:- Port = 10000 [INFO]:- Mirroring Info [INFO]:- Current role = Primary [INFO]:- Preferred role = Primary [INFO]:- Mirror status = Synchronized [INFO]:- Replication Info [INFO]:- Current write location = 0/CFAB210 [INFO]:- Bytes remaining to send to mirror = 0 [INFO]:- Status [INFO]:- PID = 2757 [INFO]:- Configuration reports status as = Up [INFO]:- Database status = Up
Чтобы быстро увидеть потенциальные проблемы зеркалирования, вы можете вывести информацию о сегментах с такими проблемами с помощью опции -e
:
$ gpstate -e
[INFO]:----------------------------------------------------- [INFO]:-Segment Mirroring Status Report [INFO]:----------------------------------------------------- [INFO]:-Segments with Primary and Mirror Roles Switched [INFO]:- Current Primary Port Mirror Port [INFO]:- sdw3 10500 sdw4 10000 [INFO]:- sdw3 10501 sdw4 10001 [INFO]:----------------------------------------------------- [INFO]:-Unsynchronized Segment Pairs [INFO]:- Current Primary Port WAL sync remaining bytes Mirror Port [INFO]:- sdw3 10000 Unknown sdw4 10500 [INFO]:- sdw3 10001 Unknown sdw4 10501 [INFO]:- sdw3 10500 Unknown sdw4 10000 [INFO]:- sdw3 10501 Unknown sdw4 10001 [INFO]:----------------------------------------------------- [INFO]:-Downed Segments (may include segments where status could not be retrieved) [INFO]:- Segment Port Config status Status [INFO]:- sdw4 10500 Down Down in configuration [INFO]:- sdw4 10501 Down Down in configuration [INFO]:- sdw4 10000 Down Down in configuration [INFO]:- sdw4 10001 Down Down in configuration