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

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

Ключ

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


Информация

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

Оглавление


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



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

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

  • Astra Linux Special Edition x.7 и Astra Linux Special Edition РУСБ.10015
-16 исп. 1 и исп. 2
10265
  • 10015-01 (очередное обновление
8.1)
  • Astra Linux Common Edition 2.12
  • Для работы без использования МРД и для работы в более ранних обновлениях Astra Linux соедует использовать обычный для Linux агент ocf:heartbeat:pgsql.


    Введение

    Предполагается, что дальнейшие действия выполняются на ранее подготовленном кластере pacemaker. См. статью Развертывание двухузлового кластера pacemaker.
    В рамках подготовки кластера созданы два узла кластера с адресами 192.168.23.101/32 и

    Параметры стенда

    Параметры сети

    Сеть

    192.168.23.

    0/24;Адрес маршрутизатора (шлюза) сети

    102/32, а сам кластер имеет адрес 192.168.23.100.

    1;


  • Предполагается, что в сети отсутствует служба DNS, поэтому адреса узлов задаются с помощью файла /etc/hosts.
  • Параметры хостов

    Для развертывания кластера используются два подсоединенных к сети компьютера с установленной ОС Astra Linux. Каждый из этих компьютеров будет выполнять роль узла кластера, поэтому далее они будут называться Узел 1 и Узел 2. Для тестирования отказоустойчивости используется рабочая станция, подключенная к той же сети.

    ПараметрУзел 1Узел 2Имя узлаpcmk-1pcmk-2Статический IP-адрес узла192.168.23.101192.168.23.102

    Дополнительно в качестве IP-адреса кластера будет использован адрес 192.168.23.100. IP-адрес рабочей станции, с помощью которой будет выполняться тестирование, неважен.

    Настройка стенда

    Настройка сетевых подключений

    Узлам рекомендуется присвоить статические адреса. Если на узлах кластера для управления сетевыми подключениями используется NetworkManager настройку можно выполнить с помощью графического инструмента или из командной строки командами:

    Узел 1Узел 2

    Присвоить узлу статический IP-адрес 192.168.23.101:

    Command
    sudo nmcli c d path 1
    sudo nmcli c m path 1 ip4 192.168.23.101/24 gw4 192.168.23.1
    sudo nmcli c m path 1 ipv4.method manual
    sudo nmcli c u path 1

    Присвоить узлу статический IP-адрес 192.168.23.102:

    Command
    sudo nmcli c d path 1
    sudo nmcli c m path 1 ip4 192.168.23.102/24 gw4 192.168.23.1
    sudo nmcli c m path 1 ipv4.method manual
    sudo nmcli c u path 1

    Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.

    Настройка /etc/hosts

    Записать имена узлов в файл /etc/hosts и удалить строку 127.0.1.1:

    Command
    sudo sed -i '$a 192.168.23.101\tpcmk-1' /etc/hosts
    sudo sed -i '$a 192.168.23.102\tpcmk-2' /etc/hosts
    sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts

    Установка пакетов кластерного ПО

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

    Установить пакеты кластерного ПО:

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

    Command
    sudo apt install pacemaker pcs astra-resource-agents
    Использование пакета astra-resource-agents позволяет использовать в качестве кластерной службы программное обеспечение, поддерживающее МРД;

    Далее в созданном кластере 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 проверить указанные ниже параметры и привести их к указанным значениям (добавить в случае отсутствия):

    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.

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

      Command

      sudo systemctl restart postgresql


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

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

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

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

      Command

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


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

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


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

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


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

      Command
      sudo systemctl disable postgresql
      sudo systemctl stop postgresql


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

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

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

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

          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. Основные параметры:

          • pgsql — имя (идентификатор) создаваемого виртуального ресурса;
          • ocf:astra:pgsql — название предопределенного набора параметров ресурса (агент).

        2. В случаях, если поддержка МРД не требуется (в том числе в 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"



      2. Установить параметры службы

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

    Command
    sudo apt install pacemaker pcs 

    После установки пакетов назначить пользователю hacluster пароль:

    Command
    sudo passwd hacluster
    Заданный на этом шаге пароль далее в примерах обозначается как <пароль>.

    Инициализация кластера

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

    Инициализировать кластер:

    Command
    sudo pcs cluster destroy
    Собрать кластер (для примера используется имя кластера astracluster)
      1. :
        1. Для Astra Linux Special Edition x.7:
          1. Объявить ресурс pgsql "продвигаемым" (promotable) и создать вторичный ресурс. Такие ресурсы могут переключаться между двумя режимами работы - master и slave:

            Command
            sudo pcs
      host auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
      sudo pcs cluster setup astracluster pcmk-1 pcmk-2 --force

      Для обновлений Astra Linux Special Edition до x.7 и Astra Linux Common Edition:

          1. resource promotable pgsql promoted-max=1 promoted-node-max=1 clone-max=2 clone-node-max=1 notify=true

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

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

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


        1. Для Astra Linux, выпущенных до очередного обновления x.7:
          1. Объявить мастер-ресурс:

            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 — ранее созданный ресурс СУБД.
          2. Объявить зависимости от других кластерных ресурсов:

            Command
            sudo pcs constraint colocation add ClusterIP with master mspgsql INFINITY
      Commandsudo pcs cluster auth pcmk-1 pcmk-2 -u hacluster -p <пароль>
      sudo pcs cluster setup --name astracluster pcmk-1 pcmk-2 --force

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

        Command

        sudo pcs cluster start --all

      Убедиться, что кластер полностью запустился

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

        Command
      while !
      1. sudo pcs status
      ; do sleep 1 ; done

      В целях тестирования отключить технологию STONITH:

      Информация

      STONITH (Shoot The Other Node In The Head) - технология, отвечающая за физическое устранение узла из кластера, и обеспечивающая полное обесточивание неисправных узлов, чтобы исключить повреждение данных. Поскольку в тесте устройства управления электропитанием не задействованы, эту возможность удобнее отключить, иначе будет постоянно выдаваться предупреждение, что STONITH не сконфигурирован

      Предупреждение
      На кластерах находящихся в эксплуатации  STONITH обязательно должен быть настроен и включен для предотвращения событий, приводящих к повреждению данных.
      Command
      sudo pcs property set stonith-enabled=false
    Информация
    Процедура добавления узла в кластер занимает некоторое время, обычно не более 1 минуты.
    Проверить состояние узлов кластера можно командой
      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

    Если кластер успешно стартовал, то состояние узлов кластера в выводе команды pcs status будет таким:

    Блок кода
    1. В выводе команды должно быть указано, что узел выводится из эксплуатации (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 ]

    Проверить правильность конфигурации кластера можно командой:

    Command

    sudo crm_verify -L

    Если конфигурация кластера содержит ошибки, утилита crm_verify о них сообщит.

    Предупреждение
    1. 
       
      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. Выполнить синхронизацию данных с действующим ведущим сервером. См. Синхронизация узлов кластерной службы postgresql.
    2. Удалить файл /var/lib/pgsql/tmp/PGSQL.lock:

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


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

    Если узел кластера выключался/перезагружался, то считается, что узел работает нештатно, и решение о возможности его повторного включения в кластер может принять только человек. Автоматическое включение узлов в кластер не применяется. Для возврата узла в кластер требуется повторно добавить его в кластер, выполнив на нем команду
    1. :

      Command
      sudo pcs cluster start

    Настроить поведение ресурсов:

    Задать значение глобального таймаута на операции со всеми ресурсами:

    Предупреждение
    На рабочем кластере не рекомендуется использовать глобальный таймаут, следует задавать таймауты для каждой операции у каждого ресурса кластера, исходя из реальных значений временных интервалов, полученных на конкретной аппаратной платформе.
    Command
    sudo pcs resource op defaults timeout=240s

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

    Блок кода
    Cluster name: astracluster
    Stack: corosync
    Current DC: pcmk-2 (version 2.0.1-9e909a5bdd) - partition with quorum
    Last updated: Tue Apr 11 14:13:34 2023
    Last change: Tue Apr 11 14:05:24 2023 by root via crm_attribute on pcmk-2
    
    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)
         Masters: [ pcmk-2 ]
         Slaves: [ pcmk-1 ]
    
    Daemon Status:
      corosync: active/disabled
      pacemaker: active/disabled
      pcsd: active/enabled

    Добавить IP-адрес кластера 192.168.23.100 как ресурс ClusterIP:

    Command
    sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.23.100 cidr_netmask=32 op monitor interval=30s
    Информация

    Если узел кластера выключался/перезагружался, требуется повторно добавить его в кластер, выполнив на нем команду:

    Command
    sudo pcs cluster start

    Установка и подключение кластерных служб

    Кластерная служба apache2 для кластера pacemaker

    Кластерная служба postgresql для кластера pacemaker