Перейти к содержанию

Настройка БД

Настройка postgresql.conf и pg_hba.conf

  1. На каждом из узлов БД (Узел БД 1 и Узел БД 2) необходимо указать представленные ниже параметры:

    • В файле /etc/postgresql/11/main/postgresql.conf:

      listen_addresses = '*'
      wal_level = replica
      wal_keep_segments = 32
      
    • В файле /etc/postgresql/11/main/pg_hba.conf:

      host    replication     postgres         192.168.31.34/32       trust
      host    replication     postgres         192.168.31.42/32       trust
      

      192.168.31.34/32 и 192.168.31.42/32 - IP-адреса узлов ранее подготовленного кластера pacemaker (astra-disp-db-cluster).

      Примечание

      Репликация без паролей представлена в качестве примера. В реальной рабочей среде учетные данные должны задаваться в соответствии с внутренними стандартами организации по применению парольной защиты.

  2. Перезапустить службу БД:

    sudo systemctl restart postgresql
    

Далее предполагается, что узлу 192.168.31.42/32 назначается роль master, а узлу 192.168.31.34/32 - slave.


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

Важно

Следующие шаги необходимо выполнять только на узлах кластера с ролью slave.

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

    sudo -u postgres sh -c "rm -rf /var/lib/postgresql/*/main/*"
    
  2. Действуя от имени пользователя postgres, создать резервную копию ведущего узла:

    sudo -u postgres pg_basebackup -h 192.168.31.42 -D /var/lib/postgresql/11/main -P
    

    Обращение к ведущему узлу выполняется по его адресу.

    Созданная резервная копия будет использована для создания локальной копии базы данных.

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

    sudo systemctl disable postgresql
    
    sudo systemctl stop postgresql
    

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

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

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

    sudo pcs resource create pgsql ocf:astra:pgsql pgversion="11" rep_mode="sync" master_ip="192.168.31.200" node_list="astra-pcmk-db-1 astra-pcmk-db-2"
    
  2. Установить параметры службы:

    • Объявить ресурс pgsql promotable (повышаемым) и создать вторичный ресурс:

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

      Такие ресурсы могут переключаться между двумя режимами работы - master и slave.

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

      sudo pcs constraint colocation add ClusterIP with master pgsql-clone INFINITY
      
  3. Запустить кластер:

    sudo pcs cluster start --all
    
  4. Проверить статус службы:

    sudo pcs status
    

    Ошибка exitreason='Replication(rep_mode=async or sync) requires Master/Slave configuration.'
    Если команда проверки состояния sudo pcs status сообщает об ошибке exitreason='Replication(rep_mode=async or sync) requires Master/Slave configuration.', то для устранения ошибки необходимо остановить и повторно запустить кластер:
    sudo pcs cluster stop --all
    
    sudo pcs cluster start --all
    

После полного запуска кластера можно приступать к установке узла с ролью Leader Space Disp, используя виртуальный IP-адрес (192.168.31.200) в качестве адреса БД.