Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Опубликованная версия статьи:

...

Оглавление

Информация
titleДанная статья применима начиная с:
Предупреждение

При работе с защищенной СУБД postgresql с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) рекомендуется использовать специальный агент ocf:astra:pgsql. Этот агент доступен в составе:

Для работы без использования МРД и для работы в более ранних обновлениях Astra Linux соедует использовать обычный для Linux агент ocf:heartbeat:pgsql.

Введение

Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker.
В рамках подготовки кластера созданы два узла кластера с адресами 192.168.23.101/32 и 192.168.23.102/32, а сам кластер имеет адрес 192.168.23.100.
Далее в созданном кластере pacemaker создается отказоустойчивая кластерная служба СУБД PostgreSQL с репликацией данных между узлами. В процессе настройки один из узлов назначается ведущим (master), второй (остальные) — подчиненным (slave). При отказе ведущего узла подчиненный узел автоматически становится ведущим.
Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется. См.:

Установка пакетов

Информация
Установка пакетов выполняется на каждом узле кластера.

Установить метапакет postgresql:

Command
sudo apt install postgresql

При установке метапакета postgresql:

  1. В Astra Linux Special Edition x.7 будет установлена защищенная СУБД PostgreSQL версии 11.
  2. В Astra Linux Special Edition, выпущенных до обновления x.7, будет установлена защищенная СУБД PostgreSQL версии 9.6.

  3. В Astra Linux Common Edition будет установлена СУБД PostgreSQL версии 9.6 без встроенной защиты.

При установке СУБД будет создан кластер СУБД (не путать с кластером pacemaker) с именем main.

Настройка СУБД postgresql

Для настройки работы СУБД postgesql проверить указанные ниже параметры и привести их к указанным значениям (добавить в случае отсутствия):

В конфигурационном файле СУБД /etc/postgresql/<номер_версии>/<имя_кластера_СУБД>/postgresql.conf:

Блок кода
listen_addresses = '*'
wal_level = replica
wal_keep_segments = 32

В конфигурационный файл /etc/postgresql/<номер_версии>/<имя_кластера>/pg_hba.conf добавить строки:

Блок кода
host    replication     postgres         192.168.23.101/32       trust
host    replication     postgres         192.168.23.102/32       trust

...

Для того, чтобы внесенные изменения вступили в силу, перезапустить службу postgresql:

Command

sudo systemctl restart postgresql

Далее предполагается, что узел 192.168.23.101/32 назначается ведущим (master), а узел 192.168.23.102/32 - ведомым (slave).

...

Выполнить синхронизацию данных между узлами кластерной службы postgresql, для чего на подчиненном узле (на всех подчиненных узлах):

Действуя от имени пользователя postgres удалить содержимое кластера СУБД:

Command

sudo -u postgres sh -c "rm -rf /var/lib/postgresql/*/main/*"

...

При работе в Astra Linux Special Edition x.7:

Command
sudo -u postgres pg_basebackup -h 192.168.23.101 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P

При работе в Astra Linux, выпущенных до очередного обновления x.7:

Command
sudo -u postgres pg_basebackup -h 192.168.23.101 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P --xlog

В дальнейшем службой postgresql будет управлять кластер pacemaker. Для исключения конфликтов между кластером и службой systemd на всех узлах (включая ведущий) отключить автоматический запуск службы postgresql при перезагрузке ОС и остановить службу:

Command
sudo systemctl disable postgresql
sudo systemctl stop postgresql

Создание кластерного ресурса

Добавить кластерную службу СУБД как ресурс с именем pgsql. Для этого на ведущем узле:

Выполнить команду создания ресурса (в качестве номера версии использовать значения 9.6 или 11 в соответствии с используемой версией PostgreSQL). Имя создаваемого ресурса — pgsql. Команды:

В случаях, если требуется (или, возможно, потребуется в будущем) работа с поддержкой МРД:

Command

sudo pcs resource create pgsql ocf:astra:pgsql \
pgversion="<номер_версии>" \
rep_mode="sync" \
master_ip="192.168.23.100" \
node_list="pcmk-1 pcmk-2"

Подробное описание параметров см. man pcs и man ocf_astra_psql. Основные параметры:

...

В случаях, если поддержка МРД не требуется (в том числе в Astra Linux Common Edition) вместо агента ocf:astra:pgsql можно использовать агент ocf:heartbeat:pgsql. При этом дополнительно нужно будет вручную определить параметры создаваемого ресурса:

Command

sudo pcs resource create pgsql ocf:heartbeat:pgsql \
pgctl="/usr/lib/postgresql/<номер_версии>/bin/pg_ctl" \
pgdata="/var/lib/postgresql/<номер_версии>/main" \
config="/etc/postgresql/<номер_версии>/main/postgresql.conf" \
socketdir="/var/run/postgresql/" \
op monitor interval=1min \
rep_mode="sync" \
master_ip="192.168.23.100" \
node_list="pcmk-1 pcmk-2"

...

Объявить ресурс pgsql "продвигаемым" (promotable) и создать вторичный ресурс. Такие ресурсы могут переключаться между двумя режимами работы - master и slave:

Command
sudo pcs resource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true

В примере приведена форма команды без явного указания имени вторичного ресурса. При этом будет автоматически использовано имя <имя_ресурса>-clone (в данном примере - pgsql-clone).

Объявить зависимости от других кластерных ресурсов:

Command
sudo pcs constraint colocation add ClusterIP with master pgsql-clone INFINITY

...

Объявить мастер-ресурс:

Command
sudo pcs resource master mspgsql pgsql master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

где:

  • mspgsql — имя мастер-ресурса, предоставляющего доступ к активному ведущему серверу;

  • pgsql — ранее созданный ресурс СУБД.

Объявить зависимости от других кластерных ресурсов:

Command
sudo pcs constraint colocation add ClusterIP with master mspgsql INFINITY

Запустить кластер:

Command

sudo pcs cluster start --all

Проверить статус службы (может понадобиться некоторое время для полного запуска службы):

Command
sudo pcs status

Пример вывода команды:

Блок кода
Cluster name: astracluster
Stack: corosync
Current DC: pcmk-1 (version 2.0.1-9e909a5bdd) - partition with quorum
Last updated: Sat Mar 11 18:40:21 2023
Last change: Sat Mar 11 18:39:28 2023 by root via crm_attribute on pcmk-1
 
2 nodes configured
3 resources configured
 
Online: [ pcmk-1 pcmk-2 ]
 
Full list of resources:
 
 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-1
 Clone Set: pgsql-clone [pgsql] (promotable)
     Masters: [ pcmk-1 ]
     Slaves: [ pcmk-2 ]
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

Тестирование

Тестирование должно продемонстрировать отказоустойчивость созданного кластера. Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.

Тестирование репликации

На ведущем узле создать тестовую базу данных test_db:

Command
sudo -u postgres psql -c "create database test_db;"

Убедиться, что созданная база данных появилась на ведомом сервере:

Command
sudo -u postgres psql -l

Тестирование отказоустойчивости

...

Выключить действующий ведущий сервер.

Проверить статус кластера на ведомом узле:

Command
sudo pcs status

В выводе команды должно быть указано, что узел выводится из эксплуатации (demoting). Пример вывода команды:

Блок кода
Cluster name: astracluster
Stack: corosync
Current DC: pcmk-1 (version 2.0.1-9e909a5bdd) - partition with quorum
Last updated: Sun Mar 12 15:17:55 2023
Last change: Sun Mar 12 15:12:38 2023 by root via crm_attribute on pcmk-1
 
2 nodes configured
3 resources configured
 
Online: [ pcmk-1 pcmk-2 ]
 
Full list of resources:
 
 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-2
 Clone Set: pgsql-clone [pgsql] (promotable)
     pgsql      (ocf::astra:pgsql):     Demoting pcmk-1
     Slaves: [ pcmk-2 ]
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

После завершения переключения кластера мастером становится второй сервер:

Блок кода
Online: [ pcmk-1 pcmk-2 ]
 
Full list of resources:
 
 ClusterIP      (ocf::heartbeat:IPaddr2):       Started pcmk-2
 Clone Set: pgsql-clone [pgsql] (promotable)
     Masters: [ pcmk-2 ]
     Stopped: [ pcmk-1 ]
 
Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

Восстановление сбойного узла

Для восстановления сбойного узла выполнить на этом узле следующие действия:

...

Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:

Command
sudo rm /var/lib/pgsql/tmp/PGSQL.lock

Запустить кластер:

Command
sudo pcs cluster start

После перезапуска сбойного узла мастер-сервером останется работавший узел, а перезапущенный узел получит статус подчиненного:

...

 Развертывание двухузлового кластера pacemaker