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. Подготовка BiHA-кластера с proxima
- 27.2.7. Настройка SSL (необязательно)
- 27.2.8. Использование «магической» строки (необязательно)
- 27.2.2. Подготовка BiHA-кластера с нуля
Подготовка BiHA-кластера выполняется при помощи утилиты bihactl. Есть несколько сценариев использования утилиты:
Прежде чем начать подготовку BiHA-кластера, внимательно изучите Подраздел 27.2.1.
27.2.1. Предварительные требования и особенности #
Прежде чем начать подготовку BiHA-кластера, прочитайте следующую информацию и выполните необходимые действия:
Обеспечьте сетевую связность между всеми узлами вашего будущего BiHA-кластера.
Если необходима изоляция сети, при которой управляющий канал и передача WAL работают в одной сети, а клиентские сеансы с базой данных — в другой, настройте BiHA-кластер следующим образом:
Используйте имена узлов, которые разрешаются в IP-адреса сети для управляющего канала и WAL.
Добавьте IP-адрес для клиентских соединений в параметр конфигурации
listen_addresses
.
BiHA создаёт ряд вспомогательных файлов и устанавливает некоторые параметры Postgres Pro, чтобы обеспечить корректную работу. За подробной информацией обратитесь к Конфигурация Postgres Pro.
Чтобы избежать проблем с
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 использует собственный механизм, чтобы динамически изменять конфигурацию Postgres Pro. Некоторые параметры Postgres Pro управляются расширением biha и изменить их с помощью ALTER SYSTEM невозможно, так как они критичны для работы biha. К таким параметрам относятся:
За подробной информацией обратитесь к Конфигурация Postgres Pro.
В некоторых операционных системах управление сеансами пользователей может осуществляться менеджером служб 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_лидера
На этом этапе также можно включить SSL для служебных соединений в кластере. За подробной информацией обратитесь к разделу Настройка SSL.
Задайте пароль для роли
biha_replication_user
.Запускается утилита initdb, редактируются файлы postgresql.conf и pg_hba.conf.
При инициализации BiHA-кластера генерируется «магическая» строка. Об использовании «магической» строки читайте в Подразделе 27.2.8.
Запустите СУБД с помощью pg_ctl:
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.8.
Запустите СУБД с помощью pg_ctl:
pg_ctl start -D
каталог_PGDATA_последователя
-lфайл_журнала_последователя
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.3. Преобразование существующего кластера с потоковой репликацией в BiHA-кластер #
Преобразуйте существующий кластер Postgres Pro Enterprise 17 с потоковой репликацией и настроенным экземпляром базы данных в BiHA-кластер. В результате ведущий узел кластера станет лидером, а ведомые — последователями.
Преобразование ведущего узла в узел-лидер
Остановите существующий ведущий узел с помощью pg_ctl:
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_лидера
На этом этапе также можно включить SSL для служебных соединений в кластере. За подробной информацией обратитесь к разделу Настройка SSL.
Во время преобразования кластера генерируется «магическая» строка. За дополнительной информацией об использовании «магической» строки обратитесь к Подразделу 27.2.8.
Задайте пароль для роли
biha_replication_user
.Запустите СУБД с помощью pg_ctl:
pg_ctl start -D
каталог_PGDATA_лидера
-lфайл_журнала_лидера
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
Преобразование ведомого узла в узел-последователь
Убедитесь, что пароль роли
biha_replication_user
в файле паролей совпадает с паролем этой роли на узле-лидере.Остановите ведомый узел с помощью pg_ctl:
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.8.
Запустите СУБД с помощью pg_ctl:
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:
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.8.
Запустите СУБД с помощью pg_ctl:
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.8.
Запустите СУБД с помощью pg_ctl:
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С помощью pg_ctl запустите экземпляр Postgres Pro с настроенным узлом-рефери:
pg_ctl start -D
каталог_PGDATA_рефери
Проверьте статус узла в представлении biha.status_v:
SELECT * FROM biha.status_v;
27.2.6. Подготовка BiHA-кластера с proxima #
Чтобы расширить возможности отказоустойчивости функциональностью прокси-сервера и пула соединений, можно включить расширение proxima во время подготовки BiHA-кластера.
Во время инициализации BiHA-кластера с нуля в команде
bihactl
init укажите параметр --enable-proxima. Например:bihactl init \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_узла
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
--enable-proximaУтилита bihactl добавляет proxima в список shared_preload_libraries в файле postgresql.conf, создаёт файл
postgresql.proxima.conf
и включает его в файлpostgresql.biha.conf
.Так как последователи добавляются с помощью создания и восстановления резервной копии лидера, конфигурация proxima копируется на последователей так же, как и другие параметры конфигурации BiHA.
При добавлении узла-рефери конфигурация proxima не копируется на рефери.
Когда BiHA-кластер будет готов, вы сможете изменить параметры конфигурации proxima.
27.2.7. Настройка SSL (необязательно) #
При инициализации BiHA-кластера можно включить SSL для служебных соединений кластера с помощью параметра --use-ssl. Чтобы включить или отключить SSL в инициализированном BiHA-кластере, воспользуйтесь инструкцией Управление SSL.
Подготовка сертификата и ключа
С помощью утилиты
OpenSSL
сгенерируйте сертификат и закрытый ключ и сохраните их в каталоге/PGDATA/pg_biha
на каждом узле кластера:openssl req -x509 -newkey rsa:4096 -keyout
путь_к_ключу
-outпуть_к_сертификату
-sha256 -daysсрок_действия
-nodes -subj "/CN=домен_сертификата
"Например:
openssl req -x509 -newkey rsa:4096 -keyout /PGDATA/pg_biha/biha_priv_key.pem -out /PGDATA/pg_biha/biha_pub_cert.pem -sha256 -days 365 -nodes -subj "/CN=localhost"
Будут созданы следующие файлы:
biha_priv_key.pem
— закрытый ключ с доступом пользователя на чтение и запись (0600)biha_pub_cert.pem
— самоподписанный сертификат, выпущенный на указанный период времени и для указанного домена
Важно
Убедитесь, что для файлов сертификата и закрытого ключа вы использовали вышеуказанные имена, так как BiHA будет искать файлы именно по этим именам.
Включение SSL
При инициализации BiHA-кластера с помощью команды
bihactl
init укажите параметр --use-ssl:bihactl init \ --biha-node-id=1 \ --host=
узел_1
\ --port=порт_узла
\ --biha-port=порт_biha
\ --nquorum=количество_узлов
\ --pgdata=каталог_PGDATA_лидера
--use-sslЧтобы убедиться, что SSL включен, после завершения настройки BiHA-кластера с помощью команды
SHOW
проверьте, что для параметраbiha.use_ssl
установлено значениеtrue
:SHOW biha.use_ssl;
27.2.8. Использование «магической» строки (необязательно) #
«Магическая» строка — это специальная строка, которая автоматически генерируется при инициализации 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_последователя
Узел-последователь будет использовать закодированные данные из «магической» строки для подключения к узлу-лидеру.