sdmspec.json

sdmspec.json — файл инициализации Shardman

Синтаксис

   sdmspec.json
  

Описание

Расширение shardmanctl использует файл конфигурации sdmspec.json во время инициализации кластера Shardman. Пакет shardman-utils содержит пример файла конфигурации.

Файл sdmspec.json содержит основные пути файловой системы, используемые Shardman, глобальные параметры кластера, параметры, связанные с базой данных, например логины администраторов и пользователей репликации и методы их аутентификации, параметры FDW и конфигурация сегментов (ShardSpec).

Список параметров

Repfactor

Целое число, определяющее, сколько реплик нужно настроить расширению shardmanctl для каждой СУБД. Этот параметр можно изменить только для кластера Shardman с режимом топологии manual.

PlacementPolicy

Строка, определяющая политику размещения экземпляров СУБД. В настоящее время поддерживаются только политики размещения cross и manual. Прежнее значение clover используется как псевдоним для политики cross.

С политикой cross узлы группируются в звенья, где на каждом узле работает главный сервер СУБД и реплики для всех остальных узлов в звене. Количество узлов в звене определяется параметром Repfactor и равно Repfactor + 1.

Политика размещения manual позволяет вручную добавлять или удалять необходимое количество реплик в указанных группах репликации. В этом случае Repfactor используется только в рекомендательных целях и не накладывает ограничений.

DataDir

Позволяет указать каталог для хранения данных, отличный от каталога по умолчанию (/var/lib/pgpro/sdm-14/data). Этот параметр нельзя изменить после инициализации кластера.

PGsInitialPort

Порты, начинающиеся с этого целого числа, назначаются экземплярам PostgreSQL. Этот параметр нельзя изменить после инициализации кластера.

SilkInitialPort

Порты, начинающиеся с этого целого числа, назначаются экземплярам Silk (Shardman InterLinK). Этот параметр нельзя изменить после инициализации кластера.

PgSuAuthMethod

Метод аутентификации, используемый администратором для подключения к СУБД. Может быть любым методом аутентификации, поддерживаемым PostgreSQL. В настоящее время рекомендуется использовать scram-sha-256. Метод md5 сейчас разрешён, но не рекомендован. Этот параметр нельзя изменить после инициализации кластера.

По умолчанию: trust.

PgSuUsername

Имя администратора СУБД. Создаётся при инициализации кластера. По умолчанию используется имя действительного пользователя, запустившего shardmanctl init. Этот параметр нельзя изменить после инициализации кластера.

PgSuPassword

Пароль администратора СУБД. Можно изменить, используя shardmanctl config update.

PgSuSSLCert

Клиентский сертификат для администратора СУБД.

PgSSLRootCert

Расположение файла корневого сертификата для подключения пользователя СУБД.

PgSuSSLKey

Закрытый ключ клиента для администратора СУБД.

PgSSLMode

Режим SSL для пользователя СУБД. Допустимые значения: verify-ca и verify-full.

PgReplAuthMethod

Метод аутентификации, используемый пользователем репликации для подключения к СУБД. Может быть любым методом аутентификации, поддерживаемым PostgreSQL. В настоящее время рекомендуется использовать scram-sha-256. Метод md5 сейчас разрешён, но не рекомендовано. Этот параметр нельзя изменить после инициализации кластера.

По умолчанию: trust.

PgReplUsername

Имя пользователя репликации. Создаётся при инициализации кластера. Этот параметр нельзя изменить после инициализации кластера.

По умолчанию: repluser.

PgReplPassword

Пароль пользователя репликации. Можно изменить, используя shardmanctl config update.

PgReplSSLCert

Клиентский сертификат для пользователя репликации СУБД.

PgReplSSLKey

Закрытый ключ клиента для пользователя репликации СУБД.

ShardSpec

Спецификация кластера сегментов. За подробным описанием обратитесь к разделу Параметры ShardSpec. Спецификацию можно изменить, используя shardmanctl config update.

FDWOptions

Этот объект содержит параметры FDW.

Эти параметры можно изменить, используя shardmanctl config update (за исключением параметров, связанных с авторизацией, подключением к серверу, SSL и Kerberos, а также параметров service, target_session_attrs).

На сторонних серверах, соответствующих группам репликации Shardman, также будет автоматически включён параметр extended_features. Никогда не устанавливайте этот параметр для сторонних серверов postgres_fdw, которые определяются для пользовательских целей (например, для загрузки данных в кластер Shardman).

Параметры ShardSpec

Спецификация ShardSpec может включать все обычные параметры stolon, описанные в Спецификация кластера Stolon. Однако следующие параметры следует тщательно настроить для кластера Shardman.

pgHBA

Массив JSON строк pg_hba.conf. По умолчанию разрешает доступ пользователю PgSuUsername из любого места с методом аутентификации PgSuAuthMethod. Если значение defaultSUReplAccessMode равно strict, строки pg_hba.conf должны явно разрешать доступ пользователей PgSuUsername и PgReplUsername со всех узлов кластера Shardman.

forceSuUserLocalPeerAuth

Если этот параметр включён, он устанавливает аутентификацию peer через сокет Unix для пользователя postgres, если для strictUserHBA не установлено значение true.

По умолчанию: false.

synchronousReplication

Определяет, должны ли реплики использовать синхронную репликацию. Должен иметь значение true в кластере Shardman.

По умолчанию: true.

maxSynchronousStandbys

Максимальное количество необходимых синхронных резервных серверов при включённой синхронной репликации. Должно быть >= Repfactor в кластере Shardman. По умолчанию: Repfactor.

strictUserHBA

Запрещает добавление автоматически сгенерированных строк в файл pg_hba.conf. По умолчанию: false.

automaticPgRestart

Определяет, должен ли экземпляр СУБД автоматически перезапускаться после изменения хеш-таблицы pgParameters, внесение которого требует перезапуска. Должен быть включён в кластере Shardman.

По умолчанию: true.

masterDemotionEnabled

Включить понижение роли ведущего сервера, если ведущий сервер группы реплик потерял связь с etcd. Ведущий сервер пытается подключиться к каждому из своих резервных узлов, чтобы определить, стал ли какой-либо из них ведущим. Если обнаруживается другой ведущий сервер, текущий выключает свой экземпляр СУБД до тех пор, пока не будет восстановлено соединение с etcd. Если ведущий сервер в течение длительного времени не может подключиться к одному из своих резервных узлов, происходит отключение экземпляра СУБД.

По умолчанию: false.

masterDemotionTimeout

Тайм-аут, в течение которого ведущий сервер пытается подключиться к своим резервным узлам в случаях, когда связь с etcd потеряна. Работает, только если для параметра masterDmotionEnabled установлено значение true.

По умолчанию: 30s.

minSyncMonitorEnabled

Включает отслеживание значения MinSynchronousStandbys для каждой группы реплики. Если узел теряет соединение с кластером (все процессы keeper неработоспособны: состояние keeper не обновляется дольше, чем minSyncMonitorUnhealthyTimeout), отслеживается уменьшение значения MinSynchronousStandbys для каждой группы реплик, связанной с отключённым узлом, до максимально доступного значения. Это позволяет предотвратить состояние только для чтения, вызванное поддельной репликой. Максимально доступное значение всегда меньше или равно значению, указанному в конфигурации кластера. Если все процессы keeper, связанные с отключённым узлом, становятся работоспособными, отслеживается изменение значения MinSynchronousStandbys группы реплик на значение, указанное в конфигурации кластера.

По умолчанию: false.

minSyncMonitorUnhealthyTimeout

Временной интервал, по истечении которого узел (и все процессы keeper, связанные с этим узлом) будет считаться неработоспособным. Работает, только если для параметра minSyncMonitorEnabled установлено значение true.

По умолчанию: 30s.

syncPointMonitorEnabled

Включить отслеживающий процесс, который каждую минуту создаёт точку синхронизации, гарантируя, что Shardman сможет восстановить согласованный LSN. В каждой точке синхронизации состояние кластера согласованно, то есть все транзакции завершены. Если для этого параметра установлено значение true, PITR будет гарантированно работать

По умолчанию: false.

dbWaitRewindTimeout

Перед полной повторной синхронизацией реплики программное обеспечение кластера сначала пытается задействовать pg_rewind, поскольку операция перемотки выполняется значительно быстрее других подходов, когда база данных большая и кластеры отличаются лишь небольшой частью блоков. Параметр dbWaitRewindTimeout указывает максимальное время работы для pg_rewind (примеры значений: 5m, 30s, 1m30s).

По умолчанию: 7m.

pgParameters

Хеш-таблица, определяющая параметры PostgreSQL, включая параметры, специфичные для Shardman.

Параметры PostgreSQL, специфичные для Shardman

Следующие параметры в pgParameters относятся к Shardman:

enable_csn_snapshot (boolean)

Включает или отключает для снимка отслеживание видимости транзакции на основе последовательного номера фиксации (CSN).

PostgreSQL использует метку времени в качестве CSN, поэтому включение снимков на основе CSN может быть полезно для реализации глобальных снимков и глобальной видимости транзакций.

Когда этот параметр включён, PostgreSQL создаёт каталог pg_csn в PGDATA для отслеживания сопоставлений CSN и XID.

По умолчанию: off.

csn_snapshot_defer_time (integer)

Указывает минимальный возраст разрешённых для очистки записей в секундах.

Все глобальные транзакции должны начинаться на всех узлах-участниках в течение количества секунд, заданного в параметре csn_snapshot_defer_time, в противном случае они прерываются ошибкой «csn snapshot too old».

По умолчанию: 5.

csn_commit_delay (integer)

Задаёт максимально возможное значение рассогласования часов (в наносекундах) в кластере. Добавляет задержку перед каждой фиксацией в системе для обеспечения внешней согласованности. Если установлено значение 0, внешняя согласованность не гарантируется. Значения могут дополняться суффиксами ns, us, ms и s.

По умолчанию: 0.

csn_lsn_map_size (integer)

Размер карты CSNLSNMap.

Запись фиксации каждой завершённой транзакции в Shardman содержит назначенный CSN для этой транзакции. Это значение вместе с LSN этой записи образует пару значений (CSN, LSN). Каждый из узлов кластера хранит определённое количество таких пар в оперативной памяти в специальной структуре — карте CSNLSNMap. Эта карта используется для получения точки синхронизации. За дополнительной информацией обратитесь к разделу «Точки синхронизации и согласованное резервное копирование» в главе Внутреннее устройство.

По умолчанию: 1024.

foreign_analyze_interval (integer)

Задаёт частоту сбора статистики по сторонним отношениям в процессе автоочистки, в секундах. Если значение параметра foreign_analyze_interval меньше значения autovacuum_naptime, статистика по сторонним отношениям собирается через заданные в autovacuum_naptime промежутки времени (в секундах).

По умолчанию: 60.

foreign_join_fast_path (boolean)

Включает быстрый путь для планирования стороннего соединения. Когда параметр включён, пути стороннего соединения для запросов SELECT ищутся перед всеми другими возможными путями, и поиск соединения останавливается, как только найден путь стороннего соединения.

По умолчанию: off.

optimize_correlated_subqueries (boolean)

Включает или отключает логику планировщика запросов для преобразования связанных подзапросов в полусоединения.

По умолчанию: on.

port (integer)

TCP-порт, через который сервер принимает подключения. Значение port для кластера Shardman назначается системой автоматически на основании параметра PGsInitialPort. Даже если значение параметра будет изменено вручную, оно перезапишется автоматически назначенным параметром конфигурации.

enable_partition_pruning_extra (boolean)

Включает механизм расширенного устранения секций для подготовленных запросов. Включение этого параметра позволяет устранять секции из планов, использующих соединение с учётом секционирования.

По умолчанию: off.

postgres_fdw.enforce_foreign_join (boolean)

Включает альтернативные оценки стоимости стороннего соединения, что значительно повышает вероятность того, что соединение нескольких сторонних таблиц, ссылающихся на один и тот же сервер, будет вытолкнуто. Стоимость исходного соединения оценивается как (1 - 1/(cost + 1)), где cost — это исходная предполагаемая стоимость этого удалённого соединения.

По умолчанию: off.

postgres_fdw.foreign_explain (boolean)

Добавляет в общий вывод команды EXPLAIN часть вывода команды EXPLAIN для подвыражений с удалённых серверов, если план запроса содержит узлы ForeignScan.

По умолчанию: on.

postgres_fdw.optimize_cursors (boolean)

Задаёт поведение postgres_fdw, при котором расширение будет пытаться извлечь первую часть данных курсора сразу после объявления и задерживать закрытие курсора.

Этот параметр postgres_fdw заставляет расширение избегать закрытия курсоров после окончания сканирования. Курсоры закрываются в конце транзакции.

По умолчанию: off.

postgres_fdw.subplan_pushdown (boolean)

Включает или отключает логику postgres_fdw для выталкивания подзапросов, ссылающихся только на таблицы стороннего сервера, на этот сторонний сервер.

По умолчанию: off.

postgres_fdw.use_twophase (enum)

Задаёт поведение postgres_fdw, при котором расширение использует протокол двухфазной фиксации (2PC) для распределённых транзакций.

Этот параметр postgres_fdw заставляет использовать двухфазную фиксацию, если транзакция затрагивает несколько узлов. Если установлено значение auto, двухфазная фиксация используется только в транзакциях с enable_csn_snapshot=true и уровнем изоляции REPEATABLE READ или выше.

Временные таблицы нельзя использовать в двухфазных транзакциях.

По умолчанию: auto.

postgres_fdw.estimate_as_hashjoin (boolean)

Когда этот параметр включён, планировщик оценивает стоимость стороннего соединения таким же образом, как и стоимость хеш-соединения, когда это возможно. Эта стоимость сравнивается со стоимостью по умолчанию (которая аналогична стоимости соединения вложенным циклом), и для пути выбирается меньшая стоимость.

По умолчанию: off.

shardman.broadcast_ddl (boolean)

Задаёт поведение, при котором расширение Shardman транслирует операторы DDL для всех групп репликации.

Если этот параметр включён, расширение Shardman транслирует поддерживаемые операторы DDL для всех групп репликации, если это имеет смысл для этих операторов. Это поведение можно включить/отключить в любой момент. Этот параметр не учитывается, если он установлен в файле конфигурации.

По умолчанию: off.

shardman.config_uuid (string)

Внутренний параметр, используемый инструментами Shardman для определения версии конфигурации. Никогда не следует устанавливать вручную. Игнорируется, если установлено командой shardmanctl config update или shardmanctl init.

По умолчанию: не задан.

shardman.enable_limit_pushdown (boolean)

Включает выталкивание ограничительных предложений через нижележащие присоединения. Если этот параметр включён, оптимизатор Shardman попытается передать ограничительное предложение подпутям нижележащего узла плана Append/MergeAppend, если они ссылаются на сторонние таблицы postgres_fdw. Эта оптимизация работает только для планов SELECT, когда параметр ограничения представлен в виде константы или параметра. Она также ограничена для путей Append, соответствующих секционированной таблице. Оптимизация не работает для SELECT с предложениями блокировки (SELECT FOR UPDATE/NO KEY UPDATE/FOR SHARE/KEY SHARE).

По умолчанию: on.

shardman.num_parts (integer)

Указывает количество секций сегментированной таблицы по умолчанию.

Сегментированная таблица имеет указанное количество секций по умолчанию, если число_секций не указано в CREATE TABLE.

Чтобы разрешить масштабирование, значение shardman.num_parts должно быть больше ожидаемого максимального количества узлов в кластере Shardman.

Возможные значения: от 1 до 1000

По умолчанию: 20.

shardman.rgid (integer)

Указывает идентификатор группы репликации узла Shardman.

Этот параметр задаётся утилитами Shardman при добавлении узла в кластер и никогда не должен изменяться вручную.

По умолчанию: -1.

shardman.sync_schema (boolean)

Задаёт поведение Shardman, при котором все операторы DDL, касающиеся сегментированные и глобальные отношения, распространяются на все группы репликации.

Когда этот параметр включён, Shardman транслирует все поддерживаемые служебные операторы, касающиеся сегментированных и глобальных отношений, для всех групп репликации. Этот параметр не рекомендуется отключать. Он не учитывается, если он установлен в файле конфигурации.

По умолчанию: on.

shardman.query_engine_mode (enum)

Переключение между режимами планирования/выполнения запроса. Возможные значения: none и text.

Значение none означает, что при планировании/выполнении запросов транспорт Silk не будет использоваться.

Значение text означает, что текстовое представление запроса передаётся через транспорт Silk для удалённого выполнения.

По умолчанию: none.

shardman.silk_use_ip (string)

Транспорт Silk использует IP-адрес, указанный в этом параметре, для идентификации узла. Если указано имя хоста, оно разбирается и используется первый IP-адрес, соответствующий этому имени.

По умолчанию: node hostname.

shardman.silk_listen_ip (string)

Демон маршрутизации Silk использует IP-адрес, указанный в этом параметре, для идентификации узла. Если указано имя хоста, оно разбирается и используется первый IP-адрес, соответствующий этому имени.

По умолчанию: node hostname.

shardman.silk_use_port (integer)

Демон маршрутизации Silk прослушивает входящие соединения на этом порту. Этот параметр должен быть одинаковым для всех узлов в кластере Shardman.

По умолчанию: 8888.

shardman.silk_num_workers (integer)

Количество фоновых рабочих процессов, выделенных для распределённого выполнения. Значение этого параметра должно быть меньше, чем значение max_worker_processes (включая вспомогательные рабочие процессы postgres).

По умолчанию: 2.

shardman.silk_scheduler_mode (enum)

Включает дополнительные параметры планирования ЦП для процессов мультиплексора (silkroad и silkworm).

Если этот параметр равен fifo, Shardman назначает политику планирования SCHED_FIFO для процессов silkroad и каждого из silkworm. Оно назначает статический приоритет планирования (sched_priority) значениям shardman.silkroad_sched_priority и shardman.silkworm_sched_priority соответственно.

Этот параметр улучшает производительность транспорта silk при работе с высокой нагрузкой на процессор.

Обратите внимание, что для использования этого параметра двоичный файл postgres должен иметь возможность CAP_SYS_NICE. Если процессу не назначена соответствующая возможность, включение этого параметра не окажет никакого эффекта. Возможность должна быть назначена двоичному файлу postgres перед запуском postgres. Postgres (т. е. процессы silkroad и silkworm) применит параметры планирования один раз во время запуска службы. Чтобы изменить параметры планирования, необходимо перезапустить службу postgres.

Чтобы задать возможность, необходимо выполнить следующую команду один раз после установки postgres:

             $ sudo setcap cap_sys_nice+ep /opt/pgpro/sdm-14/bin/postgres
           

При необходимости замените /opt/pgpro/sdm-14/bin/postgres на правильный путь к двоичному файлу postgres. Также обратите внимание, что файловая система должна поддерживать расширенные атрибуты файлов. Необходимо установить такую поддержку для каждого узла в кластере, чтобы получить полный эффект.

По умолчанию: none.

shardman.silkroad_sched_priority (integer)

Значение статического приоритета планирования (sched_priority) для процесса silkroad. Этот параметр имеет смысл только в том случае, если shardman.silk_scheduler_mode равен «fifo».

По умолчанию: 2.

shardman.silkworm_sched_priority (integer)

Значение статического приоритета планирования (sched_priority) для процессов silkworm (одинаковое значение для обоих процессов). Этот параметр имеет смысл только в том случае, если shardman.silk_scheduler_mode равен «fifo».

По умолчанию: 1.

shardman.silk_set_affinity (bool)

Позволяет прикреплять процессы мультиплексора (silkroad и silkworm) к ядрам процессоров, чтобы устранить негативные последствия миграции потоков между процессорами.

Если этот параметр имеет значение true, процесс silkroad будет прикреплён к первому доступному ядру ЦП, а все процессы silkworm будут прикреплены ко всем доступным ядрам ЦП, кроме первого.

Этот параметр улучшает производительность транспорта silk при работе с высокой нагрузкой на процессор.

Обратите внимание, что для использования этого параметра двоичный файл postgres должен иметь возможность CAP_SYS_NICE. Если процессу не назначена соответствующая возможность, включение этого параметра не окажет никакого эффекта. Возможность должна быть назначена двоичному файлу postgres перед запуском postgres. Postgres (т. е. процессы silkroad и silkworm) применит параметры привязки один раз во время запуска службы. Чтобы изменить параметры привязки, необходимо перезапустить службу postgres.

Чтобы задать возможность, необходимо выполнить следующую команду один раз после установки postgres:

             $ sudo setcap cap_sys_nice+ep /opt/pgpro/sdm-14/bin/postgres
           

При необходимости замените /opt/pgpro/sdm-14/bin/postgres на правильный путь к двоичному файлу postgres. Также обратите внимание, что файловая система должна поддерживать расширенные атрибуты файлов. Необходимо установить такую поддержку для каждого узла в кластере, чтобы получить полный эффект.

По умолчанию: false.

shardman.database (string)

Имя базы данных, к которой подключаются все рабочие процессы Silk.

По умолчанию: postgres.

shardman.monitor_interval (integer)

shardman.monitor_interval устарел и действует как пустая команда.

Вместо этого используйте параметр shardman.monitor_dxact_interval.

shardman.monitor_dxact_interval (integer)

Интервал между проверками устаревших подготовленных транзакций.

Фоновый процесс shardman monitor активируется каждые shardman.monitor_dxact_interval секунд и пытается проверить и разобрать все подготовленные транзакции, которые не завершились и по какой-то причине устарели. Для разбора этих транзакций процесс shardman monitor определяет координатора транзакции и запрашивает статус транзакции у координатора. В зависимости от статуса транзакции shardman monitor либо откатывает, либо фиксирует транзакцию.

Чтобы отключить логику разбора подготовленных транзакций, установите для shardman.monitor_dxact_interval значение 0.

По умолчанию: 5 (секунд).

shardman.monitor_trim_csnxid_map_interval (integer)

Каждый узел кластера замораживает собственное значение xmin на csn_snapshot_defer_time секунд для поддержки глобальных транзакций. Большие значения csn_snapshot_defer_time могут негативно сказаться на производительности. У расширения shardman monitor есть подпрограмма, которая каждые shardman.monitor_trim_csnxid_map_interval секунд обновляет xmin на всех узлах до минимально возможного значения (с учётом активных транзакций).

Фоновая процедура будет выполняться только на одном узле в кластере Shardman. Учтите, что это увеличит нагрузку на этот узел.

Чтобы отключить такие изменения, установите для shardman.monitor_trim_csnxid_map_interval значение 0.

По умолчанию: 5 (секунд).

shardman.monitor_dxact_timeout (integer)

Максимально допустимый возраст подготовленных транзакций до попытки разбора.

Во время разбора подготовленной транзакции shardman monitor определяет, не устарела ли она. Транзакция становится устаревшей, если она была подготовлена более чем shardman.monitor_dxact_timeout секунд назад.

По умолчанию: 5 (секунд).

shardman.trim_csnxid_map_naptime (integer)

Указывает минимальную задержку между обновлениями xmin на всех узлах. За дополнительной информацией обратитесь к описанию shardman.monitor_trim_csnxid_map_interval.

Возможные значения: от 1 до 600.

По умолчанию: 5.

shardman.monitor_deadlock_interval (integer)

Интервал между проверками условий распределённой взаимоблокировки.

Фоновый процесс shardman monitor активируется каждые shardman.monitor_deadlock_interval секунд и ищет распределённые взаимоблокировки в кластере. Он собирает информацию о взаимных блокировках со всех узлов и ищет циклические зависимости между транзакциями. Если он обнаруживает взаимоблокировку, он разрешает её, отменяя один из внутренних процессов, участвующих в блокировке.

Чтобы отключить логику разбора распределённых взаимоблокировок, задайте для shardman.monitor_deadlock_interval значение 0.

По умолчанию: 2 (секунды).

postgres_fdw.remote_plan_cache (boolean) — EXPERIMENTAL

Включает удалённое кеширование планов для запросов FDW, созданных локально кешированными планами.

По умолчанию: off.

shardman.plan_cache_mem (integer) — EXPERIMENTAL

Указывает, сколько памяти может быть выделено каждому рабочему процессу для кешей удалённых планов.

По умолчанию: 0 (кеши отключены).

postgres_fdw.enable_always_shippable (boolean) — EXPERIMENTAL

Всегда разрешайте удалённое выполнение некоторых выражений. На данный момент это ограничено всего несколькими функциями. Для правильной работы этой функциональности все узлы должны иметь одинаковые параметры timezone.

Предупреждение

Не включайте этот параметр, если не все удалённые postgres_fdw управляются Shardman.

По умолчанию: false.

Примеры

Файл конфигурации для кластера с включённой аутентификацией scram-sha-256

Примечание

Исходный файл конфигурации должен быть создан с помощью следующей команды:

   shardmanctl config generate > sdmspec.json
   

Обратите внимание, что пример ниже представлен исключительно для сведения и мог устареть.

Ниже представлен пример содержимого файла конфигурации sdmspec.json:

{
   "ConfigVersion": "1",
   "Repfactor": 1,
   "PlacementPolicy": "cross",
   "PgSuAuthMethod": "scram-sha-256",
   "PgSuPassword": "changeMe",

   "PgSuUsername": "postgres",
   "PgReplAuthMethod": "scram-sha-256",
   "PgReplPassword": "changeMe",
   "PgReplUsername": "repluser",
   "ShardSpec": {
    "synchronousReplication": true,
    "usePgrewind": true,
    "pgParameters": {
     "csn_snapshot_defer_time": "300",
     "enable_csn_snapshot": "on",
     "enable_csn_wal": "true",
     "log_line_prefix": "%m [%r][%p]",
     "log_min_messages": "INFO",
     "log_statement": "none",
     "maintenance_work_mem": "1GB",
     "max_connections": "600",
     "max_files_per_process": "65535",
     "max_logical_replication_workers": "9",
     "max_prepared_transactions": "200",
     "max_wal_size": "4GB",
     "max_worker_processes": "16",
     "min_wal_size": "512MB",
     "postgres_fdw.subplan_pushdown": "off",
     "shardman.query_engine_mode": "text",
     "shardman.silk_num_workers": "8",
     "shared_buffers": "4GB",
     "shared_preload_libraries": "postgres_fdw, shardman"
    },
    "pgHBA": [
     "host replication postgres 0.0.0.0/0 scram-sha-256",
     "host replication postgres ::0/0 scram-sha-256"
    ],
    "automaticPgRestart": true,
    "masterDemotionEnabled": false
   },
   "FDWOptions": {
    "async_capable": "on",
    "batch_size": "100",
    "connect_timeout": "5",
    "fdw_tuple_cost": "0.2",
    "fetch_size": "50000",
    "tcp_user_timeout": "10000"
   }
}

Из этого файла конфигурации видно, что кластер Shardman, инициализированный этим файлом конфигурации, имеет значение Repfactor, равное 1 (одна реплика для каждого ведущего сервера). Файл конфигурации показывает, что в этом кластере созданы два специальных пользователя — суперпользователь postgres и пользователь репликации repluser с паролями ChangeMe. Они могут быть аутентифицированы, используя метод авторизации md5 или scram-sha-256. Одна операция выборки postgres_fdw позволяет получить до 50000 строк с удалённого сервера. Для стоимости выборки одной строки установлено достаточно большое значение, чтобы планировщик PostgreSQL рассматривал условия как привлекательные для выталкивания. Параметры pg_hba.conf разрешают пользователю postgres доступ из любого места с использованием протокола репликации; все остальные пользователи могут получить доступ к любой базе данных из любого места. Поскольку для defaultSUReplAccessMode не задано значение strict, утилиты автоматически добавляют записи, разрешающие пользователю PgSuUsername (postgres) доступ к любой базе данных из любого места и доступ к репликации пользователю PgReplUsername (repluser) из любого места.

Несколько важных параметров, специфичных для Shardman, задаются в хеш-таблице pgParameters, а именно:

wal_level

Для правильной работы Shardman должно быть установлено значение logical.

shared_preload_libraries

Должен включать расширения postgres_fdw и shardman в указанном порядке.

max_logical_replication_workers

Должно быть достаточно большим, поскольку процесс перебалансировки использует до max(max_replication_slots, max_logical_replication_workers, max_worker_processes, max_wal_senders)/3 параллельных потоков.

max_prepared_transactions

Должно быть достаточно большим, так как утилиты Shardman используют протокол 2PC. Если postgres_fdw.use_twophase имеет значение true, postgres_fdw также использует 2PC.

enable_csn_snapshot

Должна быть включена для достижения настоящего уровня изоляции REPEATABLE READ в распределённой системе.

csn_snapshot_defer_time

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

enable_partitionwise_aggregate
enable_partitionwise_join

Установите значение on, чтобы включить оптимизацию для секционированных таблиц.

Файл конфигурации для кластера с включённой аутентификацией по сертификату

Ниже представлен пример содержимого файла конфигурации sdmspec.json:

 {
    "ConfigVersion": "1",
    "Repfactor": 1,
    "PlacementPolicy": "cross",
    "PgSuAuthMethod": "scram-sha-256",
    "PgSuUsername": "postgres",
    "PgSuSSLKey": "/var/lib/postgresql/.ssh/client.key",
    "PgSuSSLCert": "/var/lib/postgresql/.ssh/client.crt",
    "PgReplAuthMethod": "scram-sha-256",
    "PgReplUsername": "repluser",
    "PgReplSSLKey": "/var/lib/postgresql/.ssh/repluser.key",
    "PgReplSSLCert": "/var/lib/postgresql/.ssh/repluser.crt",
    "PgSSLRootCert": "/var/lib/postgresql/.ssh/root.crt",
    "PgSSLMode": "verify-full",
    "ShardSpec": {
     "synchronousReplication": true,
     "usePgrewind": true,
     "pgParameters": {
      "ssl": "on",
      "ssl_cert_file": "/var/lib/postgresql/.ssh/server.crt",
      "ssl_key_file": "/var/lib/postgresql/.ssh/server.key",
      "ssl_ca_file": "/var/lib/postgresql/.ssh/ca.crt",
      "csn_snapshot_defer_time": "300",
      "enable_csn_snapshot": "on",
      "enable_csn_wal": "true",
      "log_line_prefix": "%m [%r][%p]",
      "log_min_messages": "INFO",
      "log_statement": "none",
      "maintenance_work_mem": "1GB",
      "max_connections": "600",
      "max_files_per_process": "65535",
      "max_logical_replication_workers": "9",
      "max_prepared_transactions": "200",
      "max_wal_size": "4GB",
      "max_worker_processes": "16",
      "min_wal_size": "512MB",
      "postgres_fdw.subplan_pushdown": "off",
      "shardman.query_engine_mode": "text",
      "shardman.silk_num_workers": "8",
      "shared_buffers": "4GB",
      "shared_preload_libraries": "postgres_fdw, shardman"
     },
     "strictUserHBA": true,
     "pgHBA": [
      "hostssl all postgres 0.0.0.0/0 cert clientcert=verify-full",
      "hostssl all repluser 0.0.0.0/0 cert clientcert=verify-full",
      "hostssl replication postgres 0.0.0.0/0 cert clientcert=verify-full",
      "hostssl replication postgres ::0/0 cert clientcert=verify-full",
      "hostssl replication repluser 0.0.0.0/0 cert clientcert=verify-full",
      "hostssl replication repluser ::0/0 cert clientcert=verify-full",
      "hostnossl all all 0.0.0.0/0 reject",
      "local postgres postgres scram-sha-256",
      "local replication repluser scram-sha-256"
     ],
     "automaticPgRestart": true,
     "masterDemotionEnabled": false
    },
    "FDWOptions": {
     "async_capable": "on",
     "batch_size": "100",
     "connect_timeout": "5",
     "fdw_tuple_cost": "0.2",
     "fetch_size": "50000",
     "tcp_user_timeout": "10000"
    }
 }
 

Параметры pgpro_stats

pgpro_stats.track_sharded (boolean)

Определяет, должно ли расширение pgpro_stats отслеживать и агрегировать распределённые запросы (то есть запросы к распределённой таблице).

По умолчанию: on.

pgpro_stats.pgss_max_nodes_tracked (integer)

Задаёт максимальное количество узлов, отслеживаемых pgpro_stats для фрагментов запроса.

Фактически устанавливает максимальное количество записей статуса, которые pgpro_stats может хранить для функции pgpro_stats_sdm_stats_updated. Не влияет на сбор статистики.

По умолчанию: 2048.

pgpro_stats.transport_compression (string)

Задаёт алгоритм сжатия при передаче статистики между узлами.

Если параметр указан, выбранный алгоритм используется для сжатия статистических записей, передаваемых узлами сегмента к координатору. Может принимать значения pglz, zlib, lz4, zstd или off.

По умолчанию: pglz.

pgpro_stats.enable_wait_counters (boolean)

Включает или отключает сбор статистики для счётчиков ожидания включением или отключением функций, которые вычисляют метрики событий ожидания.

По умолчанию: off.

pgpro_stats.enable_inval_msgs_counters (boolean)

Включает или отключает сбор статистики для счётчиков сообщений аннулирования включением или отключением функций, которые вычисляют метрики сообщений аннулирования.

Если этот параметр отключён, представление pgpro_stats_inval_status будет пустым.

По умолчанию: off.

pgpro_stats.enable_rusage_counters (boolean)

Включает или отключает сбор статистики для счётчиков использования ресурсов включением или отключением функций, которые вычисляют метрики использования ресурсов ОС.

По умолчанию: off.

См. также

shardmanctl