Гид по технологиям

Настройка Active/Passive кластера PostgreSQL с Pacemaker, Corosync и DRBD

• 5 min read • Базы данных • Обновлено 26 Nov 2025
Настройка Active/Passive кластера PostgreSQL
Настройка Active/Passive кластера PostgreSQL

Подготовлено Рафаэлем Марангони из команды BRLink Servidor Linux.

8. Создание веб-страницы для показа статуса

Эта конфигурация полезна для быстрого визуального контроля состояния кластера. Команды нужно запускать на обоих узлах.

Запустите Apache (если не запущен):

/etc/init.d/httpd start
chkconfig –level 35 httpd on

Создайте директорию для кластера в DocumentRoot:

mkdir /var/www/html/cluster/

Сгенерировать HTML-страницу со статусом кластера можно командой crm_mon (она генерирует статическую страницу):

crm_mon --daemonize --as-html /var/www/html/cluster/index.html

Добавим запуск в /etc/rc.d/rc.local, чтобы страница обновлялась при старте:

 echo "crm_mon --daemonize --as-html /var/www/html/cluster/index.html" >> /etc/rc.d/rc.local 

После этого откройте в браузере http://10.0.0.190/cluster чтобы увидеть статус.

Важно: сервер Apache и права на файлы должны позволять веб-серверу читать созданный файл. Проверьте владельца/пермишены, если страница не появляется.

9. Установка phpPgAdmin для управления PostgreSQL

Рекомендуется устанавливать phpPgAdmin на каждом узле, если вы хотите иметь локальный веб-интерфейс для управления БД. Не открывайте интерфейс в интернет без защиты.

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

mkdir /download  
cd /download  
wget 'http://downloads.sourceforge.net/project/phppgadmin/phpPgAdmin%20%5Bbeta%5D/phpPgAdmin-5.0/phpPgAdmin-5.0-beta2.tar.bz2?r=http%3A%2F%2Fphppgadmin.sourceforge.net%2F%3Fpage%3Ddownload&ts=1288189530&use_mirror=ufpr'

Распакуйте и переместите в веб-каталог:

tar -jxvf phpPgAdmin-5.0-beta2.tar.bz2  
mv phpPgAdmin-5.0-beta2 /var/www/html/cluster-pgadmin  
chown apache.apache -R /var/www/html/cluster-pgadmin

Доступ к интерфейсу: http://10.0.0.190/cluster-pgadmin
PS: используйте пользователя admpgsql и пароль, который вы задали при настройке PostgreSQL.

Советы по безопасности:

  • Ограничьте доступ через firewall (iptables/Firewalld) по IP.
  • По возможности используйте внутреннюю сеть для админ-интерфейса.
  • Не используйте пароли по умолчанию.

10. Доступ к PostgreSQL из сети

Если требуется доступ к PostgreSQL из LAN, нужно настроить аутентификацию в pg_hba.conf.

В узле, где PostgreSQL сейчас запущен, добавьте следующую строку (пример для сети 10.0.0.0/24 с md5-аутентификацией):

echo "host all all 10.0.0.0/24 md5">> /var/lib/pgsql/data/pg_hba.conf

Затем перезапустите ресурс PostgreSQL через crm, чтобы конфигурация перезагрузилась:

crm resource stop postgresql  
crm resource start postgresql

Пояснение: запись в pg_hba.conf разрешает всем пользователям подключаться к любым базам из сети 10.0.0.0/24 с md5-паролями. При необходимости ограничьте список хостов и пользователей.

11. Мониторинг

Мониторинг кластера обязателен в продакшене. Для интеграции с Zabbix установите Zabbix Agent на каждом узле и создайте элементы мониторинга, перечисленные ниже.

Рекомендуемые элементы для мониторинга (на каждом узле и в сети):

  • Проверка локальной доступности соседнего узла (ping): 10.0.0.191, 10.0.0.192 и 172.16.0.1, 172.16.0.2
  • Проверка DBIP (кластерного IP): 10.0.0.190
  • Проверка TCP-порта PostgreSQL (5432) на адресе DBIP 10.0.0.190
  • Общие метрики: использование диска, память, загрузка CPU
  • Проверка состояния синхронизации DRBD

Ниже простой скрипт monitor_drbd.sh, который возвращает 1 при нормальной синхронизации и 0 при проблеме. Его удобно опрашивать Zabbix-агентом.

#!/bin/bash

CHECK=`cat /proc/drbd | grep UpToDate/UpToDate | cut -d: -f5 | cut -c1-17`
STRING_OK="UpToDate/UpToDate"

# Comparando as duas.
if [ "$CHECK" == "$STRING_OK" ] ; then
    # Is ok, returning 1
    echo 1;
else
    # Not ok, returning 0
    echo 0;
