Настройка Active/Passive кластера PostgreSQL с Pacemaker, Corosync и DRBD
Подготовлено Рафаэлем Марангони из команды 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 в конфигурации агента.
Тестирование и проверка (банк проверок)
- Открыть в браузере http://10.0.0.190/cluster — должна быть видна HTML-страница crm_mon.
- Открыть phpPgAdmin по адресу http://10.0.0.190/cluster-pgadmin и выполнить вход под admpgsql.
- Подключиться к PostgreSQL с хоста из 10.0.0.0/24 и выполнить тестовый SELECT.
- Запустить /usr/local/bin/monitor_drbd.sh — ожидаемый вывод: 1.
- Проверить в 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 для репликации данных между узлами.
Мини-методология развертывания (порядок действий)
- Подготовить базовую ОС и сеть (минимум две подсети: внутреннюю для репликации и публичную для клиента).
- Установить и настроить DRBD, проверить синхронизацию.
- Установить Pacemaker/Corosync, определить ресурсы и правила размещения.
- Развернуть PostgreSQL как управляемый ресурс в Pacemaker.
- Настроить веб-интерфейсы (crm_mon HTML, phpPgAdmin) и права доступа.
- Включить мониторинг и отработать сценарии переключения (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 и политиками безопасности.
Важно: перед внесением изменений в продакшн всегда тестируйте процедуры на стенде и делайте резервные копии конфигураций.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента