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

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

Ключ

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

Оглавление


Информация

Данная статья является частью статьи: Развертывание двухузлового кластера pacemaker и применима в рамках указанной статьи.

Оглавление


Информация
titleДанная статья применима к:




Предупреждение

Для работы в кластере с защищенной СУБД postgresql  с использованием МРД (см. Уровень конфиденциальности, категории конфиденциальности и целостность: что есть что, и как с этим работать?) необходимо использовать специальный агент ocf:astra:pgsql. Этот агент входит в состав Astra Linux Special Edition x.7 начиная с  оперативного обновления БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3)

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


Введение

Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker
Далее в созданном кластере pacemaker создается отказоустойчивая кластерная служба СУБД с репликацией данных между узлами.
Настройка и тестирование аутентификации пользователей и работы МРД в данной статье не рассматривается и не тестируется.

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

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

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

Для Astra Linux Special Edition x.7:

Command
sudo apt install postgresql

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

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

    -11

    или, в зависимости от подключенных репозиториев и установленных оперативных обновлений и при отсутствии необходимости использовать МРД:

    Command
    sudo apt install postgresql-14

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

  3. В Astra Linux Common Edition :

    Command
    sudo apt install postgresql-astra

Подготовка данных для тестирования

Информация

 Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):Подготовка данных для тестирования выполняется на каждом узле кластера.

  1. будет установлена СУБД PostgreSQL версии 9.6 без встроенной защиты.

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

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

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

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

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


  2. В конфигурационном файле /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.

Синхронизация узлов кластерной службы postgresql

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

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

    Перейти в каталог /tmp:

    Command
    cd /tmp

    Создать базу данных cluster:

    Command
    sudo -u postgres createdb cluster

    Создать в базе данных таблицу info:

    Command
    sudo -u postgres psql -d cluster -c "CREATE TABLE info (text varchar(80));"
    Добавить в таблицу запись, содержащую имя сервера
    rm -rf /var/lib/postgresql/<номер_версии>/<имя_кластера>/*


  2. Действуя от имени служебного пользователя postgres создать резервную копию данных другого узла:
    1. При работе в Astra Linux Special Edition x.7:

      Command
      sudo -u postgres
    psql -d cluster -c "INSERT INTO info VALUES ('Test DB - $(hostname)');"Задать пароль пользователю СУБД PostgreSQL (для примера использован пароль 123)
    1. pg_basebackup -h 192.168.23.100 -D /var/lib/postgresql/<номер_версии>/<имя_кластера> -P


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

      Command
      sudo -u postgres
    psql -c "ALTER USER postgres WITH PASSWORD '123';"

    Разрешить СУБД PostgreSQL принимать внешние подключения:

    Commandsudo sed -i '/^listen_addresses/s/localhost/*/' /etc/
    1. pg_basebackup -h 192.168.23.100 -D /var/lib/postgresql/<номер_версии>/
    main/postgresql.conf
    1. <имя_кластера> -P --xlog


  3. В дальнейшем службой postgresql будет управлять кластер pacemaker. На всех узлах отключить автоматический запуск службы postgresql при перезагрузке ОС и остановить службу

    Так как в дальнейшем работой сервиса будет управлять Corosync, следует исключить агента из автоматической загрузки

    :

    Command
    sudo systemctl disable postgresql
  4. Перезапустить кластер СУБД main:

    Command
    sudo pg_ctlcluster <номер_версии> main restart

    Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL.

