Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи.
Данная статья применима начиная с:
- Astra Linux Special Edition РУСБ.10015-01 и РУСБ.10015-10 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3)
- Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3)
- Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1121SE47 (оперативное обновление 4.7.3)
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20221220SE16 (оперативное обновление 12)
Для работы в кластере с защищенной СУБД postgresql с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) необходимо использовать специальный агент ocf:astra:pgsql. Этот агент входит в состав Astra Linux Special Edition x.7 начиная с оперативного обновления БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3).
Для работы без использования МРД можно использовать обычный для 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:
- В Astra Linux Special Edition x.7 будет установлена защищенная СУБД PostgreSQL версии 11.
В Astra Linux Special Edition, выпущенных до обновления x.7, будет установлена защищенная СУБД PostgreSQL версии 9.6.
В 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
где 192.168.23.101/32 и 192.168.23.102/32 - IP-адреса узлов ранее подготовленного кластера pacemaker.
Далее предполагается, что узел 192.168.23.101/32 назначается ведущим (master), а узел 192.168.23.102/32 - ведомым (slave).
Синхронизация узлов кластерной службы postgresql
Выполнить синхронизацию данных между узлами кластерной службы postgresql, для чего на подчиненном узле (на всех подчиненных узлах):
Действуя от имени служебного пользователя postgres удалить содержимое кластера СУБД:
sudo -u postgres rm -rf /var/lib/postgresql/<номер_версии>/<имя_кластера>/*- Действуя от имени служебного пользователя postgres создать резервную копию ведущего узла. При этом обращение к ведущему узлу выполняется по адресу кластера pacemaker (192.168.23.100):
При работе в Astra Linux Special Edition x.7:
sudo -u postgres pg_basebackup -h 192.168.23.100 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -PПри работе в Astra Linux, выпущенных до очередного обновления x.7:
sudo -u postgres pg_basebackup -h 192.168.23.100 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P --xlog
В дальнейшем службой postgresql будет управлять кластер pacemaker. Для исключения конфликтов между кластером и службой systemd на всех узлах (включая ведущий) отключить автоматический запуск службы postgresql при перезагрузке ОС и остановить службу:
sudo systemctl disable postgresql
sudo systemctl stop postgresql
Создание кластерного ресурса
Добавить кластерную службу СУБД как ресурс с именем psql. Для этого на ведущем узле:
Выполнить команду создания ресурса:
Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):
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.Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:
sudo pcs resource create Database ocf:heartbeat:pgsql \Где <номер_версии> - 9.6 или 11 в зависимости от используемой версии PostgreSQL;
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"
- Установить параметры службы:
- Для Astra Linux Special Edition x.7:
Объявить ресурс "продвигаемым" (promotable). Такие ресурсы могут переключаться между двумя режимами работы - master и slave:
sudo pcs resource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=trueОбъявить зависимости от других кластерных ресурсов:
pcs constraint colocation add ClusterIP with master pgsql-clone INFINITY
- Для Astra Linux, выпущенных до очередного обновления x.7:
- Для Astra Linux Special Edition x.7:
Проверить статус службы (может понадобиться некоторое время для полного запуска службы):
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:
sudo -u postgres psql -c "create database test_db;"Убедиться, что созданная база данных появилась на ведомом сервере:
sudo -u postgres psql -l
Тестирование отказоустойчивости
Выключить действующий ведущий сервер.
Проверить статус кластера на ведомом узле:
sudo pcs statusВ вывод команды должно быть указано, что узел стал ведущим (master). Пример вывода команды: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
Восстановление сбойного узла
Для восстановления сбойного узла выполнить на этом узле следующие действия:
- Выполнить синхронизацию данных с действующим ведущим сервером. См. Синхронизация узлов кластерной службы postgresql.
Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:
sudo rm /var/lib/pgsql/tmp/PGSQL.lockЗапустить кластер:
sudo pcs cluster start