Часто встречающиеся проблемы и пути их устранения
-
Проблема: обрыв сети между ЦОД.Решение:
- размещение прокси-сервера маршрутизации соединений за пределами КТС с СУБД;
- дублирование экземпляров прокси-сервера маршрутизации соединений;
- добавление в схему решений, реализующих VRRP или аналоги — BGP.
-
Проблема: если используется асинхронная репликация, то в случае частичного обрыва сети наРешение:
Active
(запросы от клиентов продолжают поступать наActive
) и срабатыванияAutoFailOver
может возникнуть ситуация, называемаяSplit Brain
. До срабатыванияttl
односерверный экземпляр PostgreSQL продолжает обрабатывать клиентские запросы в режимеActive
. Если восстановление сети произойдет после срабатыванияttl
(смена ролейActive/StandBy
), то на «старом»Active
будет выполнена командаpg_rewind
, в результате которой будут отменены все транзакции, примененные в период с момента разрыва до срабатыванияttl
.- использовать режим синхронной репликации;
- реализовать
callback
в скриптахPangolin Manager
для переключенияActive
вStandBy
при разрыве сети (без ожидания срабатыванияttl
).
-
Проблема: если в рамках описанного выше сценария отключить использование
pg_rewind
, то добавленные до истеченияttl
транзакции не удаляются, но и не реплицируются на «новый»Active
после восстановления соединения. Аналогичное поведение наблюдается и при синхронной репликации.Решение: перенос данных на новыйActive
(возможно,pg_receivewal
), с проработкой вопроса слияния данных в случае конфликтов. -
Проблема: если в рамках описанного выше сценария будет использована синхронная репликация, то запросы на «старом»Решение:
Active
будут висеть, не завершаясь, при этом транзакции на нем будут применены. После восстановления соединения транзакции откатываютсяpg_rewind
.- реализовать на стороне клиента защитный механизм с таймаутами (в случаях срабатывания таймаута откатывать текущую транзакцию);
- не применять транзакцию в случае невозможности репликации.
-
Проблема: при использовании строгой синхронной репликации и недоступностиРешение:
StandBy
запрос наActive
висит, не завершаясь. Запись в базу добавляется после сигнала прерывания, либо при восстановлении связи соStandBy
. Репликация отрабатывает после восстановления связи сStandBy
.- реализовать на стороне клиента защитный механизм с таймаутами (в случаях срабатывания таймаута — откатывать текущую транзакцию);
- добавить в схему второй
StandBy
, настроенный на асинхронное реплицирование с синхроннымStandBy
; - не применять транзакцию в случае невозможности репликации.
-
Проблема: в случае аварийного завершения сервиса
Pangolin Manager
наActive
во всех режимах работы есть вероятность потери транзакций в результате работыpg_rewind
.Решение: использовать схему с автоматическим переключением трафика клиентов на новыйActive
(использование Pangolin Pooler). -
Проблема: во всех режимах работы при разрыве сети между ЦОД и недоступностью
Active
велика вероятность потери данных в результатеSplit Brain
.Решение: добавление в схему нового элемента: Pangolin Pooler. -
Проблема: если включено расширение pg_pathman, pg_repack входит в бесконечный цикл при обработке его таблиц, что приводит к реорганизации не отдельной таблицы, а всей базы.Решение: явно исключить pg_pathman из обработки с помощью ключа:
-C pg_pathman
.