Подключение

  1. sudo systemctl stop postgresql


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

  1. Добавить кластерную службу PostgreSQL СУБД как ресурс с именем Databasepsql:

    1. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с установленным оперативным обновлением БЮЛЛЕТЕНЬ № 2022-1110SE17 (оперативное обновление 1.7.3):

      Command

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

      подробнее см. man pcs и man ocf_astra_psql.

    2. Для более ранних обновлений или в случаях, когда поддержка МРД в кластерных службах не требуется:

      Command

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

      Где <номер_версии> - 9.6, 11 или 14 в зависимости от используемой версии PostgreSQL;

  2. Установить ограниченияпараметры службы:
    1. "Ресурс Database должен работать на узле, где размещен ClusterIP"Объявить ресурс "продвигаемым" (promotable). Такие ресурсы могут переключаться между двумя режимами работы - master и slave:

      Command
      sudo pcs constraint colocation add Database with ClusterIP INFINITYresource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true


    2. Объявить зависимости от других кластерных ресурсов"Сначала запускается ClusterIP, затем Database":

      Command
      sudo pcs constraint order ClusterIP then Database

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

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

Подготовка теста

На клиентской машине, предназначенной для тестирования:

    1. colocation add ClusterIP with master pgsql-clone INFINITY


  1. Проверить статус службы (может понадобиться некоторое время для полного запуска службы)Установить клиентский пакет СУБД PostgreSQL:

    Command
    sudo apt install postgresql-clientpcs status

    Пример вывода командыСоздать сценарий test-request.sh следующего содержания:

    Блок кода
    languagebash
    #!/bin/sh
    while true ; do
     psql postgresql://postgres:123@192.168.23.100/cluster -tc "SELECT text FROM info;" | xargs echo
     sleep 1s
    done

    Установить созданному файлу сценария права на исполнение

    Command
    chmod +x test-request.sh

    Запустить сценарий:

    Command
    ./test-request.sh

    После запуска сценарий будет отправлять запрос кластеру 1 раз в секунду и выводить полученное содержимое на экран.
    Если в данный момент ресурс ClusterIP размещен на узле 1, то вывод сценарий будет таким:

    Блок кода
    Test DB - pcmk-1
    Test DB - pcmk-1
    Test DB - pcmk-1
    Test DB - pcmk-1
    Test DB - pcmk-1
    Test DB - pcmk-1

Отключение узла кластера от сети

Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:

Command
sudo pcs status resources

На узле с кластерными ресурсами отключить сетевое соединение:

Command
sudo nmcli c d path 1

Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Например, если кластерные ресурсы располагались на узле 1, то после отключения узла 1 от сети, ресурсы переместятся на узел 2.

Блок кода
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-1
Test DB - pcmk-2
Test DB - pcmk-2

Включить сетевое соединение на отключенном от сети узле:

Command
sudo nmcli c u path 1
  • Дождаться возвращение узла в кластер. После возвращения узла в кластер выполненная на любом из узлов команда

    Command
    sudo pcs status

    должна вывести:

    Блок кода
    Online: [ pcmk-1 pcmk-2 ]

    Если вывод команды на разных узлах различается - значит узел еще не вернулся в кластер.

    1. 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


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

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

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

    1. На мастере создать тестовую базу данных test_db:

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


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

      Command
      sudo -u postgres psql -l


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

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


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

      Command
      sudo pcs status

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

      Блок кода
      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
      


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

    1. Выполнить синхронизацию данных с действующего мастера.
    2. Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:

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


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

    Полное выключение узла кластера

      Найти узел кластера, на котором размещены ресурсы, выполнив команду на любом узле:

      Command
      sudo pcs status resources

      Выключить узел с кластерными ресурсами, перезагрузив его:

      Command
      sudo reboot

      Кластерные ресурсы мигрируют на другой узел кластера и вывод сценария test-request.sh изменится. Если кластерные ресурсы располагались на узле 2, то после выключения узла 2 ресурсы переместятся на узел 1.

      Блок кода
      Test DB - pcmk-2
      Test DB - pcmk-2
      Test DB - pcmk-2
      Test DB - pcmk-1
      Test DB - pcmk-1
      Test DB - pcmk-1
      Когда выключенный узел загрузится вернуть его в кластер, выполнив на нем команду:
    1. Command
      sudo pcs cluster start