Поддержка топологии 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.

Параметры плагина, задаваемые при подключении к слоту репликации:

Параметр

Описание

Значение по умолчанию

include-xids

Добавить xid к каждому набору изменений

false

use-xid32

Использовать 32-битный xid в наборе изменений

false

include-timestamp

Добавить временную метку (timestamp) к каждому набору изменений

false

include-schemas

Добавить схему (schema) к каждому изменению

true

include-types

Добавить тип к каждому изменению

true

include-typmod

Добавить модификатор к типам, у которых он есть (например, varchar(20) вместо varchar)

true

include-type-oids

Добавить oids типа

false

include-domain-data-type

Заменить доменное имя базовым типом данных

false

include-column-positions

Добавить позицию столбца (pg_attribute.attnum)

false

include-origin

Добавить источник фрагмента данных

false

include-not-null

Добавить ненулевую информацию в качестве columnoptionals

include-default

Добавить выражение (expression) по умолчанию

false

include-pk

Добавить информацию о primary key в виде pk. Имя столбца и тип данных включены

false

numeric-data-types-as-string

Использовать строку для числовых типов данных. Спецификация JSON не распознает Infinity и NaN как допустимые числовые значения. Для чисел двойной точности могут возникнуть потенциальные проблемы совместимости

false

pretty-print

Добавить пробелы и отступы в структуры JSON

false

write-in-chunks

Запись после каждого изменения вместо каждого набора изменений. Используется только тогда, когда format-version в значении 1

false

include-lsn

Добавить nextlsn к каждому набору изменений (changeset)

false

include-transaction

Выдает записи, обозначающие начало и конец каждой транзакции

true

filter-origins

Исключить изменения из указанных источников

Пустое, что означает, что источник не будет отфильтрован. Набор значений, разделенных запятой

filter-tables

Исключить строки (rows) из указанных таблиц.

Таблицы должны соответствовать требованиям схемы. Имя вида *.foo означает таблицу foo во всех схемах, а имя вида bar.* означает все таблицы в схеме bar. Специальные символы (пробел, одинарная кавычка, запятая, точка, звездочка) должны быть экранированы обратной косой чертой. Схема и таблица чувствительны к регистру

Пустое, что означает, что ни одна таблица не будет отфильтрована. Набор значений, разделенных запятой

add-tables

Включить только строки (rows) из указанных таблиц

По умолчанию используются все таблицы из всех схем. В нем действуют те же правила, что и в filter-tables

filter-msg-prefixes

Исключить сообщения, если префикс есть в списке

Пустое, что означает, что ни одно сообщение не будет отфильтровано. Задается в виде набора значений, разделенных запятой

add-msg-prefixes

Включить только сообщения, если префикс есть в списке. Задается в виде набора значений, разделенных запятой. Значение filter-msg-prefixes применяется перед этим параметром

По умолчанию используются все префиксы

format-version

Определяет, какой формат вывода использовать

1

actions

Определяет, какие операции будут отправляться

По умолчанию используются все действия (INSERT, UPDATE, DELETE и TRUNCATE). Однако, если используется format-version 1, TRUNCATE не будет включен (для поддержания обратной совместимости)

Примеры использования плагина приведены в разделе «wal2json» документа «Описание расширений продукта СУБД Pangolin».