Перейти к основному содержимому

Поддержка топологии 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Добавить пробелы и отступы в структуры JSONfalse
write-in-chunksЗапись после каждого изменения вместо каждого набора изменений. Используется только тогда, когда format-version в значении 1false
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».