Поддержка топологии N-ЦОД в Pangolin Pooler#
Логическое объединение кластеров, содержащее все множество синхронизируемых данных, обрабатываемых одним потребителем во всех центрах обработки данных (ЦОД), реализует N-ЦОД архитектурный подход управления данными. Для синхронизации данных может использоваться любой из инструментов межкластерной репликации, а устойчивость к сбоям достигается за счет резервирования.
Для обслуживания узлов кластеров, включаемых в архитектуру N-ЦОД, при сценариях, требующих соответствия требованиям высокой доступности и аварийного восстановления (HA/DR), Pangolin Pooler дополнен функциями:
В следующих подразделах данные функции будут рассмотрены более подробно.
Добавлены два режима приема новых клиентских соединений: NDC_ALLOWED - прием соединений разрешен, NDC_DISALLOWED - прием соединений запрещен.
Прерывание существующих и прекращение приема новых клиентских соединений#
При получении в административной консоли команды NDC_SUSPEND Pangolin Pooler прерывает все существующие соединения к базам данных, а также все клиентские соединения, кроме соединений с административной консолью (для обеспечения связи с базой pgbouncer). Получив эту команду, Pangolin Pooler переходит в режим NDC_DISALLOWED и прекращает обработку входящих клиентских соединений. Поведение аналогично вызову команды KILL <database_name> для всех баз данных, с которыми были установлены соединения, за исключением того, что базы данных не переходят в режим выключения.
Пример использования команды:
psql -h somehost -p 6544 -U someuser pgbouncer -c "NDC_SUSPEND"
Возобновление приема новых клиентских соединений и их обслуживание#
При получении команды NDC_KEEPALIVE Pangolin Pooler переходит в режим NDC_ALLOWED (если до этого он был в другом режиме) и возобновляет прием новых клиентских соединений, а также их обработку. При этом Pangolin Pooler сохраняет момент времени получения этой команды и использует его в дальнейшем при автоматическом переключении в режим приостановки приема клиентских соединений.
Пример использования команды:
psql -h somehost -p 6544 -U someuser pgbouncer -c "NDC_KEEPALIVE"
Автоматическая приостановка приема новых и остановка обслуживания существующих клиентских соединений при истечении заданного интервала времени#
Момент времени старта Pangolin Pooler или получения команды NDC_KEEPALIVE сохраняется и сравнивается в основном цикле обработки событий с текущим моментом времени. Если разница между этими моментами времени превышает установленное в конфигурационном параметре ndc_suspending_timeout значение, то Pangolin Pooler прерывает все существующие соединения и приостанавливает прием новых соединений так же, как и после получения команды NDC_SUSPEND. Значение параметра задается в секундах и по умолчанию равно 0. При изменении значения параметра ndc_suspending_timeout перезапускать (выполнять команду restart) Pangolin Pooler не нужно.
Если значение ndc_suspending_timeout равно нулю, то проверка на необходимость разорвать существующие соединения и прекратить прием новых не выполняется.
Если текущее значение заменено на значение по умолчанию, то возобновляется прием и обработка клиентских соединений (Pangolin Pooler переходит в режим NDC_ALLOWED).
Если значение по умолчанию заменено на другое, то сохраняется момент времени смены параметра, и начинается проверка необходимости автоматического переключения в режим приостановки приема и обслуживания клиентских соединений.
Примечание
Для организации непрерывного приема и обработки клиентских соединений необходимо регулярно отправлять запрос на выполнение команды NDC_KEEPALIVE.
Пример конфигурации:
[pgbouncer]
; ...
ndc_suspending_timeout = 60
Логическая репликация в формате JSON (плагин wal2json)#
Для реализации возможности логической репликации в формате JSON в состав продукта дополнительно включен плагин вывода для логического декодирования - wal2json.
Плагин имеет доступ к кортежам, созданным с помощью INSERT и UPDATE. Кроме того, доступ к UPDATE/DELETE старых версий строк (row) возможен в зависимости от настроенного идентификатора реплики. Изменения могут быть применены с помощью протокола потока изменений (слоты логической репликации) или с помощью специального SQL API.
Поддерживается два формата вывода:
объект JSON для каждой транзакции: все новые/старые кортежи доступны в объекте JSON. Есть опции для включения таких свойств, как временная метка транзакции, соответствие схеме, типы данных и идентификаторы транзакций;
объект JSON для каждого кортежа: для начала и окончания транзакции объект JSON необязателен; дополнительно представлен набор опций для включения отдельных свойств объектов.
Для использования плагина требуется уровень WAL >= logical, для этого необходимо задать значение параметра wal_level = 'logical'. После смены значения этого параметра требуется перезапустить сервер Pangolin.
Параметры плагина, задаваемые при подключении к слоту репликации:
Параметр |
Описание |
Значение по умолчанию |
|---|---|---|
|
Добавить |
|
|
Использовать 32-битный |
|
|
Добавить временную метку ( |
|
|
Добавить схему ( |
|
|
Добавить тип к каждому изменению |
|
|
Добавить модификатор к типам, у которых он есть (например, |
|
|
Добавить |
|
|
Заменить доменное имя базовым типом данных |
|
|
Добавить позицию столбца ( |
|
|
Добавить источник фрагмента данных |
|
|
Добавить ненулевую информацию в качестве |
|
|
Добавить выражение ( |
|
|
Добавить информацию о primary |
|
|
Использовать строку для числовых типов данных. Спецификация JSON не распознает |
|
|
Добавить пробелы и отступы в структуры JSON |
|
|
Запись после каждого изменения вместо каждого набора изменений. Используется только тогда, когда |
|
|
Добавить |
|
|
Выдает записи, обозначающие начало и конец каждой транзакции |
|
|
Исключить изменения из указанных источников |
Пустое, что означает, что источник не будет отфильтрован. Набор значений, разделенных запятой |
|
Исключить строки ( |
Пустое, что означает, что ни одна таблица не будет отфильтрована. Набор значений, разделенных запятой |
|
Включить только строки ( |
По умолчанию используются все таблицы из всех схем. В нем действуют те же правила, что и в |
|
Исключить сообщения, если префикс есть в списке |
Пустое, что означает, что ни одно сообщение не будет отфильтровано. Задается в виде набора значений, разделенных запятой |
|
Включить только сообщения, если префикс есть в списке. Задается в виде набора значений, разделенных запятой. Значение |
По умолчанию используются все префиксы |
|
Определяет, какой формат вывода использовать |
|
|
Определяет, какие операции будут отправляться |
По умолчанию используются все действия ( |
Примеры использования плагина приведены в разделе «wal2json» документа «Описание расширений продукта СУБД Pangolin».