27.2. Подготовка BiHA-кластера #
- 27.2.1. Предварительные требования и особенности
- 27.2.2. Подготовка BiHA-кластера с нуля
- 27.2.3. Преобразование существующего кластера с потоковой репликацией в BiHA-кластер
- 27.2.4. Подготовка BiHA-кластера из существующего сервера баз данных
- 27.2.5. Подготовка узла-рефери в BiHA-кластере
- 27.2.6. Использование «магической» строки (необязательно)
- 27.2.2. Подготовка BiHA-кластера с нуля
Подготовка BiHA-кластера выполняется при помощи утилиты bihactl. Есть несколько сценариев использования утилиты:
Прежде чем начать подготовку BiHA-кластера, внимательно изучите Подраздел 27.2.1.
27.2.1. Предварительные требования и особенности #
Прежде чем начать подготовку BiHA-кластера, прочитайте следующую информацию и выполните необходимые действия:
Обеспечьте сетевую связность между всеми узлами вашего будущего BiHA-кластера.
Если необходима изоляция сети, при которой управляющий канал и передача WAL работают в одной сети, а клиентские сеансы с базой данных — в другой, настройте BiHA-кластер следующим образом:
Используйте имена узлов, которые разрешаются в IP-адреса сети для управляющего канала и WAL.
Добавьте IP-адрес для клиентских соединений в параметр конфигурации
listen_addresses
.
Чтобы избежать проблем с
biha-background-worker
, связанных с настройкой времени на узлах кластера, настройте синхронизацию времени на всех узлах.Не рекомендуется выполнять команды bihactl в каталоге
PGDATA
. Утилитаbihactl
может создавать файлыbiha_init.log
иbiha_add.log
в том каталоге, откуда запускается. Однако для корректного выполнения командbihactl
целевой каталогPGDATA
должен быть пустым.Пароль для роли
biha_replication_user
в файле паролей должен быть одинаковым на всех узлах кластера BiHA. Это необходимо для обеспечения связи между лидером и последователями. Пароль можно указать одним из следующих способов:Безопасный и рекомендуемый способ — добавить отдельную строку для каждого узла:
echo '
имя_узла
:порт
:biha_db:biha_replication_user:пароль
' >> ~/.pgpass echo 'имя_узла
:порт
:replication:biha_replication_user:пароль
' >> ~/.pgpassПростой способ — добавить одну строку для всех узлов:
echo '*:*:*:biha_replication_user:
пароль
' >> ~/.pgpass
Во время работы biha создаёт следующие служебные файлы в каталоге данных:
standby.signal — файл, при наличии которого узел запускается в режиме резервного сервера. Файл необходим для того, чтобы сделать расширение biha доступным только для чтения при запуске Postgres Pro. Файл удаляется с лидера, когда он переходит в состояние
LEADER_RW
.файлы
biha.state
иbiha.conf
— в каталогеpg_biha
, необходимые для сохранения внутреннего состояния и конфигурации расширения biha.
Во время работы biha использует собственный механизм, чтобы динамически изменять конфигурацию Postgres Pro. Некоторые параметры Postgres Pro управляются расширением biha и изменить их с помощью ALTER SYSTEM невозможно, так как они критичны для работы biha. К таким параметрам относятся:
Эти параметры хранятся в файле
pg_biha/biha.conf
, а также в разделяемой памяти процесса biha. Когда эти параметры изменяются, biha отправляет сигналSIGHUP
, чтобы проинформировать другие процессы об изменениях. Если в это время изменить какие-либо другие параметры и не перечитать конфигурацию, изменённые параметры могут быть перечитаны неожиданно.Postgres Pro ведёт себя вышеописанным образом, только когда расширение biha загружено и настроено, т.е. когда библиотека указана в переменной
shared_preload_libraries
и установлены необходимые параметры biha.*. В других случаях Postgres Pro работает, как обычно.При инициализации BiHA-кластера расширение biha изменяет конфигурацию Postgres Pro в postgresql.conf и pg_hba.conf. Изменения сначала вносятся в служебные файлы biha
postgresql.biha.conf
иpg_hba.biha.conf
, а затем обрабатываются сервером после указания следующих директив включения в postgresql.conf и pg_hba.conf соответственно:include 'postgresql.biha.conf' include "pg_hba.biha.conf"
В некоторых операционных системах управление сеансами пользователей может осуществляться менеджером служб systemd. В этом случае, если сервер запущен с использованием
pg_ctl
и управляется удалённо, имейте в виду, что при завершении SSH-сеанса все фоновые процессы, инициированные в нём, будут также завершены демоном systemd. Чтобы избежать такого поведения, выполните одно из следующих действий:Воспользуйтесь файлом службы
postgrespro-ent-17
менеджера systemd для запуска сервера СУБД на узле кластера.Измените конфигурацию службы управления сеансами пользователей
systemd-logind
в файле/etc/systemd/logind.conf
, а именно установите значениеno
для параметраKillUserProcesses
.
27.2.2. Подготовка BiHA-кластера с нуля #
Чтобы подготовить BiHA-кластер с нуля, выполните следующие действия.
Предварительные требования
На всех узлах будущего кластера установите пакет
postgrespro-ent-17-contrib
. Не создавайте экземпляры баз данных.Убедитесь, что вы выполняете команду
bihactl
от имени пользователя, который будет запускать сервер Postgres Pro Enterprise.Например, если вы запускаете сервер как пользователь
postgres
, командаbihactl
должна также выполняться пользователемpostgres
.Если вы планируете использовать pg_probackup с biha, установите пакет
pg-probackup-ent-17
.
Инициализация кластера
Используйте команду bihactl
init, чтобы инициализировать кластер и создать узел-лидер.
Выполните команду
bihactl
init с необходимыми параметрами:bihactl init \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_узла
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
Запускается утилита initdb, редактируются файлы postgresql.conf и pg_hba.conf.
При инициализации BiHA-кластера генерируется «магическая» строка. Об использовании «магической» строки читайте в Подразделе 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_лидера
-lфайл_журнала_лидера
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
Добавление узла-последователя
Убедитесь, что узел-лидер находится в состоянии
LEADER_RO
илиLEADER_RW
.Убедитесь, что пароль роли
biha_replication_user
в файле паролей совпадает с паролем этой роли на узле-лидере.Выполните команду
bihactl
add с необходимыми параметрами:bihactl add \ --biha-node-id=2 \ --host=
узел_2
\ --port=порт_узла
\ --biha-port=порт_biha
\ --use-leader "host=узел_лидер
port=порт_лидера
biha-port=порт_лидера_biha
" \ --pgdata=каталог_PGDATA_последователя
Создаётся резервная копия узла-лидера при помощи pg_basebackup или pg_probackup в зависимости от значения, переданного в параметре
--backup-method
. Также редактируются файлы postgresql.conf и pg_hba.conf.Примечание
При выполнении этого процесса все файлы копируются с лидера на новый узел. Чем больше размер базы данных, тем дольше времени требуется для добавления последователя.
Также можно добавить данные для подключения к узлу-лидеру с помощью «магической» строки. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_последователя
-lфайл_журнала_последователя
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.3. Преобразование существующего кластера с потоковой репликацией в BiHA-кластер #
Преобразуйте существующий кластер Postgres Pro Enterprise 17 с потоковой репликацией и настроенным экземпляром базы данных в BiHA-кластер. В результате ведущий узел кластера станет лидером, а ведомые — последователями.
Предварительные требования
Если текущий кластер синхронный, то есть у него задано значение параметра synchronous_standby_names (например, synchronous_standby_names=walreceiver
), выполните следующие шаги перед конвертацией в BiHA-кластер:
Сбросьте параметр
synchronous_standby_names
:ALTER SYSTEM RESET synchronous_standby_names;
Из файла postgresql.conf и всех его директив включения, вручную удалите значения
synchronous_standby_names
.
Преобразование ведущего узла в узел-лидер
Остановите существующий ведущий узел:
pg_ctl stop -D
каталог_PGDATA_ведущего_узла
Выполните команду
bihactl
init с параметром--convert
:bihactl init --convert \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_PostgresPro
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
Во время преобразования кластера генерируется «магическая» строка. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_лидера
-lфайл_журнала_лидера
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
Преобразование ведомого узла в узел-последователь
Убедитесь, что пароль роли
biha_replication_user
в файле паролей совпадает с паролем этой роли на узле-лидере.Остановите ведомый узел:
pg_ctl stop -D
каталог_PGDATA_ведомого_узла
Выполните команду
bihactl
add с параметром--convert-standby
:bihactl add --convert-standby \ --biha-node-id=2 \ --host=
узел_2
\ --port=порт_PostgresPro
\ --biha-port=5435 \ --use-leader "host=адрес_узла_лидера
port=порт_лидера
biha-port=порт_лидера_biha
" \ --pgdata=каталог_PGDATA_последователя
При преобразовании существующего ведомого узла в узел-последователь biha создаёт файлы
икаталог_PGDATA_последователя
/pg_biha/biha.conf
, необходимые для подключения узла к кластеру, и редактирует файлы postgresql.conf и pg_hba.conf.каталог_PGDATA_последователя
/pg_biha/biha.stateТакже можно добавить данные для подключения к узлу-лидеру с помощью «магической» строки. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_последователя
-lфайл_журнала_последователя
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.4. Подготовка BiHA-кластера из существующего сервера баз данных #
Если существующий сервер Postgres Pro Enterprise 17 с настроенной базой данных состоит только из одного узла, вы можете преобразовать его в узел-лидер, а затем добавить остальные узлы в BiHA-кластер с помощью команды bihactl
add.
Преобразование существующего узла в узел-лидер
Остановите узел:
pg_ctl stop -D
каталог_PGDATA_сервера
Выполните команду
bihactl
init с параметром--convert
:bihactl init --convert \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_PostgresPro
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
Редактируются файлы postgresql.conf и pg_hba.conf.
Во время преобразования узла генерируется «магическая» строка. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_лидера
-lфайл_журнала_лидера
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
Добавление узла-последователя
Убедитесь, что узел-лидер находится в состоянии
LEADER_RO
илиLEADER_RW
.Убедитесь, что пароль роли
biha_replication_user
в файле паролей совпадает с паролем этой роли на узле-лидере.Выполните команду
bihactl
add с необходимыми параметрами:bihactl add \ --biha-node-id=2 \ --host=
узел_2
\ --port=порт_узла
\ --biha-port=порт_biha
\ --use-leader "host=адрес_узла_лидера
port=порт_лидера
biha-port=порт_biha_лидера
" \ --pgdata=каталог_PGDATA_последователя
Создаётся резервная копия узла-лидера при помощи pg_basebackup или pg_probackup в зависимости от значения, переданного в параметре
--backup-method
. Также редактируются файлы postgresql.conf и pg_hba.conf.Также можно добавить данные для подключения к узлу-лидеру с помощью «магической» строки. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.6.
Запустите СУБД:
pg_ctl start -D
каталог_PGDATA_последователя
-lфайл_журнала_последователя
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.5. Подготовка узла-рефери в BiHA-кластере #
Узел-рефери участвует в выборах и помогает разрешить проблемы разделения кластера.
Примечание
При добавлении в кластер узла-рефери можно использовать только pg_basebackup.
На узел-рефери копируются только база данных
biha_db
и системные таблицы. База данныхpostgres
и пользовательские данные не копируются.
Чтобы подготовить узел-рефери:
Выполните команду
bihactl
add с соответствующим значением параметра--mode
:bihactl add \ --biha-node-id=3 \ --host=
узел_3
\ --port=порт_узла
\ --biha-port=порт_biha
\ --use-leader "host=адрес_узла_лидера
port=порт_лидера
biha-port=порт_лидера_biha
" \ --pgdata=каталог_PGDATA_рефери
\ --mode=refereeили
bihactl add \ --biha-node-id=3 \ --host=
узел_3
\ --port=порт_узла
\ --biha-port=порт_biha
\ --use-leader "host=адрес_узла_лидера
port=порт_лидера
biha-port=порт_лидера_biha
" \ --pgdata=каталог_PGDATA_рефери
\ --mode=referee_with_walЗапустите экземпляр Postgres Pro с настроенным узлом-рефери:
pg_ctl start -D
каталог_PGDATA_рефери
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.6. Использование «магической» строки (необязательно) #
«Магическая» строка — это специальная строка, которая автоматически генерируется при инициализации BiHA-кластера. «Магическая» строка используется в скриптах подготовки BiHA-кластера. Строка содержит данные, необходимые для подключения узлов-последователей к узлу-лидеру.
Вы можете использовать «магическую» строку, чтобы при добавлении узлов-последователей не вводить данные для подключения к узлу-лидеру вручную.
Далее приведён пример использования «магической» строки:
При инициализации кластера перенаправьте вывод
bihactl
в файл:bihactl init \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_узла
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
> /tmp/magic-fileПри добавлении узла-последователя выполните следующие действия:
Установите переменную окружения:
export MAGIC_STRING="$(cat /tmp/magic-file)"
Добавьте параметр
--magic-string
вbihactl
add:bihactl add \ --biha-node-id=2 \ --host=
узел_2
\ --port=порт_узла
\ --biha-port=порт_biha
\ --magic-string=$MAGIC_STRING
\ --pgdata=каталог_PGDATA_последователя
Узел-последователь будет использовать закодированные данные из «магической» строки для подключения к узлу-лидеру.