Настройка зеркалирования в кластере
В этом разделе описано, как включить зеркалирование в кластере Greengage DB (на основе Greenplum).
Greengage DB обеспечивает отказоустойчивость кластера с помощью механизма зеркалирования. Каждый экземпляр кластера — сегмент или мастер — может иметь зеркало, которое хранит либо такие же данные (зеркальный сегмент), либо системный каталог (резервный мастер). Зеркала автоматически синхронизируются с соответствующими основными экземплярами. При отказе основного экземпляра его функции выполняет зеркало, обеспечивая целостность и доступность кластера.
Кластер Greengage DB можно инициализировать с зеркалами сразу, как описано в разделе Инициализация СУБД. Если кластер был изначально создан без зеркал, их можно добавить позже без остановки сервиса.
Для добавления зеркал используются следующие утилиты:
-
gpaddmirrors
— добавление зеркальных сегментов. -
gpinitstandby
— добавление резервного мастера.
Включение зеркалирования сегментов
Зеркалирование сегментов обеспечивает доступность данных в случае отказа сегмента. Если основной сегмент выходит из строя, система автоматически назначает его зеркало в качестве основного без необходимости ручного вмешательства.
Зеркалирование сегментов включается сразу для всего кластера.
Запуск утилиты gpaddmirrors
на мастер-хосте создает зеркала для всех сегментов и распределяет их по сегмент-хостам в соответствии с заданной (или используемой по умолчанию) политикой зеркалирования.
Инициализация зеркальных сегментов не требует остановки кластера. Однако репликация данных временно увеличивает нагрузку на сегмент-хосты. Чтобы минимизировать влияние на производительность, рекомендуется выполнять инициализацию зеркал в периоды с низкой нагрузкой.
Стандартная конфигурация зеркалирования
Greengage DB автоматически распределяет зеркальные сегменты по сегмент-хостам кластера. По умолчанию применяется следующая конфигурация зеркал:
-
Хосты зеркал: все существующие сегмент-хосты.
-
Политика зеркалирования:
grouped
(зеркала всех основных сегментов одного хоста размещаются вместе на другом хосте). -
Базовый порт для зеркал: базовый порт основных сегментов плюс
1000
. -
Каталоги данных: указываются во время создания зеркал.
Чтобы создать зеркальные сегменты на существующих хостах кластера:
-
Войдите на мастер-хост под пользователем
gpadmin
. -
Запустите
gpaddmirrors
:$ gpaddmirrors
При необходимости вы можете добавить опции для изменения конфигурации зеркал:
-
-p
— устанавливает смещение портов (port offset):$ gpaddmirrors -p 5000
ВАЖНОСмещение портов — это число, которое добавляется к номерам портов основных сегментов. Например, если основные сегменты используют порты от
10000
до10003
, а значение-p
равно5000
, то зеркальные сегменты займут порты от15000
до15003
.Смещение портов по умолчанию —
1000
. -
-s
— устанавливает политику зеркалированияspread
:$ gpaddmirrors -s
При использовании политики
spread
зеркала основных сегментов распределяются по хостам так, чтобы никакие два зеркала сегментов одного хоста не размещались на одном целевом хосте вместе. Для применения этой политики требуется количество хостов, превышающее количество сегментов на одном хосте. -
-m
— передает файл с каталогами данных зеркал:$ gpaddmirrors -m mirror_dirs
ВАЖНОКаталоги данных зеркал должны отличаться от каталогов данных основных сегментов.
В этом файле каждая строка должна содержать абсолютный путь к каталогу для хранения зеркального сегмента. Количество строк должно соответствовать количеству основных сегментов на хосте.
-
Четыре зеркальных сегмента на хосте, все в одном каталоге:
/data1/mirror /data1/mirror /data1/mirror /data1/mirror
Все зеркала будут храниться в каталогах /data1/mirror/gpseg<N>, где
<N>
— идентификатор сегмента. -
Отдельное расположение для каждого из четырех зеркальных сегментов на хосте:
/data1/mirror1 /data1/mirror2 /data1/mirror3 /data1/mirror4
Каждый указанный каталог будет содержать один вложенный каталог сегмента, например /data1/mirror1/gpseg<N>, /data1/mirror2/gpseg<M> и так далее.
-
-
-
(Опционально) Если файл с каталогами данных зеркал не был указан при вызове
gpaddmirrors
, введите пути к каталогам данных для каждого зеркального сегмента на хостах кластера:Enter mirror segment data directory location 1 of 2 >
Greengage DB подготовит конфигурацию зеркал на основе указанных параметров и выведет следующую информацию о каждом зеркале:
[INFO]:--------------------------------------------- [INFO]:-Mirror 1 of 8 [INFO]:--------------------------------------------- [INFO]:- Primary instance host = sdw1 [INFO]:- Primary instance address = sdw1 [INFO]:- Primary instance directory = /data1/primary/gpseg0 [INFO]:- Primary instance port = 10000 [INFO]:- Mirror instance host = sdw2 [INFO]:- Mirror instance address = sdw2 [INFO]:- Mirror instance directory = /data1/mirror/gpseg0 [INFO]:- Mirror instance port = 15000
-
Введите
y
и нажмитеEnter
, чтобы подтвердить создание зеркал:Continue with add mirrors procedure Yy|Nn (default=N):
После успешного создания зеркал будут выведены следующие строки:
[INFO]:-****************************************************************** [INFO]:-Mirror segments have been added; data synchronization is in progress. [INFO]:-Data synchronization will continue in the background. [INFO]:-Use gpstate -s to check the resynchronization progress. [INFO]:-******************************************************************
Пользовательская конфигурация зеркал
Если стандартная конфигурация зеркал не подходит для ваших задач, вы можете явно задать параметры каждого зеркального сегмента: хост, порт и каталог данных. Это позволяет разместить зеркала на отдельных хостах и тем самым снизить нагрузку на существующие хосты в случае отказа основного сегмента. Однако этот подход требует дополнительных ресурсов.
Перед созданием зеркал сегментов на хостах за пределами кластера подготовьте эти хосты для работы с Greengage DB, как описано в разделе Инициализация СУБД.
Для задания пользовательской конфигурации зеркал требуется файл с параметрами зеркалирования: хостами, портами и каталогами.
Вы можете создать шаблон файла конфигурации зеркалирования в интерактивном режиме с помощью gpaddmirrors
или подготовить его вручную в соответствии с описанной далее структурой.
Чтобы сгенерировать шаблон файла конфигурации зеркалирования:
-
Войдите на мастер-хост под пользователем
gpadmin
. -
Запустите
gpaddmirror
, указав имя создаваемого файла в параметре-o
:$ gpaddmirrors -o mirror_conf_file
При необходимости укажите смещение портов (
-p
), файл с расположением зеркал (-m
) и политику зеркалирования (-s
дляspread
):$ gpaddmirrors -o mirror_conf_file -p 2000 -m mirror_dirs
-
(Опционально) Если не был указан файл с расположением зеркал, введите пути к каталогам данных зеркал по одному в ответ на запрос:
Enter mirror segment data directory location 1 of 2 >
После успешного создания файла утилита выводит сообщение:
[INFO]:-Configuration file output to mirror_conf_file successfully.
Следующий файл — это шаблон, созданный для кластера с четырьмя сегмент-хостами — sdw1
, sdw2
, sdw3
и sdw4
— с политикой зеркалирования по умолчанию (grouped
).
0|sdw2|11000|/data1/mirror/gpseg0 1|sdw2|11001|/data1/mirror/gpseg1 2|sdw3|11000|/data1/mirror/gpseg2 3|sdw3|11001|/data1/mirror/gpseg3 4|sdw4|11000|/data1/mirror/gpseg4 5|sdw4|11001|/data1/mirror/gpseg5 6|sdw1|11000|/data1/mirror/gpseg6 7|sdw1|11001|/data1/mirror/gpseg7
Файл конфигурации зеркалирования состоит из строк следующей структуры:
content|address|port|datadir
Поле | Описание |
---|---|
content |
Уникальный идентификатор сегмента данных |
address |
Адрес хоста. Может совпадать со значением |
port |
TCP-порт, прослушиваемый сегментом БД |
datadir |
Физическое расположение каталога данных сегмента |
Сгенерированный шаблон файла содержит стандартную конфигурацию зеркал в соответствии с указанными параметрами.
Измените файл в соответствии с желаемой конфигурацией зеркал.
Например, чтобы разместить зеркала на других хостах, замените существующие адреса сегмент-хостов на адреса новых хостов.
Файл, приведенный ниже, создает зеркальные сегменты на новых хостах sdw5
, sdw5
, sdw7
и sdw8
:
0|sdw5|11000|/data1/mirror/gpseg0 1|sdw5|11001|/data1/mirror/gpseg1 2|sdw6|11000|/data1/mirror/gpseg2 3|sdw6|11001|/data1/mirror/gpseg3 4|sdw7|11000|/data1/mirror/gpseg4 5|sdw7|11001|/data1/mirror/gpseg5 6|sdw8|11000|/data1/mirror/gpseg6 7|sdw8|11001|/data1/mirror/gpseg7
Чтобы создать зеркала на основе полученного файла, используйте параметр -i
:
$ gpaddmirrors -i mirror_conf_file
Включение зеркалирования мастера
Зеркалирование мастера повышает отказоустойчивость кластера Greengage DB за счет резервного мастера (standby master) — дополнительного экземпляра, который хранит синхронизированную копию системного каталога. Резервный мастер работает в режиме горячего резерва: в случае отказа основного мастера он может заменить его, обеспечивая непрерывность работы.
Greengage DB не выполняет автоматическое переключение на резервный мастер при отказе основного.
Для активации резервного мастера вручную выполните gpactivatestandby
на его хосте.
Чтобы узнать больше, обратитесь к статье Восстановление мастера после сбоев.
Добавление резервного мастера
Если кластер был инициализирован без резервного мастера, его можно добавить в любой момент во время работы кластера.
Перед созданием резервного мастера убедитесь, что хост настроен для работы с Greengage DB, как описано в разделе Инициализация СУБД.
Чтобы создать резервный мастер на подготовленном хосте:
-
Войдите на активный мастер-хост под пользователем
gpadmin
. -
Выполните
gpinitstandby
на мастер-хосте, указав имя хоста резервного мастера в параметре-s
:$ gpinitstandby -s smdw
По умолчанию Greengage DB использует тот же порт и каталог данных для резервного мастера, что и для активного мастера. Эти параметры можно изменить с помощью параметров
-P
и-S
:$ gpinitstandby -s smdw -P 12000 -S /data2/master
Пользователь
gpadmin
должен иметь права на чтение и запись в указанный каталог данных резервного мастера.РЕКОМЕНДАЦИЯЕсли нет особых причин для изменения, рекомендуется использовать тот же порт и каталог данных, что и у текущего мастера.
Утилита выводит параметры будущего резервного мастера:
[INFO]:------------------------------------------------------ [INFO]:-Greengage standby master initialization parameters [INFO]:------------------------------------------------------ [INFO]:-Greengage master hostname = mdw [INFO]:-Greengage master data directory = /data1/master/gpseg-1 [INFO]:-Greengage master port = 5432 [INFO]:-Greengage standby master hostname = smdw [INFO]:-Greengage standby master port = 5432 [INFO]:-Greengage standby master data directory = /data1/master/gpseg-1 [INFO]:-Greengage update system catalog = On
-
Введите
y
, чтобы подтвердить инициализацию резервного мастера, и нажмитеEnter
:Do you want to continue with standby master initialization? Yy|Nn (default=N):
После успешной инициализации резервного мастера утилита выводит сообщение:
[INFO]:-Successfully created standby master on smdw
Если по какой-либо причине вы хотите создать резервный мастер на текущем мастер-хосте, укажите только порт и каталог данных. Они должны отличаться от используемых активным мастером.
$ gpinitstandby -P 6432 -S /data2/master
Замена существующего резервного мастера
Если в кластере уже есть резервный мастер и его необходимо перенести на другой хост, выполните следующие шаги:
-
Удалите существующий резервный мастер, выполнив
gpinitstandby
с параметром-r
:$ gpinitstandby -r
ВНИМАНИЕПосле этого шага кластер утратит отказоустойчивость, пока не будет инициализирован новый резервный мастер.
-
Инициализируйте новый резервный мастер на другом хосте:
$ gpinitstandby -s smdw2
Мониторинг состояния зеркалирования
В этом разделе перечислены способы проверки состояния зеркалирования в кластере.
Утилита gpstate
Вызов утилиты gpstate
с параметрами позволяет вывести информацию о зеркалировании в кластере:
-
gpstate -m
выводит список зеркальных сегментов и политику зеркалирования кластера:$ gpstate -m
Пример вывода:
[INFO]:-------------------------------------------------------------- [INFO]:--Current GPDB mirror list and status [INFO]:--Type = Group [INFO]:-------------------------------------------------------------- [INFO]:- Mirror Datadir Port Status Data Status [INFO]:- sdw2 /data1/mirror/gpseg0 11000 Passive Synchronized [INFO]:- sdw2 /data1/mirror/gpseg1 11001 Passive Synchronized [INFO]:- sdw1 /data1/mirror/gpseg2 11000 Passive Synchronized [INFO]:- sdw1 /data1/mirror/gpseg3 11001 Passive Synchronized [INFO]:--------------------------------------------------------------
Следующие значения указывают на работу зеркальных сегментов в назначенной роли и синхронизацию с основными сегментами:
-
Status = Passive
-
Data Status = Synchronized
-
-
gpstate -f
выводит информацию о резервном мастере:$ gpstate -f
Пример вывода:
[INFO]:-Standby master details [INFO]:----------------------- [INFO]:- Standby address = smdw [INFO]:- Standby data directory = /data1/master/gpseg-1 [INFO]:- Standby port = 5432 [INFO]:- Standby PID = 1310 [INFO]:- Standby status = Standby host passive [INFO]:-------------------------------------------------------------- [INFO]:--pg_stat_replication [INFO]:-------------------------------------------------------------- [INFO]:--WAL Sender State: streaming [INFO]:--Sync state: sync [INFO]:--Sent Location: 0/141D6D18 [INFO]:--Flush Location: 0/141D6D18 [INFO]:--Replay Location: 0/141D6D18 [INFO]:--------------------------------------------------------------
Следующие значения указывают на работу резервного мастера в своей роли и его синхронизацию с основным мастером:
-
Standby status = Standby host passive
-
WAL Sender State: streaming
-
Sync state: sync
-
Другие опции gpstate
, например -s
или -e
, позволяют получить более детальную информацию об аспектах зеркалирования.
Чтобы узнать больше о параметрах gpstate
, обратитесь к разделу Проверка состояния кластера.
Таблица gp_segment_configuration
Таблица gp_segment_configuration
содержит информацию о сегментах кластера, включая их роли: основные (role = 'p'
) и зеркальные (role = 'm'
).
SELECT * FROM gp_segment_configuration;
Результат запроса:
dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir ------+---------+------+----------------+------+--------+-------+----------+---------+----------------------- 1 | -1 | p | p | n | u | 5432 | mdw | mdw | /data1/master/gpseg-1 6 | -1 | m | m | s | u | 10000 | sdw1 | sdw1 | /data1/primary/gpseg0 2 | 0 | p | p | s | u | 10000 | sdw2 | sdw2 | /data1/primary/gpseg2 7 | 0 | m | m | s | u | 10000 | sdw3 | sdw3 | /data1/primary/gpseg4 3 | 1 | p | p | s | u | 10000 | sdw4 | sdw4 | /data1/primary/gpseg6 8 | 1 | m | m | s | u | 10001 | sdw1 | sdw1 | /data1/primary/gpseg1 4 | 2 | p | p | s | u | 10001 | sdw2 | sdw2 | /data1/primary/gpseg3 9 | 2 | m | m | s | u | 10001 | sdw3 | sdw3 | /data1/primary/gpseg5 5 | 3 | p | p | s | u | 10001 | sdw4 | sdw4 | /data1/primary/gpseg7 10 | 3 | m | m | s | u | 5432 | smdw | smdw | /data1/master/gpseg-1 (10 rows)
Активный и резервный мастера представлены строками с content = -1
.
SELECT * FROM gp_segment_configuration WHERE content = -1;
Результат запроса:
dbid | content | role | preferred_role | mode | status | port | hostname | address | datadir ------+---------+------+----------------+------+--------+------+----------+---------+----------------------- 1 | -1 | p | p | n | u | 5432 | mdw | mdw | /data1/master/gpseg-1 6 | -1 | m | m | s | u | 5432 | smdw | smdw | /data1/master/gpseg-1 (2 rows)
Если все экземпляры работают в своих предпочтительных ролях, количество строк с role = preferred_role
совпадает с числом экземпляров в кластере.
SELECT COUNT(*) FROM gp_segment_configuration WHERE role = preferred_role;
Результат запроса:
count ------- 10 (1 row)
Представление pg_stat_replication
Состояние зеркалирования также хранится в системном представлении pg_stat_replication
.
Оно содержит информацию о процессах, используемых для репликации данных между основными и зеркальными экземплярами сегментов и мастера.
Пример запроса:
SELECT gp_segment_id, client_addr, client_port, state, sync_state, sync_error
FROM gp_stat_replication;
Результат запроса:
gp_segment_id | client_addr | client_port | state | sync_state | sync_error ---------------+--------------+-------------+-----------+------------+------------ -1 | 10.92.41.13 | 34318 | streaming | sync | none 3 | 10.92.41.158 | 26458 | streaming | sync | none 2 | 10.92.41.158 | 16108 | streaming | sync | none 1 | 10.92.42.185 | 53158 | streaming | sync | none 0 | 10.92.42.185 | 64946 | streaming | sync | none (5 rows)