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