fi   

Разбор скрипта по шагам:

  • cat /proc/drbd — читает статус DRBD для всех ресурсов.
  • grep UpToDate/UpToDate — ищет строку, где оба узла «UpToDate».
  • cut -d: -f5 | cut -c1-17 — вычленяет нужную часть строки для сравнения.
  • При совпадении скрипт выводит 1 (OK), иначе 0 (ошибка).

Разверните скрипт в /usr/local/bin/monitor_drbd.sh и добавьте права выполнения: chmod +x /usr/local/bin/monitor_drbd.sh

Интеграция с Zabbix: создайте элемент типа Zabbix agent (key — system.run[/usr/local/bin/monitor_drbd.sh]) или используйте UserParameter в конфигурации агента.

Тестирование и проверка (банк проверок)

  1. Открыть в браузере http://10.0.0.190/cluster — должна быть видна HTML-страница crm_mon.
  2. Открыть phpPgAdmin по адресу http://10.0.0.190/cluster-pgadmin и выполнить вход под admpgsql.
  3. Подключиться к PostgreSQL с хоста из 10.0.0.0/24 и выполнить тестовый SELECT.
  4. Запустить /usr/local/bin/monitor_drbd.sh — ожидаемый вывод: 1.
  5. Проверить в Zabbix состояние пингов, DBIP и порта 5432.

Критерии приёмки

  • Веб-страница кластера доступна и показывает актуальный статус.
  • phpPgAdmin доступен локально, вход возможен под заданными учётными данными.
  • pg_hba.conf содержит запись для 10.0.0.0/24 и подключения работают.
  • monitor_drbd.sh возвращает 1 на обоих синхронизированных узлах.
  • Zabbix собирает ключевые метрики и генерирует алерты при отклонениях.

Роли и чек-листы

Администратор кластера (инфраструктура):

  • Установить и запустить Apache на обоих узлах.
  • Настроить права на /var/www/html/cluster и /var/www/html/cluster-pgadmin.
  • Настроить firewall для ограничения доступа к веб-интерфейсам.
  • Добавить cron/rc.local вызов crm_mon.

DBA:

  • Проверить записи в pg_hba.conf и обновить пароли.
  • Протестировать подключение к БД через phpPgAdmin и psql.
  • Обеспечить резервное копирование конфигураций PostgreSQL.

Оператор мониторинга:

  • Установить Zabbix Agent и создать элементы для пинга, DBIP, порта 5432 и скрипта DRBD.
  • Настроить триггеры и уведомления для отказов репликации и падения сервиса.

Варианты и альтернативные подходы

  • Вместо phpPgAdmin можно использовать pgAdmin (серверный/веб) или подключаться напрямую через psql. pgAdmin имеет более богатый функционал и лучше подходит для сложных админ-задач.
  • Для автоматического управления отказоустойчивостью рассмотрите Patroni или repmgr (они предоставляют автоматическое failover на уровне PostgreSQL), если вам нужен более «cloud-native» подход.
  • Если не требуется блочный синхронный репликатор, можно использовать асинхронную репликацию PostgreSQL для репликации данных между узлами.

Мини-методология развертывания (порядок действий)

  1. Подготовить базовую ОС и сеть (минимум две подсети: внутреннюю для репликации и публичную для клиента).
  2. Установить и настроить DRBD, проверить синхронизацию.
  3. Установить Pacemaker/Corosync, определить ресурсы и правила размещения.
  4. Развернуть PostgreSQL как управляемый ресурс в Pacemaker.
  5. Настроить веб-интерфейсы (crm_mon HTML, phpPgAdmin) и права доступа.
  6. Включить мониторинг и отработать сценарии переключения (failover).

Факто-бокс (ключевые параметры)

  • DBIP: 10.0.0.190
  • Примеры IP узлов: 10.0.0.191, 10.0.0.192
  • Порт PostgreSQL по умолчанию: 5432
  • Пример сети для доступа: 10.0.0.0/24

Безопасность и замечания

  • Не выставляйте phpPgAdmin и crm_mon в публичный интернет без VPN или ограничений по IP.
  • Используйте сильные пароли и ограничивайте привилегии пользователей PostgreSQL.
  • Следите за правами на каталоги веб-сервера, чтобы избежать несанкционированного доступа.

Заключение

Этот набор шагов даёт быстрый и практичный способ получить визуальный статус кластера, управлять PostgreSQL через веб-интерфейс и обеспечить базовый мониторинг синхронизации DRBD и доступности службы. Для продакшен-среды обязательно дополните инструкции автоматическим тестированием failover и политиками безопасности.

Важно: перед внесением изменений в продакшн всегда тестируйте процедуры на стенде и делайте резервные копии конфигураций.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро