sdmspec.json
sdmspec.json — файл инициализации Shardman
Синтаксис
sdmspec.json
Описание
Расширение shardmanctl использует файл конфигурации sdmspec.json во время инициализации кластера Shardman. Пакет shardman-utils содержит пример файла конфигурации.
Файл sdmspec.json содержит основные пути файловой системы, используемые Shardman, глобальные параметры кластера, параметры, связанные с базой данных, например логины администраторов и пользователей репликации и методы их аутентификации, параметры FDW и конфигурацию сегментов (ShardSpec).
Обратите внимание, что существует ряд внутренних параметров Shardman, изменение которых пользователями может привести к разрушению кластера:
Параметр
shardman.cluster_uuidиспользуется для определения версии запущенного кластера, в который входит этот узел.Параметр
shardman.config_uuidопределяет версию конфигурации. Игнорируется, если задан с помощью команды shardmanctlconfig updateили shardmanctlinit.Параметр
shardman.manual_executionиспользуется для согласованной работы с глобальными объектами.Параметр
shardman.silk_never_restartзапрещает перезапуск процессов мультиплексора в случае ошибок.Параметр
shardman.pre_promote_modeиспользуется в механизме согласованного повышения резервного сервера до ведущего.
Список параметров
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). Этот параметр нельзя изменить после инициализации кластера.
AuthMethodМетод аутентификации, используемый администратором для подключения к СУБД. Может быть любым методом аутентификации, поддерживаемым PostgreSQL. В настоящее время рекомендуется использовать
scram-sha-256. Методmd5сейчас разрешён, но не рекомендован. Этот параметр нельзя изменить после инициализации кластера. Он должен быть расположен в отдельном блокеUsersдля каждого элемента массива.По умолчанию:
trust.GroupsМассив, который может иметь два возможных значения:
suдля суперпользователя илиreplдля пользователя репликации.HTTPЗадаёт параметры безопасного подключения по протоколу HTTP/HTTPS с помощью параметров
Port, задающего порт API, иPortMetrics, задающего порт метрик. Если эти порты одинаковые, API и метрики слушают один и тот же порт.По умолчанию:
15432.NameИмя пользователя. Создаётся при инициализации кластера. По умолчанию используется имя действительного пользователя, запустившего
shardmanctl init. Этот параметр нельзя изменить после инициализации кластера. Он должен быть расположен в отдельном блокеUsersдля каждого элемента массива.PasswordПароль пользователя. Можно изменить, используя shardmanctl
config update credentials. Должен быть расположен в отдельном блокеUsersдля каждого элемента массива.PgSuSSLCertКлиентский сертификат для администратора СУБД.
PgSSLRootCertРасположение файла корневого сертификата для подключения пользователя СУБД.
PgSuSSLKeyЗакрытый ключ клиента для администратора СУБД.
PgSSLModeРежим SSL для пользователя СУБД. Допустимые значения:
verify-caиverify-full.PgReplSSLCertКлиентский сертификат для пользователя репликации СУБД.
PgReplSSLKeyЗакрытый ключ клиента для пользователя репликации СУБД.
ShardSpecСпецификация кластера сегментов. За подробным описанием обратитесь к разделу
Параметры ShardSpec. Спецификацию можно изменить, используя shardmanctlconfig 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. По умолчанию разрешает доступ пользователю из группыsuиз любого места с методом аутентификацииAuthMethod. Если значениеdefaultSUReplAccessModeравноstrict, строкиpg_hba.confдолжны явно разрешать доступ пользователей из группsuилиreplсо всех узлов кластера 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.intervalWalReceiveCheckИнтервал, с которым запускается процесс получения сегментов WAL.
По умолчанию: 5s.
intervalLSNFinderИнтервал, с которым запускается процесс поиска LSN среди полученных LSN.
По умолчанию: 1m.
intervalWalApplyИнтервал, с которым запускается процесс применения новых файлов WAL.
По умолчанию: 1m.
intervalCheckLSNИнтервал, с которым запускается процесс проверки LSN.
По умолчанию: 2s.
timeoutApplyLSNПериод ожидания применения LSN.
По умолчанию: 1m.
intervalWalSyncArbiterИнтервал, с которым запускается процесс
arbiter.По умолчанию: 1m.
minSyncMonitorUnhealthyTimeoutВременной интервал, по истечении которого узел (и все процессы
keeper, связанные с этим узлом) будет считаться неработоспособным. Работает, только если для параметраminSyncMonitorEnabledустановлено значение true.По умолчанию:
30s.-
syncPointMonitorEnabled Включить отслеживающий процесс, который каждую минуту создаёт точку синхронизации, гарантируя, что кластер Shardman можно восстановить в согласованном состоянии на данный LSN. В каждой точке синхронизации состояние кластера согласованно, то есть все транзакции завершены. Если для этого параметра установлено значение true, PITR будет гарантированно работать. Если задано значение
true, история точки синхронизации сохраняется в etcd с ключомshardman/{cluster_name}/data/cluster/syncpoints.По умолчанию:
false.-
syncpointInterval Задаёт частоту создания точек синхронизации (секунды).
По умолчанию: 60s.
-
syncpointEnabled Включает процесс
monitor, который периодически создаёт точки синхронизации.По умолчанию:
true.-
syncpointLimit Количество сохраняемых последних точек синхронизации.
По умолчанию: 60.
-
dbWaitRewindTimeout Перед полной повторной синхронизацией реплики программное обеспечение кластера сначала пытается задействовать pg_rewind, поскольку операция перемотки выполняется значительно быстрее других подходов, когда база данных большая и кластеры отличаются лишь небольшой частью блоков. Параметр
dbWaitRewindTimeoutуказывает максимальное время работы для pg_rewind (примеры значений:5m,30s,1m30s).По умолчанию:
7m.additionalReplicationSlotsМассив имён слотов физической репликации, созданных на ведущем сервере. Каждое имя слота должно начинаться с префикса
stolon_.createSlotsOnFollowersЕсли задано значение
true, слоты физической репликации также создаются на резервных узлах.additionalSlotsLagLimitЛимит объёма, на который слоты репликации, определённыe параметром конфигурации
additionalReplicationSlots, могут отставать. Значение указывается числом с единицей измерения. Возможные единицы измерения:B(Б),kB(КБ),kiB(КиБ),MB(МБ),MiB(МиБ),GB(ГБ),GiB(ГиБ),TB(ТБ),TiB(ТиБ),PB(ПБ),PiB(ПиБ),EB(ЭБ),EiB(ЭиБ),ZB(ЗБ),ZiB(ЗиБ),YB(ЙБ) иYiB(ЙиБ). Например:100MB.pgParametersХеш-таблица, определяющая параметры PostgreSQL, включая параметры, специфичные для Shardman. Поддерживает следующие местозаполнители для параметров
postgres:{{dataDir}}для директории данных,{{keeperDir}}для каталога данныхkeeperв директорииdataDir,{{keeperName}}для имениkeeper,{{keeperID}}для идентификатораkeeper,{{host}},{{cluster}}для имени кластера,{{shard}}для имени сегмента,{{host}}для узла с работающим экземпляромpostgres.
Параметры PostgreSQL, специфичные для Shardman
Следующие параметры в pgParameters относятся к Shardman:
enable_csn_snapshot(boolean)Включает или отключает для снимка отслеживание видимости транзакции на основе последовательного номера фиксации (CSN).
PostgreSQL использует метку времени в качестве CSN, поэтому включение снимков на основе CSN может быть полезно для реализации глобальных снимков и глобальной видимости транзакций.
Когда этот параметр включён, PostgreSQL создаёт каталог
pg_csnвPGDATAдля отслеживания сопоставлений CSN и XID.По умолчанию:
off.enable_custom_cache_costs(boolean)Включает логику оценки стоимости плана. Это позволяет планировщику чаще выбирать общие планы с учётом устранения секций во время выполнения запроса.
По умолчанию:
off.enable_sql_func_custom_plans(boolean)Включение этого параметра позволяет создавать специализированные планы для выполнения функций на языке SQL. Эти планы зависят от значений параметров.
Планы запросов могут кешироваться в рамках одного выполнения запроса. Сначала план создаётся пять раз для разных значений параметров. После этого создаётся общий план, не зависящий от значений параметров. Если цена специализированного и общего плана отличается незначительно, общий план будет добавлен в кеш и использован в дальнейшем. Однако использование специализированного плана позволяет более эффективно отсекать запросы к секциям сегментированной таблицы, если выбор используемых секций зависит от параметров запроса.
По умолчанию:
off.enable_merge_append(boolean)Включает использование планов
MergeAppendпланировщиком запросов.По умолчанию:
on.enable_async_merge_append(boolean)Включает или отключает использование планировщиком планов с асинхронным добавлением данных слиянием. По умолчанию имеет значение
on(вкл.).csn_snapshot_defer_time(integer)Указывает минимальный возраст разрешённых для очистки записей в секундах.
Все глобальные транзакции должны начинаться на всех узлах-участниках в течение количества секунд, заданного в параметре
csn_snapshot_defer_time, в противном случае они прерываются ошибкой «csn snapshot too old».По умолчанию:
15.csn_commit_delay(integer)Задаёт максимально возможное значение рассогласования часов (в наносекундах) в кластере. Добавляет задержку перед каждой фиксацией в системе для обеспечения внешней согласованности. Если установлено значение 0, внешняя согласованность не гарантируется. Значения могут дополняться суффиксами
ns,us,msиs.По умолчанию:
0.csn_lsn_map_size(integer)Размер карты CSNLSNMap.
Запись фиксации каждой завершённой транзакции в Shardman содержит назначенный
CSNдля этой транзакции. Это значение вместе сLSNэтой записи образует пару значений(CSN, LSN). Каждый из узлов кластера хранит определённое количество таких пар в оперативной памяти в специальной структуре — картеCSNLSNMap. Эта карта используется для получения точки синхронизации. За дополнительной информацией обратитесь к разделу «Точки синхронизации и согласованное резервное копирование» в главе Внутреннее устройство.По умолчанию:
1024.csn_max_shift_error(boolean)При проверке значения
csn_max_shiftи его превышении пишет ошибку.По умолчанию:
off.csn_max_shift(integer)Максимальный сдвиг CSN в секундах для распределённых запросов и импортированных снимков. При превышении значения
csn_max_shiftвыводится ошибка или предупреждение. При нулевом значении проверка не запускается.По умолчанию:
15(секунд).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.crash_info(boolean)Если установлено значение по умолчанию
on, Shardman записывает диагностическую информацию о сбое сервера в файл.По умолчанию:
on.crash_info_dump(text)Указывает разделённый запятыми список текстовых строк, содержащих источники данных для аварийных дампов. Возможны следующие значения строк:
queries— тексты запросов.memory_context— контекст памяти PostgreSQL (за подробностями обратитесь к разделу Управление памятью).system— информация об ОС.module— информация о модулях, загруженных в процессpostgres.cpuinfo— информация о процессоре: число ядер, набор инструкций и т. д.cpu_context:Регистры контекста процессора.
Общая информация об ошибке: номер сигнала, информация о коде сигнала, pid, pid родительского процесса, идентификатор пользователя и т. д.
virtual_memory— информация о виртуальной памяти.instruction_pointer— байты около RIP (return instruction pointer, указатель возврата инструкции, который указывает на адрес памяти, по которому можно судить о прогрессе выполнения программы в памяти).stack— размер стека (байты). Стек выгружается в отдельный файл из каталога, куда записывается диагностическая информация о сбоях сервера (по умолчанию). Этот файл называется так же, как и журнал сбоев, но имеет расширениеPGDATA/crash_info.data. Адреса верхней и нижней границ стека записываются в журнал сбоев.
По умолчанию:
system,module,queries,cpu_context,instruction_pointercrash_info_location(string)Указывает каталог, в котором должна храниться информация о сбое сервера. При значении
stderrинформация о сбое отправляется в каталог stderr. Если в этом параметре указана пустая строка'', используется каталог$PGDATA/crash_info. Если нужно сохранять файлы в другом месте, заранее создайте целевой каталог и выдайте соответствующие права.По умолчанию:
''.crash_info_timer(boolean)Включает или отключает выгрузку состояния длительных запросов по таймеру, что позволяет профилировать такие запросы. Таймер запускается по интервалу, значение которого указывается в crash_info_timer_interval, и измеряет время обработки запроса. Когда время выполнения запроса превышает пороговое значение, указанное в crash_info_query_threshold, состояние запроса выгружается на диск. Значение по умолчанию —
off. Чтобы таймер работал, для crash_info_dump должно быть установлено значение по крайней мереqueries. Изменить этот параметр могут только суперпользователи командойSETв текущем сеансе или глобально в файле конфигурации.Этот параметр можно задать только при запуске сервера в файле
postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.crash_info_timer_interval(integer)Задаёт временной интервал для запуска таймера (в миллисекундах). Значение по умолчанию —
1000. Изменить этот параметр могут только суперпользователи командойSETв текущем сеансе или глобально в файле конфигурации.Этот параметр можно задать только при запуске сервера в файле
postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.crash_info_query_threshold(integer)Задаёт пороговое значение времени обработки запроса (в миллисекундах). При достижении значения состояние запроса выгружается на диск. Значение по умолчанию —
3000. Изменить этот параметр могут только суперпользователи командойSETв текущем сеансе или глобально в файле конфигурации.Этот параметр можно задать только при запуске сервера в файле
postgresql.conf. Чтобы перечитать значение параметра, перезапустите сервер или отправьте сигнал SIGHUP главному серверному процессу.shardman.context_log(bool)Протоколирует удалённые контексты. Если включён, в случае ошибки выводит поле
Remote CONTEXT. Обратите внимание, что если уровень протоколирования для стандартного журналаlog_verbosity=terse, то параметрshardman.context_logбудет отключён автоматически.По умолчанию:
on.postgres_fdw.enforce_foreign_join(boolean)Включает альтернативные оценки стоимости стороннего соединения, что значительно повышает вероятность того, что соединение нескольких сторонних таблиц, ссылающихся на один и тот же сервер, будет протолкнуто. Стоимость исходного соединения оценивается как
(1 - 1/(cost + 1)), гдеcost— это исходная предполагаемая стоимость этого удалённого соединения.По умолчанию:
off.postgres_fdw.foreign_explain(enum)Определяет, как включать вывод команды
EXPLAINс удалённых серверов, если план запроса содержит узлыForeignScan. Возможные значения:noneне включает выводEXPLAINс удалённых серверов,fullвключает выводEXPLAINс удалённых серверов,collapsedвключает выводEXPLAINтолько для первого узлаForeignScanпод узламиAppend/MergeAppend.По умолчанию:
collapsed.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.postgres_fdw.estimate_indexscan(boolean)Включает оценку стоимости сторонних сканирований так, как если бы они выполнялись по индексу.
При отключении данного параметра стоимость сканирования сторонней таблицы оценивается как при последовательном сканировании с добавлением стоимости передачи данных и локальной фильтрации, если некоторые фильтры применяются локально. При включении параметра любое удалённое сканирование оценивается как сканирование индексов, если есть подходящие индексы.
Если сторонняя таблица является частью сегментированной таблицы, то информация о её индексах берётся из случайной локальной секции сегментированной таблицы. Это происходит из предположения, что распределение данных между всеми секциями сегментированной таблицы происходит равномерно, а определения локальных и удалённых секций совпадают.
Выполнение удалённого сканирования как сканирования индексов делает стоимость стороннего сканирования сопоставимой со стоимостью локального сканирования, что может стать решающим при дальнейшем выборе пути. Обратите внимание, что такая оценка увеличивает стоимость планирования, а потому не рекомендуется к использованию для простых запросов.
По умолчанию:
off.postgres_fdw.additional_ordered_paths(boolean)Когда этот параметр включён, сортировка на стороне удалённого сервера будет рассматриваться, если возможно её использование для выполнения операции
MergeJoinилиMergeAppend. Параметр по умолчанию включён в новых инсталляциях, но при обновлении кластера требуется явное включение.shardman.broadcast_ddl(boolean)Задаёт поведение, при котором расширение Shardman транслирует операторы DDL для всех групп репликации.
Если этот параметр включён, расширение Shardman транслирует поддерживаемые операторы DDL для всех групп репликации, если это имеет смысл для этих операторов. Это поведение можно включить/отключить в любой момент. Этот параметр не учитывается, если он установлен в файле конфигурации. Обратите внимание, что это не распространяется на последовательности — они создаются на каждом сегменте отдельно.
По умолчанию:
off.shardman.enable_limit_pushdown(boolean)Включает выталкивание ограничительных предложений через нижележащие присоединения. Если этот параметр включён, оптимизатор Shardman попытается передать ограничительное предложение подпутям нижележащего узла плана
Append/MergeAppend, если они ссылаются на сторонние таблицы postgres_fdw. Эта оптимизация работает только для плановSELECT, когда параметр ограничения представлен в виде константы или параметра. Она также ограничена для путейAppend, соответствующих секционированной таблице.По умолчанию:
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.sync_cluster_settings(boolean)Включает синхронизацию всех выставленных пользователем в кластере параметров конфигурации. Параметры распространяются при каждом удалённом запросе.
По умолчанию:
on.shardman.sync_cluster_settings_blacklist(boolean)Исключает параметры удалённого кластера, которые не нужно синхронизировать.
По умолчанию: конфигурационные параметры локальной системы, которые никогда не синхронизируются.
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_tracepoints(bool)Включает трассировку прохождения запросов через транспорт Silk. Результаты трассировки выводятся командой
EXPLAINсо значениемONпараметраANALYZE.По умолчанию:
off.shardman.silk_num_workers(integer)Количество фоновых рабочих процессов, выделенных для распределённого выполнения. Значение этого параметра должно быть меньше, чем значение
max_worker_processes(включая вспомогательные рабочие процессы postgres).По умолчанию:
2.shardman.silk_stream_work_mem(integer)Задаёт базовый максимальный объём памяти, который будет использоваться потоком Silk (как размер буфера), прежде чем будут задействованы временные файлы на диске. Если это значение задаётся без единиц измерения, оно считается заданным в килобайтах.
Обратите внимание, что в большинстве запросов могут быть несколько одновременных операций выборки, обычно по одной на каждую удалённую секцию сегментированной таблицы, если таковые имеются. Как правило для операции выборку задействовано столько памяти, сколько задано в данном значении, по достижении которого запись начинается во временные файлы. Кроме того, несколько таких операций могут выполнятся одновременно в нескольких сеансах. Таким образом общий объём памяти, используемый для буфера Silk, может в несколько раз превышать значение
shardman.silk_stream_work_memи соотноситься со значением параметра shardman.num_parts. Поэтому об этом стоит помнить при выставлении значения.По умолчанию:
16МБ.shardman.silkworm_fetch_size(integer)Количество строк в порции, которую рабочий процесс
silkwormизвлекает и отправляет мультиплексору в виде результата за одну итерацию чтения.По умолчанию: 100.
shardman.silk_unassigned_job_queue_size(integer)Размер очереди заданий, которые ещё не были назначены рабочим процессам
silkwormмультиплексора, если все рабочие процессы заняты.Значение по умолчанию: 1024.
shardman.silk_max_message(integer)Максимальный размер сообщения (в байтах), которое можно передать через Silk. Обратите внимание, что данный параметр не ограничивает максимальный размер результата, возвращаемого запросом. Он относится только к сообщениям для рабочих процессов. Увеличение этого параметра приведёт к пропорциональному увеличению памяти, потребляемой Shardman. Не рекомендуется менять значение по умолчанию без острой необходимости.
По умолчанию: 524288.
shardman.silk_hello_timeout(integer)Таймаут ожидания ответа (в секундах) при выполнении процедуры согласования между мультиплексорами разных узлов.
По умолчанию: 3.
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.
По умолчанию:
none.Чтобы задать мандат, необходимо выполнить следующую команду один раз после установки postgres:
$sudo setcap cap_sys_nice+ep /opt/pgpro/sdm-14/bin/postgresПри необходимости замените
/opt/pgpro/sdm-14/bin/postgresна правильный путь к двоичному файлу postgres. Также обратите внимание, что файловая система должна поддерживать расширенные атрибуты файлов. Необходимо установить такую поддержку для каждого узла в кластере, чтобы получить полный эффект.В ядре Linux существует механизм «real-time throttling», который предназначен для предотвращения монополизации вычислительного ядра задачами с политиками планирования в реальном времени (например,
SCHED_FIFO). Это гарантирует, что другие задачи с более низкими приоритетами, обычно планируемые в рамках политикиSCHED_OTHER, всё равно получат часть вычислительного времени. Этот механизм управляется двумя параметрами, которые доступны через файловую системуprocили механизмsysctl:Параметр
/proc/sys/kernel/sched_rt_period_usустанавливает длительность периода планирования в микросекундах. В течение этого периода как задачи реального времени, так и прочие задачи делят вычислительное время между собой.Параметр
/proc/sys/kernel/sched_rt_runtime_usопределяет, какая часть периода планирования выделяется для задач реального времени (сSCHED_FIFO). Оставшееся время отводится для прочих задач (SCHED_OTHER).
В типичной и допустимой конфигурации для Shardman установлены следующие значения этих параметров:
# cat /proc/sys/kernel/sched_rt_period_us 1000000 # cat /proc/sys/kernel/sched_rt_runtime_us 950000
Такая конфигурация позволяет задачам реального времени использовать до 950 миллисекунд каждой секунды, оставляя 50 миллисекунд для прочих задач.
Однако в некоторых дистрибутивах Linux значения по умолчанию для этих параметров могут быть настолько малы (или даже равны нулю), что задачи реального времени получают очень мало или вообще не получают вычислительного времени. Это может сделать планирование неэффективным или помешать применению конфигурации. Например, попытка вручную установить для задачи приоритет
SCHED_FIFOс помощьюchrtможет привести к подобной ошибке:$ sudo chrt -f -p 2 $(pgrep -f silkroad)chrt: failed to set pid 1897706's policy: Operation not permittedЭта ошибка указывает на то, что параметры ядра настроены неправильно. В таких случаях установите для параметров рекомендуемые значения:
echo 1000000 > /proc/sys/kernel/sched_rt_period_us echo 950000 > /proc/sys/kernel/sched_rt_runtime_us
Или добавьте соответствующие значения в
/etc/sysctl.confи перезагрузите конфигурацию с помощью командыsysctl -p:kernel.sched_rt_period_us = 1000000 kernel.sched_rt_runtime_us = 950000
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.silk_flow_control(boolean)Управляет режимом работы с событиями чтения. Возможные значения:
none,round_robinиshortest_job_first.Режим
noneне предполагает управления и дополнительной нагрузки. Однако в этом режиме возможна монополизация канала одним распределённым запросом.В режиме
round_robinв каждом цикле событий те события, что были созданы раньше, обрабатываются первыми. При включении все процессы группируются таким образом, что клиентские процессы обрабатываются первыми.В режиме
shortest_job_firstтрафик контролируется полностью. При включении все процессы группируются, при этом клиентские процессы и процессы с наименьшим трафиком в текущем сеансе обрабатываются первыми.По умолчанию:
round_robin.shardman.silk_track_time(boolean)Включает или выключает сбор метрик с префиксом
transferred_и временных метрик (с префиксамиread_efd_,write_efd_иsort_time_). Если параметр выключен, всем метрикам задаётся значение0.По умолчанию:
off.shardman.silk_tracelog(bool)Включает или отключает протоколирование Silk.
По умолчанию:
off.shardman.silk_tracelog_categories(string)Определяет уровень протоколирование для сообщений Silk.
По умолчанию:
streams, routing, events.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(кеши отключены).shardman.gt_batch_size(integer) —Определяет размер буфера для команд
INSERTиDELETEв глобальных таблицах.По умолчанию:
64K.track_fdw_wait_timing(boolean)Статистика сетевого ожидания операций между кластерами в миллисекундах. Выводится командой
EXPLAINс параметромnetworkили через представление pgpro_stats_sdm_statements pgpro_stats.По умолчанию:
on.track_xact_time(boolean)Включает или отключает сбор статистики для времени, затраченного на транзакцию.
По умолчанию:
off.enable_non_equivalence_filters(boolean)Позволяет оптимизатору генерировать дополнительные неэквивалентные условия с использованием классов эквивалентности.
По умолчанию:
off.optimize_row_in_expr(boolean)Позволяет оптимизатору генерировать дополнительные условия из выражения
IN ().По умолчанию:
off.
Примеры
Файл конфигурации для кластера с включённой аутентификацией scram-sha-256
Примечание
Исходный файл конфигурации должен быть создан с помощью следующей команды:
shardmanctl config generate > sdmspec.json
Обратите внимание, что пример ниже представлен исключительно для сведения и мог устареть.
Ниже представлен пример содержимого файла конфигурации sdmspec.json:
{
"ConfigVersion": "1",
"Repfactor": 1,
"PlacementPolicy": "manual",
"PGsInitialPort": 5432,
"SilkInitialPort": 8000,
"HTTP": {
"Port": 15432,
"PortMetrics": 15432
},
"Users": [
{
"Name": "postgres",
"Groups": [ "su"],
"AuthMethod": "scram-sha-256",
"Password": "changeMe"
},
{
"Name": "repluser",
"Groups": ["repl"],
"AuthMethod": "scram-sha-256",
"Password": "changeMe"
}
],
"ShardSpec": {
"synchronousReplication": true,
"usePgrewind": true,
syncPointEnabled": true,
"syncpointLimit": 60,
"syncpointInterval": "60s",
"pgParameters": {
"csn_snapshot_defer_time": "300",
"enable_csn_snapshot": "on",
"enable_csn_wal": "true",
"shardman.query_engine_mode": "text",
"shardman.silk_num_workers": "8",
"max_connections": "600",
"max_files_per_process": "65535",
"max_logical_replication_workers": "14",
"max_prepared_transactions": "200",
"max_worker_processes": "24",
"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)/3max_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_aggregateenable_partitionwise_joinУстановите значение
on, чтобы включить оптимизацию для секционированных таблиц.
Файл конфигурации для кластера с включённой аутентификацией по сертификату
Ниже представлен пример содержимого файла конфигурации sdmspec.json:
{
"ConfigVersion": "1",
"HTTP": {
"Port": 15432,
"PortMetrics": 15432
"SSLKey": "/pgpro/ssl/server.key",
"SSLCert": "/pgpro/ssl/server.crt"
},
"Users": [
{
"Name": "postgres",
"SSLKey": "/var/lib/postgresql/.ssh/client.key",
"SSLCert": "/var/lib/postgresql/.ssh/client.crt",
"Groups": ["su"],
"AuthMethod":"scram-sha-256"
},
{
"Name": "repluser",
"SSLKey": "/var/lib/postgresql/.ssh/repluser.key",
"SSLCert": "/var/lib/postgresql/.ssh/repluser.crt",
"Groups": ["repl"],
"AuthMethod":"scram-sha-256"
}
],
"ShardSpec": {
"synchronousReplication": true,
"usePgrewind": true,
"syncPointEnabled": true,
"syncpointLimit": 60,
"syncpointInterval": "60s",
"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"
}
}
Файл конфигурации для катастрофоустойчивого кластера
У катастрофоустойчивого кластера (КУК) есть ряд параметров, которые необходимо включить в файл конфигурации.
StandbyModeпоказывает, включён ли режимstandbyв кластере. Включить его можно только командойshardmanctl cluster standby enable, а выключить командойshardmanctl cluster standby disable.slotNameотображает имя слота, созданного на экземпляре ведущего кластера. Такой слот принимает сегменты WAL и должен быть в списке слотовadditionalReplicationSlotsведущего кластера.primaryConnections— сопоставление соединений между экземплярами ведущего и резервного кластеров.maxWalReadersзадаёт максимальное количество потоков для разбора сегментов WAL и поиска по LSN.По умолчанию: 100.
Ниже представлен пример содержимого файла конфигурации sdmspec.json:
{
"ConfigVersion": "1",
"Repfactor": 1,
"PlacementPolicy": "manual",
"PgSuAuthMethod": "scram-sha-256",
"PgSuUsername": "postgres",
"PgSuPassword": "Enter_YOUR_Password!",
"PgReplAuthMethod": "scram-sha-256",
"PgReplUsername": "repluser",
"PgReplPassword": "Enter_YOUR_Password!",
"ShardSpec": {
"additionalReplicationSlots": [
"stolon_geo_slot"
],
"createSlotsOnFollowers": true,
"additionalSlotsLagLimit": "1GiB",
"synchronousReplication": true,
"minSynchronousStandbys": 0,
"maxSynchronousStandbys": 4,
"usePgrewind": true,
"syncPointEnabled": true,
"syncpointLimit": 60,
"syncpointInterval": "60s",
"pgParameters": {
"csn_snapshot_defer_time": "300",
"enable_csn_snapshot": "on",
"enable_csn_wal": "true",
"log_statement":"none",
"log_line_prefix":"%m [%r][%p]",
"log_destination": "stderr",
"log_filename": "pg.log",
"logging_collector": "on",
"log_checkpoints": "false",
"log_min_messages": "INFO",
"log_min_error_statement":"INFO",
"maintenance_work_mem": "1GB",
"max_connections": "600",
"max_files_per_process": "65535",
"max_logical_replication_workers": "12",
"max_prepared_transactions": "200",
"max_wal_size": "4GB",
"max_worker_processes": "18",
"min_wal_size": "512MB",
"postgres_fdw.subplan_pushdown": "off",
"shardman.query_engine_mode": "text",
"shardman.silk_num_workers": "8",
"shared_buffers": "4GB",
"ptrack.map_size": "16",
"shared_preload_libraries": "postgres_fdw, shardman, ptrack"
},
"pgHBA": [
"local postgres postgres peer",
"local replication repluser scram-sha-256",
"host all postgres 0.0.0.0/0 scram-sha-256",
"host all postgres ::0/0 scram-sha-256",
"host replication repluser 0.0.0.0/0 scram-sha-256",
"host replication repluser ::0/0 scram-sha-256",
"host replication postgres 0.0.0.0/0 scram-sha-256",
"host replication postgres ::0/0 scram-sha-256"
],
"strictUserHBA": true,
"forceSuUserLocalPeerAuth": true,
"automaticPgRestart": true,
"masterDemotionEnabled": false
},
"StandbySettings": {
"maxWalReaders": 100,
"primaryConnections": {
"shard-1": {
"node1r": {
"slotName": "stolon_replication_slot",
"connString": "dbname=postgres host=shrn1 password=61f0cb5ff27c port=5432 user=postgres"
}
},
"shard-2": {
"node2r": {
"slotName": "stolon_replication_slot",
"connString": "dbname=postgres host=shrn2 password=61f0cb5ff27c port=5432 user=postgres"
}
}
}
}
"FDWOptions": {
"async_capable": "on",
"batch_size": "100",
"connect_timeout": "5",
"fdw_tuple_cost": "0.2",
"fetch_size": "50000",
"tcp_user_timeout": "10000"
}
}Файл конфигурации для резервного кластера с интервалами и тайм-аутами
Если вам нужно настроить интервалы и таум-ауты для резервного кластера, файл конфигурации sdmspec.json должен иметь следующий вид:
{
"ConfigVersion": "1",
"Repfactor": 1,
"PlacementPolicy": "cross",
"Users": [
{
"Name": "postgres",
"Password": "7445a88ba43d",
"AuthMethod": "scram-sha-256",
"Groups": ["su"]
},
{
"Name": "repluser",
"Password": "7445a88ba43d",
"AuthMethod": "scram-sha-256",
"Groups": ["repl"]
}
],
"HTTP": {
"Port": 15432,
"PortMetrics": 15432
},
"ShardSpec": {
"additionalReplicationSlots": ["stolon_geo_slot"],
"createSlotsOnFollowers": true,
"syncPointEnabled": true,
"synchronousReplication": true,
"minSynchronousStandbys": 0,
"maxSynchronousStandbys": 4,
"usePgrewind": true,
"pgParameters": {
"csn_snapshot_defer_time": "300",
"enable_csn_snapshot": "on",
"enable_csn_wal": "true",
"log_statement":"none",
"log_line_prefix":"%m [%r][%p]",
"log_destination": "stderr",
"log_filename": "pg.log",
"logging_collector": "on",
"log_checkpoints": "false",
"log_min_messages": "INFO",
"log_min_error_statement":"INFO",
"maintenance_work_mem": "1GB",
"max_connections": "600",
"max_files_per_process": "65535",
"max_logical_replication_workers": "12",
"max_prepared_transactions": "200",
"max_wal_size": "4GB",
"max_worker_processes": "24",
"min_wal_size": "512MB",
"shardman.query_engine_mode": "text",
"shardman.silk_num_workers": "8",
"shared_buffers": "4GB",
"ptrack.map_size": "16",
"shared_preload_libraries": "postgres_fdw, shardman, ptrack"
},
"pgHBA": [
"host replication postgres 0.0.0.0/0 scram-sha-256",
"host replication postgres ::0/0 scram-sha-256"
],
"masterDemotionEnabled": false,
"automaticPgRestart": true
},
"FDWOptions": {
"async_capable": "on",
"batch_size": "100",
"connect_timeout": "5",
"fdw_tuple_cost": "0.2",
"fetch_size": "50000",
"tcp_user_timeout": "10000"
},
"StandbySettings":{
"maxWalReaders": 100,
"intervalWalReceiveCheck": "5s",
"intervalLSNFinder": "1m",
"intervalWalApply": "1m",
"intervalCheckLSN": "2s",
"timeoutApplyLSN": "1m",
"intervalWalSyncArbiter": "1m"
}
}Параметры 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.pgpro_stats.track_shardman_connections(enum)Включает или отключает обработку операторов Shardman. У данного параметра есть три возможных значения:
noneбез обработки,normalized(значение по умолчанию) для обработки в обобщённом виде иallдля обработки всех операторов.