shardmanctl

shardmanctl — вспомогательный клиент командной строки и средство развёртывания Shardman

Синтаксис

shardmanctl [общие_параметры] backup --datadir каталог [ --maxtasks число_заданий]

shardmanctl [общие_параметры] daemon check -n | --nodes имена_узлов:порт

shardmanctl [общие_параметры] cleanup [ -p | --processrepgroups ] --after-node-operation --after-rebalance

shardmanctl [общие_параметры] config generate [ -f | --file имя_файла]

shardmanctl [общие_параметры] config verify [ -f | --file имя_файла]

shardmanctl [общие_параметры] config get

shardmanctl [общие_параметры] config update [[ -f | --file файл_конфигурации_stolon|файл_конфигурации_shardman] | текст_конфигурации [ --force ] [ -p | --patch ] [ -w | --wait длительность]]

shardmanctl [общие_параметры] config update fdw [ -y | --yes ]

shardmanctl [общие_параметры] cluster repfactor set --value значение

shardmanctl [общие_параметры] cluster start

shardmanctl [общие_параметры] cluster stop [ -y | --yes ]

shardmanctl [общие_параметры] cluster topology [ -f | --format table|json|text ]

shardmanctl [общие_параметры] forall --sql запрос [ --twophase]

shardmanctl [общие_параметры] getconnstr --all

shardmanctl [общие_параметры] init [ -y | --yes ] [ -f | --spec-file имя_файла_конфигурации] | текст_конфигурации

shardmanctl [общие_параметры] intcheck [ -s | --system ] [ -c | --catalog ] [ -u | --user ] [ -o | --output ] [ -n | --node узел]

shardmanctl [общие_параметры] load [ -b | --batch-size предел_числа_строк] [ --destination-fields список_полей] [ --distributed-keys список_типов_ключей] [ -D | --delimiter символ] [ --null_marker строка] [ -e | --escape символ] [ -f | --file входной_файл] [ -F | --format text | csv ] [ -j | --jobs число_заданий] [ -q | --quote символ] [ --reject-file имя_файла] [ --schema имя_файла] [ --source file | postgres ] [ --source-connstr строка_подключения] [ --source-fields список_полей] [ --source-table таблица|представление|функция] [ -t | --table целевая_таблица] [ -h | --help ]

shardmanctl [общие_параметры] nodes add -n | --nodes имена_узлов [ --no-rebalance]

shardmanctl [общие_параметры] nodes start -n | --nodes имена_узлов [ --no-wait]

shardmanctl [общие_параметры] nodes restart -n | --nodes имена_узлов [ --no-wait]

shardmanctl [общие_параметры] nodes stop -n | --nodes имена_узлов [ --no-wait]

shardmanctl [общие_параметры] nodes replace --old старый_узел --new новый_узел

shardmanctl [общие_параметры] nodes rm -n | --nodes имена_узлов

shardmanctl [общие_параметры] probackup [ init | archive-command | backup | checkdb | delete | merge | restore | set-config | show | validate ] [ subcommand options]

shardmanctl [общие_параметры] rebalance [ -f | --force ]

shardmanctl [общие_параметры] recover [ --info файл] [ --dumpfile файл] [ --shard сегмент] [ --metadata-only] [ --schema-only] [ --timeout секунды]

shardmanctl [общие_параметры] restart [ -y | --yes ]

shardmanctl [общие_параметры] set pgParam1=value1 [pgParam2=value2 [...]] [ -y | --yes ] [ -w | --wait длительность] [ -f | --force ]

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента add -n | --node имена_узлов

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента rm -n | --node имена_узлов [ -f | --force ]

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента switch [ --new-master имена_узлов]

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента start [ --no-wait ]

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента stop

shardmanctl [общие_параметры] --shard -s | --shard имя_сегмента replicas reinit [ --no-wait ] [ -y | --yes ] [ -n | --node имена_узлов]

shardmanctl [общие_параметры] status [ --filter все | словарь | ведущий_сервер | метаданные | группа_репликации | shardmand | хранилище | топология ] [ -f | --format текст | json ] [ -s | --sort узел | группа_репликации | статус ]

shardmanctl [общие_параметры] status transactions [ -r | --repgroup имя_группы_репликации]

shardmanctl [общие_параметры] store dump [ -f | --file имя_файла]

shardmanctl [общие_параметры] store get [ -a | --alias кластер | ковш | группы_репликации | конфигурация_stolon | конфигурация ] [ -k | --key имя_ключа] [ -f | --file имя_файла]

shardmanctl [общие_параметры] store keys

shardmanctl [общие_параметры] store set [ -a | --alias кластер | ковш | группы_репликации | конфигурация_stolon | конфигурация ] [ -k | --key имя_ключа] [ -f | --file имя_файла]

shardmanctl [общие_параметры] store lock [ -f | --format текст | json ]

shardmanctl [общие_параметры] tables sharded info [ -t | --table таблица ]

shardmanctl [общие_параметры] tables sharded list

shardmanctl [общие_параметры] tables sharded norebalance

shardmanctl [общие_параметры] tables sharded partmove [ -t | --table таблица ] [ -s | --shard имя_сегмента ] [ -p | --partnum номер_секции ]

shardmanctl [общие_параметры] tables sharded rebalance [ -t | --table таблица ] [ --skip-run-rebalance ]

shardmanctl [общие_параметры] upgrade

shardmanctl [общие_параметры] bench init [ --schema-type single|simple|shardman|custom ] [ -S | --schema-file имя_файла] [ -s | --scale значение_масштабирования] [ --partitions значение_секций] [ -n | --no-vacuum ] [ -F | --fillfactor значение_коэффициента_заполнения]

shardmanctl [общие_параметры] bench run [ --schema-type single|simple|shardman|custom ] [ -f | --file имя_файла] [ -c | --client значение_клиента] [ -C | --connect ] [ --full-output ] [ -j | --jobs число_процессов] [ -T | --time секунды] [ -t | --transactions число_транзакций]

shardmanctl [общие_параметры] bench cleanup

shardmanctl [общие_параметры] bench generate [ -c | --config файл_конфигурации] [ -o | --output-file имя_файла]

Здесь общие_параметры могут принимать следующие значения:

[ --cluster-name имя_кластера ] [ --log-level error | warn | info | debug ] [ --monitor-port порт] [ --retries число_повторов] [ --session-timeout секунды] [ --store-endpoints адреса_хранилища] [ --store-ca-file файл_сертификата_ca] [ --store-cert-file файл_сертификата_клиента] [ --store-key частный_ключ_клиента] [ --store-timeout длительность] [ --version] [ -h | --help ]

Описание

shardmanctl — это утилита для управления кластером Shardman.

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

Команда backup используется для резервного копирования кластера Shardman. Резервная копия представляет собой каталог с базовыми копиями всех групп репликации и файлами WAL, необходимыми для восстановления. Метаданные etcd сохраняются в файле etcd_dump. Файл backup_info создаётся во время резервного копирования и содержит описание копии. Подробнее логика работы команды backup описана в разделе Резервное копирование кластера приложением pg_basebackup. Использование команды описано в Подразделе «Резервное копирование кластера Shardman».

Команда cleanup используется для очистки после сбоя команды nodes add или команды rebalance утилиты shardmanctl . Окончательные изменения в хранилище etcd вносятся в конце выполнения команды. Это упрощает процесс очистки. Во время очистки неполные определения звена и определения соответствующих групп репликации удаляются из метаданных etcd. Определения соответствующих сторонних серверов удаляются из метаданных СУБД остальных групп репликации. Поскольку процесс cleanup может удалять данные, по умолчанию инструмент работает исключительно в режиме отчёта: он показывает только те действия, которые необходимо выполнить во время фактической очистки. Для выполнения реальной очистки нужно добавить ключ -p. Использование команды подробно описано в Подразделе «Выполнение очистки».

Команда daemon check используется, чтобы проверить, что демон shardmand работает на узлах, указанных в параметре --nodes, и настроен для того же кластера, что и shardmanctl . Использование команды подробно описано в Подразделе «Проверка работы службы shardmand на узлах».

Команда init используется для регистрации нового кластера Shardman в хранилище etcd или переинициализации существующего (будет задана новая конфигурация кластера, удалены все данные и узлы). В режиме инициализации утилита shardmanctl считывает спецификацию кластера, обрабатывает её и сохраняет в хранилище etcd как части двух документов JSON: ClusterSpec — как часть shardman/cluster0/data/cluster и LadleSpec — как часть shardman/cluster0/data/ladle (cluster0 — это имя кластера по умолчанию, используемое утилитами Shardman). Общие параметры, связанные с хранилищем etcd, например --store-endpoints, также сохраняются в хранилище etcd и передаются всем службам Shardman, запущенным расширением shardmand. Формат файла инициализации Shardman подробно описан в разделе sdmspec.json, а использование команды init — в «Регистрация кластера Shardman».

Команда config generate используется для создания шаблона sdmspec.json по умолчанию. Результат записывается в стандартный вывод. Чтобы записать результат в файл, используйте флаг -f имя_файла. Формат файла инициализации Shardman описан в sdmspec.json.

Команда config verify используется для проверки корректности входного файла инициализации Shardman. По умолчанию конфигурация считывается со стандартного ввода. Чтобы конфигурация читалась из файла, используйте флаг -f имя файла. За описанием формата файла инициализации Shardman обратитесь к sdmspec.json.

Команда config get используется для вывода текущей полной конфигурации кластера. Текущая конфигурация кластера берётся из хранилища кластера. Формат файла инициализации Shardman описан в sdmspec.json.

Команда config update используется для обновления конфигурации stolon или конфигурации всего Shardman. Новая конфигурация применяется ко всем группам репликации и сохраняется в ключе etcd shardman/cluster0/data/cluster. Обратите внимание, что config update может привести к перезапуску СУБД.

Команда forall используется для выполнения оператора SQL во всех группах репликации в кластере Shardman.

Команда getconnstr используется для получения строки подключения libpq и подключения к кластеру в роли администратора.

Команда load используется для загрузки данных из текстового файла в распределённую таблицу или для загрузки схемы базы данных из базы данных PostgreSQL в Shardman. При загрузке данных из файла поддерживаются форматы text и csv (файлы могут быть сжаты при помощи gzip, тогда при чтении они декодируются автоматически); если нужно прочесть данные из stdin, то следует указать параметр --file=-. Процесс загрузки данных можно оптимизировать, указав число параллельных рабочих процессов (ключ -j).

Команда nodes add используется для добавления новых узлов в кластер Shardman. Со стандартной политикой размещения cross узлы добавляются в кластер в виде звеньев. На каждом узле в звене работает ведущий экземпляр СУБД и, возможно, несколько реплик других узлов этого звена. Число реплик определяется параметром конфигурации Repfactor. Таким образом, каждое звено состоит из Repfactor + 1 узлов и может выдержать потерю Repfactor узлов.

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

Утилита shardmanctl выполняет операцию nodes add в несколько этапов:

  1. Получает глобальную блокировку метаданных.

  2. Для каждого указанного узла проверяет, работает ли на нём служба shardmand и видит ли он текущую конфигурацию кластера.

  3. Вычисляет службы, которые должны присутствовать на каждом узле, и сохраняет эту информацию в etcd как часть Layout объекта shardman/cluster0/data/ladle.

  4. Создаёт конфигурацию для новых кластеров stolon (также называемых группами репликации) и инициализирует их.

  5. Регистрирует добавленные группы репликации в ключе etcd shardman/cluster0/data/ladle.

  6. Ожидает, пока shardmand запустит все необходимые службы, и проверяет доступность новых групп репликации и правильность их конфигураций.

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

  8. Для каждой новой группы репликации в кластере копирует все схемы и данные схем shardman из случайно выбранной существующей группы репликации в новую группу, а также проверяет, что расширение Shardman установлено в новой группе репликации, и пересчитывает OID, используемые в таблицах конфигурации расширения.

  9. В каждой существующей группе репликации определяет сторонние серверы, ссылающиеся на новую группу репликации, и воссоздаёт определения сторонних серверов в новой группе репликации.

  10. Пересоздаёт все секции сегментированных таблиц как сторонние таблицы, ссылающиеся на данные из старых групп репликации, и регистрирует изменения в хранилище etcd.

  11. Для каждой новой группы репликации копирует данные глобальной таблицы из существующих групп репликации в новую.

  12. Выполняет перебалансировку секции сегментированных таблиц. В процессе перебалансировки для каждой сегментированной таблицы итерационно определяется группа репликации с максимальным и минимальным количеством секций и создаётся задача на перемещение одной секции в группу репликации с минимальным количеством секций. Этот процесс повторяется, пока max - min > 1. Для перемещения секций используется логическая репликация. Секции совместно размещённых таблиц перемещаются совместно с секциями распределённых таблиц, на которые они ссылаются. Можно пропустить этот шаг, используя --no-rebalance.

Использование данной команды подробно описано в Подразделе «Добавление узлов в кластер Shardman».

Команда nodes rm используется для удаления узлов из кластера Shardman. В режиме manual удаляются только указанные узлы. Если узел является последним в репликационной группе, то удаляется и вся группа репликации. В режиме cross команда удаляет из кластера звенья, содержащие указанные узлы. Последнее звено в кластере не может быть удалено. Любые данные (например, секции сегментированных отношений) в удалённых группах репликации переносятся в оставшиеся группы посредством логической репликации, а все ссылки на удалённые группы репликации (включая определения сторонних серверов) удаляются из метаданных оставшихся групп репликации. Наконец, обновляются метаданные в etcd. Использование команды подробно описано в Подразделе «Удаление узлов из кластера Shardman».

Команда probackup выполняет резервное копирование и восстановление кластера Shardman, используя утилиту резервного копирования pg_probackup. Логика команды probackup описана в разделе Резервное копирование и восстановление резервных копий Shardman посредством pg_probackup. Более подробное использование команды probackup описано в Подразделе « probackup ».

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

Команда cleanup с флагом --after-rebalance используется для выполнения очистки после сбоя команды rebalance. На каждом узле она удаляет подписки и публикации, оставшиеся после команды rebalance, а также таблицы, в которых хранятся данные частично переданных секций сегментированных таблиц.

Команда cluster repfactor set используется для установки значения коэффициента репликации для кластера Shardman. Эту команду можно использовать только в ручном (manual) режиме топологии кластера. Значение нового коэффициента репликации передаётся через флаг командной строки --value коэффициент_репликации.

Команда cluster start используется для запуска всех экземпляров PostgreSQL, остановленных командой cluster stop. Чтобы команда работала, должен быть запущен shardmand.

Команда cluster stop используется для остановки всех экземпляров PostgreSQL для кластера Shardman. При этом демоны shardmand продолжают работать.

Команда cluster topology используется для визуализации топологии кластера. По умолчанию топология возвращается в виде таблицы. Если необходимо получить представление в формате JSON, используйте флаг --format json|text.

Команда recover используется для восстановления кластера Shardman из резервной копии, созданной командой backup. Логика команды recover описана в разделе Восстановление кластера из резервной копии посредством pg_basebackup. Более подробное использование команды recover описано в разделе «Восстановление кластера Shardman».

Команда restart используется для перезапуска кластера Shardman, включая все экземпляры shardmand. Если экземпляры PostgreSQL были предварительно остановлены командой cluster stop, они будут запущены. Команда возвращает управление после перезапуска всех ведущих серверов в кластере.

Команда set используется для установки одного или нескольких параметров экземпляров СУБД кластера Shardman. Параметры передаются в командной строке в качестве аргументов, каждый из них имеет вид param=value. Эта команда является аналогом shardmanctl config update -p для изменения параметров базы данных.

Команда status используется для отображения состояния работоспособности подсистем кластера Shardman. Она может отображать состояние нескольких компонентов: хранилища, метаданных, shardmand, групп репликации, ведущего сервера и словаря. Если нужна информация об определённых подсистемах, можно использовать параметр --filter. Также status поддерживает сортировку своих результатов по status, node или replication group и выводит их в виде таблицы (table), текста (text) или в формате JSON (json) на stdout, значение по умолчанию — table. Использование команды описано в разделе «Получение статуса подсистем кластера».

Команда store dump получает все ключи и их значения из хранилища etcd и выводит их в --file, причём значение - используется для вывода в стандартный вывод (по умолчанию). Она предназначена для отладки, поэтому во время выполнения могут возникать некоторые некритичные ошибки, но при этом вся доступная информация будет сохранена. Будут выгружены только ключи для текущего кластера (с текущим префиксом кластера, например shardman/cluster0/). Использование команды описано в разделе «Выгрузка всех ключей из хранилища для отладки конфигурации ошибок».

Команда store get получает конкретное значение из хранилища по имени ключа. Ожидается, что это значение JSON, поэтому, если это не так (что не запрещено), могут возникать некоторые некритичные ошибки. Ключ для извлечения из хранилища можно указать в параметре --key; несколько ключей имеют псевдонимы — короткие имена для удобства использования. Чтобы получить ключ по его псевдониму, используйте параметр --alias с одним из доступных псевдонимов (используйте --help или примеры ниже для справки). Также псевдонимы stolonspec и spec можно использовать для явного управления начальным кластером и конфигурацией stolon, не извлекая их из полной конфигурации кластера. Рекомендуется использовать существующие псевдонимы вместо полных имён ключей, так как при обработке псевдонимов есть некоторые дополнительные проверки, которые помогают достичь более надёжных результатов. По умолчанию ключ выводится на стандартный вывод (явно — с параметром --file=-), но может быть выведен в любой желаемый файл. Использование команды описано в разделе «Получение текущей конфигурации stolon».

Команда store keys показывает все сохранённые ключи для текущего кластера (с префиксом кластера) и его псевдонимов. Псевдонимы stolonspec и spec не показаны, так как они являются частями других ключей. Использование команды описано в разделе «Получение имён ключей кластера и ковша для текущего кластера».

Команда store set создаёт или перезаписывает один конкретный ключ в хранилище. Это не обязательно должно быть значение JSON для случайного ключа, но если это один из ключей с известным сопоставлением псевдонимов (например, ladle или cluster), команда не примет некорректные структуры JSON. Как и store get команда store set принимает имя ключа в параметре --key или --alias и входной файл в параметре --file (stdin указывается со значением -). Использование команды описано в разделе «Установка новой конфигурации для кластера».

Команда store lock показывает информацию о текущей блокировке метаданных кластера. Если блокировки не существует, возвращает Lock not found. Отображает идентификатор кластера, команду, которая получила блокировки, имя узла и время блокировки. Вы можете указать в параметре --format формат вывода: json или text (по умолчанию). Использование команды описано в разделе «Вывод информации о текущей блокировке метаданных кластера».

Команда upgrade используется для обновления версии расширения PostgreSQL Shardman на всех узлах кластера. Перед обновлением расширений необходимо установить новые пакеты и выполнить команду restart. В результате выполнения upgrade утилиты обновят shardman и все остальные расширения на сервере.

Иногда после запуска команды upgrade или некоторых действий пользователя при выводе команды status могут обнаруживаться ошибки словаря. Они возникают в том числе потому, что значения полей srvoptions таблицы pg_foreign_server отличаются от ожиданий системы. Чтобы решить эту проблему, воспользуйтесь командой config update fdw, которая вернёт srvoptions в ожидаемое состояние.

Примечание

Для большинства описанных команд shardmanctl используется глобальная блокировка метаданных.

Справка по командной строке

В этом разделе описываются команды shardmanctl. Общие параметры команд Shardman описаны в разделе «Общие параметры».

backup

Синтаксис:

    shardmanctl [общие_параметры] backup --datadir каталог [--maxtasks число_заданий]
   

Создаёт резервную копию кластера Shardman.

--datadir каталог

Обязательный параметр.

Указывает каталог для записи вывода. Если каталог существует, он должен быть пустым. Если он не существует, shardmanctl создаст его (но не родительские каталоги).

--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--use-ssh

Если указано, команда shardmanctl recover будет использовать команду scp для восстановления данных. Это позволяет использовать хранилище резервных копий на локальном узле.

За подробностями обратитесь к Подразделу «Резервное копирование кластера Shardman»

cleanup

Синтаксис:

shardmanctl [общие_параметры] cleanup [-p|--processrepgroups] --after-node-operation|--after-rebalance

Выполняет очистку после команды nodes add или rebalance.

-p имена_узлов
--processrepgroups=имена_узлов

Выполняет фактическую очистку. По умолчанию утилита показывает только действия, которые необходимо выполнить во время фактической очистки. За дополнительными сведениями обратитесь к разделу Подразделу «Выполнение очистки».

--after-node-operation

Выполняет очистку после сбоя команды nodes add

--after-rebalance

Выполняет очистку после сбоя команды rebalance

cluster repfactor set

Синтаксис:

shardmanctl [общие_параметры] cluster repfactor set --value новый_коэффициент_репликации

Устанавливает коэффициент репликации для режима топологии manual.

--value=новый_коэффициент_репликации

Новое значение коэффициента репликации

cluster start

Синтаксис:

shardmanctl [common_options] cluster start

Запускает все экземпляры сервера PostgreSQL.

cluster stop

Синтаксис:

shardmanctl [общие_параметры] cluster stop [-y|--yes]

Останавливает все экземпляры сервера PostgreSQL.

-y
--yes

Подтверждать операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.

cluster topology

Синтаксис:

shardmanctl [общие_параметры] cluster topology -f|--format table|json|text

Выводит топологию кластера.

-f table|json|text
--format=table|json|text

Формат вывода. За подробностями обратитесь к Подразделу «Отображение топологии кластера».

daemon check

Синтаксис:

shardmanctl [общие_параметры] daemon check -n|--nodes имя_узла:порт

Проверяет shardmand на узлах.

-n имя_узла:порт
--nodes=имя_узла:порт

Список узлов, на которых будет проведена проверка shardmand. За подробностями обратитесь к Подразделу «Проверка работы службы shardmand на узлах».

forall

Синтаксис:

shardmanctl [общие_параметры] forall --sql запрос[ --sql запрос[ --sql запрос ...]] [--twophase]

Выполнение оператора SQL для всех групп репликации в кластере Shardman.

--sql запрос

Указывает оператор, который должен быть выполнен

--twophase

Указывает использовать протокол двухфазной фиксации для выполнения оператора

getconnstr

Синтаксис:

shardmanctl [общие_параметры] getconnstr --all

Получает строку подключения libpq для подключения к кластеру в роли администратора.

--all

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

init

Синтаксис:

    shardmanctl [общие_параметры] init [-y|--yes] [-f|--spec-file имя_файла_конфигурации]|текст_конфигурации
   

Регистрирует новый кластер Shardman в хранилище etcd или повторно инициализирует уже существующий кластер, задавая новую конфигурацию кластера и удаляя все его данные и узлы.

-f имя_файла_конфигурации
--specfile=имя_файла_конфигурации

Задаёт файл со строкой конфигурации кластера. Значение - означает стандартный ввод. По умолчанию строка передаётся в тексте_конфигурации. Использование данной команды подробно описано в разделе «Регистрация кластера Shardman».

-y
--yes

Подтверждать операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.

intcheck

Синтаксис:

    shardmanctl [общие_параметры] intcheck [-s|--system] [-u|--user] [-c|--catalog] [-o|--output]  [-n|--node узел]
   

Запускает pg_integrity_check на всех узлах кластера Shardman или на выбранном одном узле.

-s
--system

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

-u
--user

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

-c
--catalog

Проверить контрольные суммы для таблиц системных каталогов. Чтобы ключ -c работал корректно, также необходимо задать параметры подключения к базе данных. Сервер баз данных должен быть запущен и готов принимать подключения.

-o
--output

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

-n имена_узлов
--node=имена_узлов

Выполнять команду pg_integrity_check только на выбранном узле

load

Синтаксис:

     shardmanctl [общие_параметры] load [ -b | --batch-size предел_числа_строк] [ --destination-fields список_полей] 
     [ --distributed-keys список_типов_ключей] [ -D | --delimiter символ] 
     [--null_marker строка] [ -e | --escape символ] [ -f | --file входной_файл]
     [ -F | --format текст|csv ] [ -j | --jobs общее_число_заданий] [ -q | --quote символ] 
     [ --reject-file имя_файла] [ --schema имя_файла] [ --source файл|postgres] 
     [ --source-connstr строка_подключения] [ --source-fields список_полей] [ --source-table исходная_таблица] 
     [ -t | --table целевая_таблица]
   

Загрузка данных в кластер Shardman.

-b предел_числа_строк
--batch-size=предел_числа_строк

Показывает список резервных копий кластера Shardman.

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

--destination-fields=список_полей

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

--distributed-keys=список_типов_ключей

Список пар, разделённых запятыми. Каждая пара состоит из номера поля (начиная с ноля) и типа, разделённых двоеточием. Поддерживаются следующие типы: bool, char, float4, float8, int2, int4, int8, name, text, varchar и uuid.

-D символ
--delimiter=символ

Задаёт символ, разделяющий столбцы в строках файла. Задаваемый символ должен быть однобайтовым.

По умолчанию: табуляция для текстового формата, запятая для формата CSV.

--null_marker=строка

Указывает строку, представляющую нулевое значение.

По умолчанию: \N для текстового формата, пустая строка без кавычек для формата CSV.

-e символ
--escape=символ

Задаёт символ, который будет выводиться перед символом данных, совпавшим со значением QUOTE. По умолчанию это тот же символ, что и QUOTE (то есть при появлении в данных кавычек они дублируются). Задаваемый символ должен быть однобайтовым. Этот параметр допускается только для режима CSV.

-f имя_файла
--file=имя_файла

Имя файла входных данных (или - для стандартного ввода)

-F текст|csv
--format=текст|csv

Формат входных данных. Возможные значения: text и csv.

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

-j число
--jobs=число

Число параллельных процессов для загрузки данных.

По умолчанию равно числу групп репликации.

-q символ
--quote=символ

Указывает символ кавычек, используемый для заключения данных в кавычки. По умолчанию это символ двойных кавычек. Задаваемый символ должен быть однобайтовым. Этот параметр поддерживается только для формата CSV.

--reject-file=имя_файла

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

--schema=имя_файла

Схема, определяющая правила передачи данных из PostgreSQL в Shardman. Если установлен данный параметр, то все остальные параметры не используются.

--source=файл|postgres

Тип источника данных — file или postgres.

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

--source-connstr=строка

Строка подключения к базе источника данных

--source-fields=список_полей

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

--source-table=таблица

Исходная таблица, представление или функция (funcname(param1,...,paramN))

-t таблица
--table=таблица

Целевая таблица

nodes add

Синтаксис:

shardmanctl [общие_параметры] nodes add -n|--nodes имена_узлов [--no-rebalance]

Добавляет узлы в кластер Shardman.

-n имена_узлов
--nodes=имена_узлов

Обязательный параметр.

Задаёт список добавляемых узлов, разделённых запятыми.

--no-rebalance

Пропуск шага перебалансировки секций сегментированных таблиц. За подробностями обратитесь к Подразделу «Добавление узлов в кластер Shardman».

nodes rm

Синтаксис:

shardmanctl [общие_параметры] nodes rm -n|--nodes имена_узлов

Удаляет узлы из кластера Shardman.

-n имена_узлов
--nodes=имена_узлов

Задаёт список узлов, разделённых запятыми, которые необходимо удалить. За подробностями обратитесь к Подразделу «Удаление узлов из кластера Shardman».

probackup

Синтаксис:

shardmanctl [общие_параметры] probackup
       [init|archive-command|backup|checkdb|delete|merge|restore|set-config|show|validate]
       [--log-to-console][--help]
       [subcommand options]

Создаёт резервную копию кластера Shardman и восстанавливает кластер Shardman из резервной копии, используя pg_probackup.

Список подкоманд:

init

Инициализирует новый каталог репозитория для резервной копии кластера Shardman, а также создаёт конфигурационный файл для подключения к хранилищу резервных копий, если для параметра --storage-type установлено значение S3.

archive-command

Добавляет, включает или отключает archive_command для каждой группы репликации в кластере Shardman или только для одной группы, если указан параметр --shard.

backup

Создаёт резервную копию кластера Shardman.

checkdb

Проверяет кластер Shardman на наличие физических повреждений или логических нарушений.

delete

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

merge

Объединяет резервные копии, относящиеся к одной цепочке инкрементальных копий. При полном копировании резервные копии объединяются с их первой инкрементальной копией. При инкрементальном резервном копировании резервные копии объединяются с их родительской полной копией и всеми инкрементальными копиями между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные. В текущей версии не поддерживается выполнение команды merge через интерфейс S3.

restore

Восстанавливает кластер Shardman из выбранной резервной копии.

show

Показывает список резервных копий кластера Shardman.

validate

Проверяет целостность выбранной резервной копии кластера Shardman.

set-config

Добавляет указанные параметры в файл pg_probackup.conf или изменяет значения, добавленные в него ранее.

Следующие параметры можно использовать во всех подкомандах probackup:

--log-to-console

Выводит полный журнал probackup в консоль. По умолчанию для каждой группы репликации файл журнала probackup появляется в каталоге резервного копирования (см. --backup-path ниже) в виде <backup-directory>/backup/log/pg_probackup-<repgroup-name>.log. Максимальный размер файла журнала составляет 20 МБ. По достижении этого лимита происходит ротация журнала при запуске команды shardmanctl probackup validate или shardmanctl probackup backup.

--help

Показывает справку по подкомандам.

init

Синтаксис:

shardmanctl [общие_параметры] probackup init
-B|--backup-path путь
-E|--etcd-path путь
[--remote-port порт]
[--remote-user имя_пользователя]
[--ssh-key путь]
[-t|--timeout секунды]
[-m|--maxtasks число_заданий]
[--storage-type mount|remote|S3]
[--s3-config-only]
[--s3-config-path путь]
[--s3-host узел_S3]
[--s3-port порт_S3]
[--s3-access-key ключ_доступа_S3]
[--s3-secret-key секретный_ключ_S3]
[--s3-bucket корзина_S3]
[--s3-region регион_S3]
[--s3-buffer-size размер_буфера_S3]
[--s3-retries число_повторов]
[--s3-timeout время]
[--s3-https]
[-y|--yes]

Инициализирует новый каталог репозитория для резервной копии кластера Shardman.

-B путь
--backup-path путь

Требуется при отсутствии параметра --s3-config-only. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-E путь
--etcd-path путь

Требуется при отсутствии параметра --s3-config-only. Указывает путь к каталогу, в котором должны храниться копии etcd.

--remote-port порт

Указывает удалённый порт SSH для экземпляров группы репликации.

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

--remote-user имя_пользователя

Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.

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

--ssh-key путь

Указывает закрытый ключ SSH для удалённого выполнения команд по SSH.

По умолчанию: $HOME/.ssh/id_rsa.

--storage-type mount|remote|S3

Тип хранилища резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно.

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

--s3-config-path путь

Задаёт путь к каталогу, в котором создаётся файл конфигурации S3 на всех узлах Shardman.

По умолчанию: <shardman-data-dir>/s3.config.

--s3-config-only

Создаёт файлы конфигурации S3 на всех узлах, не инициализируя хранилище резервных копий. Этот флаг следует использовать, если параметр --storage-type имеет значение S3.

--s3-host узел

Задаёт узел сервера S3 для подключения к S3-совместимому хранилищу.

--s3-port порт

Задаёт порт сервера S3 для подключения к S3-совместимому хранилищу.

--s3-access-key ключ_доступа

Задаёт ключ доступа сервера S3 для подключения к S3-совместимому хранилищу.

--s3-secret-key ключ_доступа

Задаёт секретный ключ сервера S3 для подключения к S3-совместимому хранилищу.

--s3-bucket корзина

Задаёт имя корзины для хранения резервных копий в S3-совместимом объектном хранилище.

--s3-region корзина

Задаёт регион выбора сервера для S3-совместимого объектного хранилища.

--s3-buffer-size размер_буфера

Размер буфера чтения/записи приложения pg_probackup для организации связи S3-совместимым объектным хранилищем, в МиБ.

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

--s3-retries число_повторов

Максимальное количество попыток выполнения запроса к S3 в случае сбоя.

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

--s3-timeout время

Максимальное время передачи объёма данных, заданного параметром --s3-buffer-size, в S3-совместимое объектное хранилище или из него (в секундах).

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

--s3-https

Задаёт протокол HTTPS для подключения к S3-совместимому объектному хранилищу.

-y|--yes

Подтверждает операцию независимо от наличия файла, указанного в параметре --s3-config-path.

archive-command

Синтаксис:

shardmanctl [общие_параметры] probackup archive-command [add|rm]
        -B|--backup-path путь
        [-j|--jobs число]
        [--compress]
        [--compress-algorithm алгоритм]
        [--compress-level уровень]
        [--batch-size размер_порции]
        [--storage-type mount|remote|S3]
        [--remote-port порт]
ам        [--remote-user имя_пользователя]
        [-s|--shard имя-сегмента]
        [--s3-config-path путь]
    

Добавляет/удаляет и включает/отключает команду архивирования для каждой группы репликации в кластере Shardman для размещения журналов WAL в инициализированном репозитории резервных копий.

add

Добавляет и включает команду archive для каждой группы репликации в кластере Shardman.

rm

Отключает команду archive в каждой группе репликации в кластере Shardman. Никаких дополнительных параметров не требуется.

-B путь
--backup-path путь

Требуется при добавлении archive_command. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

--batch-size batch_size

Для ускорения архивирования используется параметр --batch-size, определяющий размер порции из нескольких копируемых сегментов WAL. Вместе с параметром --batch-size также можно применить указание -j, чтобы порции копировались в несколько потоков.

--jobs число
-j число

Число параллельных потоков, которые используются pg_probackup при создании резервной копии. По умолчанию: 1.

--compress

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

--compress-algorithm алгоритм

Определяет алгоритм сжатия: zlib, lz4, zstd, pglz, или none.

Список поддерживаемых алгоритмов сжатия зависит от версии Postgres Pro Enterprise, включающей используемое приложение pg_probackup. Подробная информация описана в статье Параметры сжатия.

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

--compress-level уровень

Определяет уровень сжатия — 0-9.

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

--storage-type mount|remote|S3

Тип хранилища резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно.

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

--remote-port порт

Указывает удалённый порт SSH для экземпляров группы репликации.

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

--remote-user имя_пользователя

Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.

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

-s|--shard имя-сегмента

Задаёт имя сегмента, в котором необходимо добавить, включить или выключить команду archive. Если параметр не указан, команда archive включается или выключается во всех сегментах.

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

backup

Синтаксис:

shardmanctl [общие_параметры] probackup backup -B|--backup-path путь
        -E|--etcd-path путь 
        -b|--backup-mode РЕЖИМ
        [-j|--jobs число]
        [--compress]
        [--compress-algorithm алгоритм]
        [--compress-level уровень]
        [--batch-size размер_порции]
        [--storage-type mount|remote|S3]
        [--remote-port порт] 
        [--remote-user имя_пользователя]
        [--ssh-key путь]
        [-t|--timeout секунды] 
        [-m|--maxtasks число_заданий]
        [--log-directory путь]\
        [--s3-config-path путь]
        [--no-validate]
        [--skip-block-validation]
        [--log-to-console]
    

Создаёт резервную копию кластера Shardman.

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-E путь
--etcd-path путь

Обязательный параметр. Указывает путь к каталогу хранения копий etcd.

-b РЕЖИМ
--backup-mode РЕЖИМ

Обязательный параметр. Определяет режим резервного копирования: FULL, PAGE, DELTA, PTRACK.

--batch-size batch_size

Для ускорения архивирования используется параметр --batch-size, определяющий размер порции из нескольких копируемых сегментов WAL. Вместе с параметром --batch-size также можно применить указание -j, чтобы порции копировались в несколько потоков.

--jobs число
-j число

Число параллельных потоков, которые используются pg_probackup при создании резервной копии. По умолчанию: 1.

--compress

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

--compress-algorithm алгоритм

Определяет алгоритм сжатия: zlib, lz4, zstd, pglz, или none.

Список поддерживаемых алгоритмов сжатия зависит от версии Postgres Pro Enterprise, включающей используемое приложение pg_probackup. Подробная информация описана в статье Параметры сжатия.

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

--compress-level уровень

Определяет уровень сжатия — 0-9.

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

--remote-port порт

Указывает удалённый порт SSH для экземпляров группы репликации.

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

--remote-user имя_пользователя

Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.

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

--ssh-key путь

Указывает закрытый ключ SSH для удалённого выполнения команд по SSH.

По умолчанию: $HOME/.ssh/id_rsa.

-t секунды
--timeout секунды

Выход с ошибкой после указанной в секундах задержки при ожидании готовности кластера

-m число_заданий
--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--no-validate

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

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

--skip-block-validation

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

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

--storage-type mount|remote|S3

Тип хранилища резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно.

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

--log-to-console

Включает вывод журналов pg_probackup на консоль.

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

--log-directory путь

Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра --storage-type установлено значение S3 и не задана переменная окружения SDM_LOG_DIRECTORY.

По умолчанию: <backup-directory>/backup/log.

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

checkdb

Синтаксис:

shardmanctl [общие_параметры] probackup checkdb
[--amcheck [--skip-block-validation] [--heapallindexed]] [--shard сегмент]
[-m|--maxtasks число_заданий]

Проверяет кластер Shardman на наличие физических повреждений или логических нарушений.

--amcheck

Выполняет логическую проверку индексов при отсутствии повреждений в ходе проверки файлов данных. Для проверки индексов в базе данных должны быть установлены расширения amcheck или amcheck_next. Для баз данных без расширения amcheck проверка индексов пропускается. Расширение amcheck входит в состав установочного пакета Shardman.

--heapallindexed

Проверяет, что все кортежи из кучи, требующие индексирования, действительно проиндексированы. Этот параметр используется только совместно с параметром --amcheck. Поддержка данного параметра зависит от версии установленного amcheck/amcheck_next. Расширение amcheck из установочного пакета Shardman поддерживает такую проверку.

--skip-block-validation

Пропускает проверку файлов данных. Этот флаг используется только совместно с флагом --amcheck, что позволяет выполнить только логическую проверку индексов.

--shard сегмент

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

-m число_заданий
--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

delete

Синтаксис:

shardmanctl [общие_параметры] probackup delete -B|--backup-path путь
        -i|--backup-id ид_резервной_копии
        [-j|--jobs число]
        [-m|--maxtasks число_заданий]
        [--storage-type mount|remote|S3]
        [--s3-config-path путь]
        [--delete-wal]
        [-y|--yes]

Удаляет резервную копию кластера Shardman с заданным идентификатором backup_id.

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу (или ключ в корзине S3-совместимого хранилища), в котором должны храниться резервные копии кластера Shardman.

-i ид_резервной_копии
--backup-id ид_резервной_копии

Обязательный параметр. Задаёт уникальный идентификатор резервной копии.

--jobs число
-j число

Число параллельных потоков, которые используются pg_probackup при создании резервной копии. По умолчанию: 1.

-m число_заданий
--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--storage-type mount|remote|S3

Тип хранилища резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно.

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

Для удаления резервной копии, у которой параметр --storage-type имеет значение S3, при запуске команды delete необходимо установить значение S3 для параметра --storage-type.

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

--delete-wal

Удаляет файлы WAL, которые не требуются для восстановления никаких резервных копий.

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

-y
--yes

Подтверждает операцию.

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

delete

Синтаксис:

shardmanctl [общие_параметры] probackup merge -B|--backup-path путь
        -i|--backup-id ид_резервной_копии
        [-j|--jobs число]
        [-m|--maxtasks число_заданий]
        [--no-validate]
        [--no-sync]
        [-y|--yes]

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

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-i ид_резервной_копии
--backup-id ид_резервной_копии

Обязательный параметр. Задаёт уникальный идентификатор резервной копии.

--jobs число
-j число

Число параллельных потоков, которые используются pg_probackup при создании резервной копии. По умолчанию: 1.

-m число_заданий
--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--no-sync

Не сбрасывать объединяемые файлы на диск. Этот флаг позволяет несколько ускорить процесс объединения. Использование этого флага может привести к повреждению данных при сбое операционной системы или аппаратного сбоя.

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

--no-validate

Пропускает автоматическую проверку созданной резервной копии до и после объединения.

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

-y
--yes

Подтверждает операцию.

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

restore

Синтаксис:

shardmanctl [общие_параметры] probackup restore
        -B|--backup-path путь
        -i|--backup-id идентификатор
        -j|--jobs число
        [--recovery-target-time дата_время]
        [-I|--recovery-mode инкрементальный_режим]
        [-t|--timeout секунды]
        [-m|--maxtasks число_заданий]
        [--metadata-only] [--schema-only] [--shard сегмент]
        [--no-validate]
        [--skip-block-validation]
        [--s3-config-path путь]
        [--storage-type mount|remote|S3]
        [--wal-limit число_сегментов_wal]
        [--log-directory путь]
    

Восстанавливает кластер Shardman из выбранной резервной копии.

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-i идентификатор
--backup-id идентификатор

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

--jobs число
-j число

Число параллельных потоков, которые используются pg_probackup при восстановлении из резервной копии. По умолчанию: 1.

--recovery-target-time временная_метка

Параметр PITR (восстановление на момент времени). Указывает метку времени для восстановления. Пример: «2024-01-25 15:30:36» в часовом поясе UTC.

-I инкрементальный_режим
--recovery-mode инкрементальный_режим

Выбирает инкрементальный режим восстановления. Поддерживаются следующие режимы:

  • checksum — заменять только страницы с неподходящей контрольной суммой и LSN.

  • lsn — заменять только те страницы, LSN которых больше точки расхождения.

  • none — обычное восстановление, по умолчанию.

-t секунды
--timeout секунды

Выход с ошибкой после указанной в секундах задержки при ожидании готовности кластера или завершения восстановления.

--metadata-only

Выполняет восстановление только метаданных. По умолчанию выполняется полное восстановление.

--schema-only

Выполняет восстановление только схемы. По умолчанию выполняется полное восстановление.

--shard сегмент

Выполнять восстановление только в указанном сегменте. По умолчанию восстановление выполняется во всех сегментах.

--no-validate

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

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

--skip-block-validation

Отключает проверку контрольных сумм на уровне блоков для ускорения проверки целостности. При автоматической проверке перед восстановлением будут проверяться только контрольные суммы на уровне файлов.

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

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

--storage-type mount|remote|S3

Тип хранения резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно. Чтобы создать резервную копию с параметром --storage-type со значением S3, укажите их при запуске команды restore.

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

--wal-limit число_сегментов_wal

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

По умолчанию: 0 — без ограничений.

--log-directory путь

Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра --storage-type установлено значение S3 и не задана переменная окружения SDM_LOG_DIRECTORY.

По умолчанию: <backup-directory>/backup/log.

show

Синтаксис:

shardmanctl [общие_параметры] probackup show
        -B|--backup-path путь 
        [-f|--format таблица|json]
        [--archive ]
        [-i|--backup-id ид_резервной_копии]
        [--instance экземпляр]
        [--storage-type mount|remote|S3]
        [--s3-config-path путь]
    

Показывает список резервных копий кластера Shardman.

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-f table|json
--format table|json

Указывает выходной формат.

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

--archive

Показывает информацию об архиве WAL.

-i ид_резервной_копии
--backup-idид_резервной_копии

Показывает информацию о конкретных резервных копиях.

--instanceэкземпляр

Показывает информацию о конкретных экземплярах.

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

--storage-type mount|remote|S3

Тип хранения резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно. Чтобы показать резервную копию с параметром --storage-type со значением S3, укажите их при запуске команды show.

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

validate

Синтаксис:

shardmanctl [общие_параметры] probackup validate
        -B|--backup-path путь 
        -i|--backup-id идентификатор
        [-t|--timeout секунды] 
        [-m|--maxtasks число_заданий]
        [--log-to-console]
        [--storage-type mount|remote|S3]
        [--s3-config-path путь]
        [--log-directory путь]
    

Проверяет целостность выбранной резервной копии кластера Shardman.

-B путь
--backup-path путь

Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Shardman.

-i идентификатор
--backup-id идентификатор

Обязательный параметр. Указывает резервный идентификатор для проверки.

--log-to-console

Включает вывод журналов pg_probackup на консоль.

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

-t секунды
--timeout секунды

Выход с ошибкой после указанной в секундах задержки при ожидании готовности кластера

-m число_заданий
--maxtasks число_заданий

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--s3-config-path путь

Задаёт путь к файлу конфигурации S3.

По умолчанию: <shardman-data-dir>/s3.config.

--storage-type mount|remote|S3

Тип хранения резервных копий. При значении remote протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра --storage-type значение mount или S3 соответственно. Чтобы проверить резервную копию с параметром --storage-type со значением S3, укажите их при запуске команды validate.

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

--log-directory путь

Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра --storage-type установлено значение S3 и не задана переменная окружения SDM_LOG_DIRECTORY.

По умолчанию: <backup-directory>/backup/log.

set-config

Синтаксис:

shardmanctl [общие_параметры] probackup set-config
        [--archive-timeout целое]
        [-B | --backup-path строка]
        [-m |--maxtasks целое]
        [--remote-port целое]
        [--remote-user строка]
        [--retention-redundancy целое]
        [--retention-window целое]
        [--wal-depth целое]
        [--s3-config-path строка]
        [-s |--shard строка]
        [--storage-type строка]

Добавляет указанные параметры в файл pg_probackup.conf или изменяет существующие.

--archive-timeout целое

Устанавливает время ожидания для архивирования или потоковой репликации сегментов WAL, в секундах.

По умолчанию: pg_probackup ждёт 300 секунд.

-B строка
--backup-path=строка

Задаёт абсолютный путь к каталогу резервных копий.

По умолчанию: текущее значение pg_probackup.conf.

-m целое
--maxtasks=целое

Задаёт максимальное количество одновременно выполняемых задач (команды pg_probackup).

По умолчанию соответствует числу логических CPU в системе.

--remote-port целое

Порт для подключения к SSH серверу, где создаётся резервная копия.

По умолчанию: текущее значение pg_probackup.conf.

--remote-user строка

Пользователь, который подключается к удалённому SSH серверу для создания резервной копии.

По умолчанию: текущее значение pg_probackup.conf.

--retention-redundancy целое

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

По умолчанию: текущее значение pg_probackup.conf.

--retention-window целое

Количество дней, в течение которых возможно восстановление. Должно быть неотрицательным целым числом. При нулевом значении окно восстановления отсутствует.

По умолчанию: текущее значение pg_probackup.conf.

--wal-depth целое

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

По умолчанию: текущее значение pg_probackup.conf.

--s3-config-path строка

Задаёт путь к файлу конфигурации S3.

По умолчанию: /var/lib/pgpro/sdm-14/data/s3.config.

-s строка
--shard=строка

Имя сегмента, для которого необходимо запустить команду set-config. Если сегмент не указан, команда запускается для всех сегментов.

По умолчанию: текущее значение pg_probackup.conf.

--storage-type строка

Тип хранилища резервных копий, возможные значения: remote, mount, S3.

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

rebalance

Синтаксис:

shardmanctl [общие_параметры] rebalance [-f|--force]

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

-f
--force

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

recover

Синтаксис:

shardmanctl [общие_параметры] recover [--info файл] [--dumpfile файл] [--shard сегмент] [--metadata-only][--schema-only] [--timeout секунды]

Восстанавливает кластер Shardman из резервной копии, созданной командой backup.

--dumpfile файл

Требуется для восстановления только метаданных.

Указывает файл для загрузки ранее выгруженных метаданных etcd.

--info файл

Требуется для полного восстановления.

Указывает файл, из которого необходимо загрузить информацию о резервной копии.

--shard сегмент

Выполнять восстановление только в указанном сегменте. По умолчанию восстановление выполняется во всех сегментах.

--metadata-only

Выполняет восстановление только метаданных. По умолчанию выполняется полное восстановление.

--schema-only

Выполняет восстановление только схемы. По умолчанию выполняется полное восстановление.

--timeout секунды

Выход с ошибкой после указанной в секундах задержки при ожидании готовности кластера или завершения восстановления.

За подробностями обратитесь к Подразделу «Восстановление кластера Shardman»

restart

Синтаксис:

     shardmanctl [общие_параметры] restart [-y|--yes]
   

Перезапускает кластер Shardman.

-y
--yes

Подтверждать операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.

shard add

Синтаксис:

     shardmanctl [общие_параметры] shard -s|--shard имя_сегмента add -n|--nodes имя_узлов
   

Добавляет реплику в сегмент.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента

-n имена_узлов
--nodes=имена_узлов

Задаёт список добавляемых узлов реплики, разделённых запятыми

shard rm

Синтаксис:

     shardmanctl [общие_параметры] shard -s|--shard имя_сегмента rm -n|--nodes имя_узла [-f|--force]
   

Удаляет реплику из сегмента.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента

-n имена_узлов
--nodes=имена_узлов

Задаёт список удаляемых узлов реплики, разделённых запятыми

-f
--force

Выполнить принудительное удаление узла, даже если он «мёртв».

shard switch

Синтаксис:

     shardmanctl [общие_параметры] shard -s|--shard имя_сегмента switch [--new-master имена_узлов]
   

Переключает ведущий узел.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента

--new-master=имена_узлов

Имя нового ведущего узла

shard start

Синтаксис:

     shardmanctl [общие_параметры] shard -s |--shard имя_сегмента start [--no-wait]
   

Запускает сегмент.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента.

--no-wait

Задаёт поведение shardmanctl, при котором не ожидается запуск сегмента.

shard stop

Синтаксис:

     shardmanctl [общие_параметры] shard -s |--shard имя_сегмента stop
   

Останавливает сегмент.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента.

shard replicas reinit

Синтаксис:

     shardmanctl [общие_параметры] shard -s|--shard имя_сегмента replicas reinit [-n|--node имена_узлов] [-y|--yes] [--no-wait]

Сбрасывает реплики определённого сегмента.

-s имя_сегмента
--shard=имя_сегмента

Имя сегмента.

-n имена_узлов
--node=имена_узлов

Указывает узел, на котором необходимо сбросить реплики. Если не задан, проверяет реплики сегмента на всех узлах.

-y
--yes

Подтверждает операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.

--no-wait

Задаёт поведение shardmanctl, при котором не ожидается готовность реплик.

За подробностями обратитесь к Подразделу «Переинициализация реплик».

nodes start

Синтаксис:

     shardmanctl [общие_параметры] nodes start -n|--nodes имена_узлов [--no-wait]
   

Запускает узлы.

-n имена_узлов
--nodes=имена_узлов

Имена узлов.

--no-wait

Задаёт поведение shardmanctl, при котором не ожидается запуск узлов.

nodes restart

Синтаксис:

     shardmanctl [общие_параметры] nodes restart -n|--nodes имена_узлов [--no-wait]
   

Перезапускает узлы.

-n имена_узлов
--nodes=имена_узлов

Имена узлов.

--no-wait

Задаёт поведение shardmanctl, при котором не ожидается перезапуск узлов.

nodes stop

Синтаксис:

     shardmanctl [общие_параметры] nodes stop -n|--nodes имена_узлов [--no-wait]
   

Останавливает узлы.

-n имена_узлов
--nodes=имена_узлов

Имена узлов.

--no-wait

Задаёт поведение shardmanctl, при котором не ожидается остановка узлов.

status

Синтаксис:

     shardmanctl [общие_параметры] status [-f|--format table|json] [--filter store|metadata|shardmand|rg|master|dictionary|all] [-s|--sort node|rg|status]
   

Отчёт о состоянии подсистем кластера Shardman.

-f table|json
--format=table|json

Указывает формат отчёта.

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

За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».

--filter store|metadata|shardmand|rg|master|dictionary|all

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

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

За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».

-s node|rg|status
--sort node|rg|status

Сортирует сообщения внутри одной группы (таблицы) указанным способом.

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

За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».

status transactions

Синтаксис:

     shardmanctl [общие_параметры] status transactions [-r|--repgroup имя_группы_репликации
     

Показывает распредёленные транзакции, которые не удалось разобрать встроенными инструментами мониторинга Shardman.

-r имя_группы_репликации
--repgroup=имя_группы_репликации

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

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

За подробностями обратитесь к Подразделу «Вывод списка неразобранных распределённых транзакций».

store dump

Синтаксис:

     shardmanctl [общие_параметры] store dump [-f|--file имя_файла]
   

Выгружает текущие конфигурации кластеров из хранилища.

-f имя_файла
--file=имя_файла

Задаёт выходной файл (- для стандартного вывода).

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

За подробностями обратитесь к Подразделу «Выгрузка всех ключей из хранилища для отладки конфигурации ошибок».

store lock

Синтаксис:

     shardmanctl [общие_параметры] store lock [-f|--format text|json]
   

Показывает информацию о текущей блокировке метаданных кластера.

-f=text|json
--format=text|json

Указывает выходной формат.

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

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

store get

Синтаксис:

    shardmanctl [общие_параметры] store get [[-a|--alias имя_псевдонима]|[-k|--key имя_ключа] [-f|--file имя_файла]]
   

Получает указанный ключ из хранилища.

-a имя_псевдонима
--alias=ladle|cluster |spec|stolonspec

Указывает использование псевдонима вместо полного имени ключа. Нельзя использовать с параметром --key.

За подробностями обратитесь к Подразделу «Получение текущей конфигурации stolon».

-k имя_ключа
--key=имя_ключа

Указывает ключ для извлечения из хранилища. Нельзя использовать с параметром --alias.

За подробностями обратитесь к Подразделу «Получение текущей конфигурации stolon».

-f имя_файла
--file=имя_файла

Задаёт файл для вывода значения.

По умолчанию: - (стандартный вывод).

За подробностями обратитесь к Подразделу «Получение текущей конфигурации stolon».

store keys

Синтаксис:

    shardmanctl [общие_параметры] store keys
   

Получает из хранилища все ключи с текущим префиксом кластера.

За подробностями обратитесь к Подразделу «Получение имён ключей кластера и ковша для текущего кластера».

store set

Синтаксис:

    shardmanctl [общие_параметры] store set [[-a|--alias имя_псевдонима]|[-k|--key имя_ключа]] [-f|--file имя_файла]
   

Создаёт или перезаписывает ключ в хранилище.

-a ladle|cluster |spec|stolonspec
--alias=ladle|cluster |spec|stolonspec

Указывает использование псевдонима вместо полного имени ключа. Нельзя использовать с параметром --key.

-k имя_ключа
--key=имя_ключа

Указывает имя ключа для размещения в хранилище. Нельзя использовать с параметром --alias.

-f имя_файла
--file=имя_файла

Задаёт файл с входными данными (- для стандартного ввода).

За подробностями обратитесь к Подразделу «Установка новой конфигурации для кластера».

tables sharded info

Синтаксис:

    shardmanctl [общие_параметры] tables sharded info [-t|--table имя_таблицы]
   

Получает информацию о сегментированной таблице.

-t таблица
--table=таблица

Указывает имя таблицы в формате schema.table

tables sharded list

Синтаксис:

    shardmanctl [общие_параметры] tables sharded list
   

Получает список всех сегментированных таблиц.

tables sharded norebalance

Синтаксис:

    shardmanctl [общие_параметры] tables sharded norebalance
   

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

tables sharded partmove

Синтаксис:

    shardmanctl [общие_параметры] tables sharded partmove [-t|--table имя_таблицы] [-s|--shard имя_сегмента] [-p|--partnum число]
   

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

-t таблица
--table=таблица

Указывает имя таблицы в формате schema.table

-p число
--partnum=число

Указывает номер секции для перемещения

-s имя_сегмента
--shard=имя_сегмента

Указывает имя нового сегмента для секции

tables sharded rebalance

Синтаксис:

    shardmanctl [общие_параметры] tables sharded rebalance [-t|--table имя_таблицы]
   

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

-t таблица
--table=таблица

Указывает имя таблицы в формате schema.table

config update

Синтаксис:

shardmanctl [общие_параметры] config update [[-f|--file файл_конфигурации_stolon|файл_конфигурации_shardman]|текст_конфигурации [-p|--patch][-w|--wait]]] [--force]

Обновляет конфигурацию stolon или полную конфигурацию Shardman.

-f файл_конфигурации_stolon|файл_конфигурации_shardman
--specfile=файл_конфигурации_stolon|файл_конфигурации_shardman

Указывает файл конфигурации stolon или полной конфигурации Shardman. Тип файла конфигурации определяется автоматически. Значение - означает стандартный ввод. По умолчанию конфигурация передаётся в тексте_конфигурации.

-w
--wait

Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации. Если новая конфигурация не может быть загружена всеми группами репликации, время ожидания shardmanctl будет бесконечным.

-p
--patch

Объединяет новой конфигурации с существующей. По умолчанию новая конфигурация заменяет существующую.

--force

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

set

Синтаксис:

shardmanctl [общие_параметры] set pgParam1=value1 [pgParam2=value2 [...]] [-y|--yes] [-w|--wait time_duration] [-f|--force]

Устанавливает значения указанных параметров базы данных кластера Shardman.

-w
--wait

Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации (примеры значений: 2h45m, 1m30s, 5m, 10s. По умолчанию: 1h).

-y
--yes

Выполнять автоматическое подтверждение в ответ на все вопросы

-f
--force

Выполнить принудительную настройку параметра, если выполняется операция на уровне кластера

upgrade

Синтаксис:

shardmanctl [общие_параметры] upgrade

Обновляет расширение shardman базы данных и изменяет параметры pg_foreign_server.

bench init

Синтаксис:

shardmanctl [общие_параметры] bench init [--schema-type single|simple|shardman|custom]
[--schema-file имя_файла] [-s|--scale значение_масштабирования]  [-n|--no-vacuum]
[-F|--fillfactor значение_коэффициента_заполнения]

Инициализирует схему тестирования через pgbench. Схема может быть пользовательской или предопределённой. Создаёт таблицы схемы tpc-b и заполняет их.

--schema-type=single|simple|shardman|custom

Тип схемы, используемый при её инициализации. Возможные значения:

  • single — схема для одиночного теста производительности PostgreSQL

  • simple — простая сегментированная схема

  • shardman — сегментированная схема, оптимизированная для Shardman

  • custom — схема, инициализированная пользователем из файла --schema-file

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

--schema-file=имя_файла

Файл с DDL-запросом для пользовательского типа схемы, который будет использоваться для создания таблиц tpc-b для pgbench: pgbench_accounts, pgbench_branches, pgbench_tellers, pgbench_history.

-s значение_масштабирования
--scale=значение_масштабирования

Умножить количество сгенерированных строк на заданный коэффициент масштабирования.

-n
--no-vacuum

Не выполнять очистку во время инициализации

-F значение_коэффициента_заполнения
--fillfactor=значение_коэффициента_заполнения

Заполнить таблицы pgbench заданным значением коэффициента заполнения

bench run

Синтаксис:

shardmanctl [общие_параметры] bench run [--schema-type single|simple|shardman|custom]
[-f|--file имя_файла] [-c|--client значение_клиента]  [-C|--connect] [--full-output]
[-j|--jobs число_процессов][-T|--time секунды][-t|--transactions число_транзакций]

Запускает инициализированный тест производительности через pgbench. Можно использовать скрипт pgbench по умолчанию или пользовательский скрипт из файла.

--schema-type=single|simple|shardman|custom

Тип схемы, используемый при её инициализации (bench init). Возможные значения:

  • single — схема для одиночного теста производительности PostgreSQL

  • simple — простая сегментированная схема

  • shardman — сегментированная схема, оптимизированная для Shardman

  • custom — схема, инициализированная пользователем из файла --schema-file

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

-f имя_файла
--file=имя_файла

Добавить в список выполняемых скриптов скрипт транзакции из файла имя_файла.

-c значение_клиента
--client=значение_клиента

Число имитируемых клиентов, то есть число одновременных сеансов базы данных

-C
--connect

Устанавливать новое подключение для каждой транзакции вместо одного для каждого клиента

--full-output

Вывести полный вывод pgbench

-j число_процессов
--jobs=число_процессов

Количество рабочих потоков в pgbench

-T секунды
--time=секунды

Выполнять тест с ограничением по времени (в секундах), а не по числу транзакций для каждого клиента

-t число_транзакций
--transactions=число_транзакций

Число транзакций, которые будут выполняться каждым клиентом. По умолчанию: 10.

bench cleanup

Синтаксис:

shardmanctl [общие_параметры] bench cleanup

Очищает базу данных схемы после тестов производительности. Удаляет таблицы tpc-b.

bench generate

Синтаксис:

shardmanctl [общие_параметры] bench generate [-c|--config имя_файла] [-o|--output-file имя_файла]

Получает конфигурацию теста производительности из файла и генерирует bash-скрипт для создания схемы, оптимизированной для Shardman, и запуска теста производительности с использованием pgbench. Файл конфигурации должен быть в формате yaml.

-f имя_файла
--file=имя_файла

Путь к файлу конфигурации. Этот файл содержит последовательность конфигураций скрипта. Каждый скрипт должен иметь тип схемы (schema_type): single|simple|shardman|custom. Для пользовательской схемы необходимо указать schema_file с DDL-скриптом. Необязательные параметры: init_flags (набор по умолчанию: -s 1000), run_flags (набор по умолчанию: -n -P 10 -c 10 -j 4 -T 60), секции (значение по умолчанию: 50). Настоятельно рекомендуется использовать параметр -n (--no-vacuum) внутри run_flags. Пример файла конфигурации:

    benches:
    - schema_type: single
      init_flags: "-s 3"
      run_flags: "-n -P 10 -c 10 -j 4 -T 10"
    - schema_type: simple
      init_flags: "-s 4"
      run_flags: "-n -P 10 -c 20 -j 4 -T 10"
      partitions: 100
    - schema_type: shardman
      init_flags: "-s 5"
      run_flags: "-n -P 10 -c 20 -j 4 -T 10"
    - schema_type: custom
      init_flags: "-s 6"
      schema_file: "schema.psql"
                            
-o имя_файла
--output-file=имя_файла

Файл вывода. По умолчанию: stdout.

Общие параметры

Общие параметры shardmanctl — это необязательные параметры, не являющиеся специфичными для данной утилиты. Они определяют параметры подключения etcd, имя кластера и некоторые другие параметры. По умолчанию shardmanctl пытается подключиться к хранилищу etcd 127.0.0.1:2379 и использовать имя кластера cluster0. Уровень журнала по умолчанию — info.

-h, --help

Показывает краткую справочную информацию.

--cluster-name имя_кластера

Указывает имя кластера, где будет работать. По умолчанию указывается имя кластера cluster0.

--log-level уровень

Задаёт уровень детализации журнала. Возможные значения уровня (от минимального до максимального): error, warn, info и debug. По умолчанию используется info.

--retries число

Указывает, сколько раз shardmanctl должен повторять прерванный запрос к etcd. Если запрос etcd прерывается, скорее всего, из-за проблем с подключением, shardmanctl повторяет его указанное количество раз, прежде чем сообщить об ошибке. Значение по умолчанию — 5.

--session-timeout секунды

Указывает таймаут блокировок в сеансе shardmanctl. Если нет связи между shardmanctl и хранилищем etcd в течение указанного количества секунд, блокировка снимается. Значение по умолчанию — 30.

--store-endpoints строка

Задаёт адрес/порт etcd в формате: http[s]://адрес[:порт](,http[s]://адрес[:порт])*. Значение по умолчанию — http://127.0.0.1:2379.

--store-ca-file строка

Проверяет сертификат сервера хранилища etcd с поддержкой HTTPS, используя этот пакет CA.

--store-cert-file строка

Указывает файл сертификата для идентификации клиента в хранилище etcd.

--store-key строка

Указывает файл закрытого ключа для идентификации клиента в хранилище etcd.

--store-timeout длительность

Задаёт тайм-аут для запроса etcd. Значение по умолчанию — 5 секунд.

--monitor-port число

Указывает порт HTTP-сервера shardmand для метрик и точек трассировки. По умолчанию — 15432.

--api-port число

Указывает порт для API HTTP-сервера shardmand. По умолчанию — 15432.

--store-timeout длительность

Задаёт тайм-аут для запроса etcd. Значение по умолчанию — 5 секунд.

--version

Показывает информацию о версии shardman-utils.

Переменные окружения

SDM_BACKUP_MODE

Аналог параметра --backup-mode

SDM_BACKUP_PATH

Аналог параметра --backup-path

SDM_CLUSTER_NAME

Аналог параметра --cluster-name

SDM_ETCD_PATH

Аналог параметра --etcd-path

SDM_FILE

Аналог параметра --file в команде config update

SDM_LOG_LEVEL

Аналог параметра --log-level

SDM_NODES

Аналог параметра --nodes в командах nodes add и nodes rm

SDM_RETRIES

Аналог параметра --retries

SDM_SPEC_FILE

Аналог параметра --spec-file в команде init

SDM_STORE_ENDPOINTS

Аналог параметра --store-endpoints

SDM_STORE_CA_FILE

Аналог параметра --store-ca-file

SDM_STORE_CERT_FILE

Аналог параметра --store-cert-file

SDM_STORE_KEY

Аналог параметра --store-key

SDM_STORE_TIMEOUT

Аналог параметра --store-timeout

SDM_SESSION_TIMEOUT

Аналог параметра --session-timeout

Использование

Добавление узлов в кластер Shardman

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

shardmanctl [общие_параметры] nodes add -n|--nodes имена_узлов

Необходимо указать -n (--nodes) для передачи списка добавляемых узлов, разделённых запятыми. Ко всем узлам можно обращаться по их именам хостов или IP-адресам. Имена должны быть правильно разрешены на всех узлах.

Если во время выполнения команды nodes add произошёл сбой, используйте команду cleanup --after-node-operation, чтобы исправить возможные проблемы с конфигурацией кластера.

Выполнение очистки

По умолчанию cleanup работает только в режиме отчёта, т. е. следующая команда покажет только действия, которые необходимо выполнить во время фактической очистки:

    shardmanctl [общие_параметры] cleanup --after-node-operation|--after-rebalance
   

Чтобы выполнить фактическую очистку, запустите следующую команду:

    shardmanctl [общие_параметры] cleanup -p|--processrepgroups --after-node-operation|--after-rebalance
   

Отображение топологии кластера

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

    shardmanctl [общие_параметры] cluster topology -f|--format table|json|text
   

Проверка работы службы shardmand на узлах

Команда daemon check не только проверяет, запущена ли служба shardmand на указанных узлах, но и гарантирует, что эти службы настроены для того же кластера, что и shardmanctl:

    shardmanctl [общие_параметры] daemon check -n|--nodes имена_узлов
   

Удаление узлов из кластера Shardman

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

shardmanctl [общие_параметры] nodes rm -n|--nodes имена_узлов

Укажите параметр -n (--nodes) для передачи списка удаляемых узлов, перечисленных через запятую. Команда восстанавливает все секции сегментированных таблиц.

Примечание

Не используйте команду cleanup для устранения возможных проблем с конфигурацией кластера после сбоя команды nodes rm. Вместо этого ещё раз выполните nodes rm.

Чтобы удалить все узлы в кластере без сохранения данных, повторно инициализируйте кластер. Если удалённая группа репликации содержит локальные (несегментированные и неглобальные) таблицы, данные теряются после удаления группы репликации.

Получение статуса подсистем кластера

Чтобы получить отчёт о состоянии кластера Shardman в формате таблицы для подсистем metadata и store, отсортированных по группам репликации, выполните следующую команду:

    shardmanctl [общие_параметры] status --filter=metadata,store --sort=rg
   

Чтобы получить отчёт в формате JSON, используйте параметр -f|--format=json (не включён выше, так как формат table используется по умолчанию). О каждой обнаруженной проблеме сообщается со статусом «Unknown», «Warning», «Error» или «Fatal error». Инструмент также может сообщить об операционной ошибке, что означает, что во время проверки работоспособности кластера возникла проблема. Когда команда обнаруживает критическую или операционную ошибку, дальнейшая диагностика прекращается. Например, несогласованность метаданных хранилища не позволяет выполнять правильные операции с кластером и должна быть устранена в первую очередь.

Вывод списка неразобранных распределённых транзакций

Чтобы просмотреть список распределённых транзакций, которые не удалось разобрать встроенными средствами мониторинга Shardman, выполните следующую команду:

    shardmanctl [общие_параметры] status transactions -r|--repgroup имя_группы_репликации

Информация о каждой транзакции состоит из tx_id (идентификатор транзакции), coordinator_id, creation_time и description (ошибка или статус транзакции). Чтобы отобразить список транзакций для определённой группы репликации, используйте параметр -r|--repgroup (по умолчанию для всех групп репликации). Если таких транзакций нет, команда возвращает значение null в формате JSON.

Выгрузка всех ключей из хранилища для отладки конфигурации ошибок

Столкнувшись с ошибкой при использовании кластера Shardman, для получения исчерпывающего отчёта полезно выгрузить все конфигурации, которые могут привести к такой ошибке, используя следующую команду:

    shardmanctl [общие_параметры] store dump -f|--file имя_файла
   

Могут отображаться некоторые некритичные ошибки, но они не будут прерывать выгрузку. Если имя файла не указано, данные выводятся в stdout и могут замусорить терминал.

Получение текущей конфигурации stolon

Чтобы получить текущую конфигурацию stolon, которая обычно является частью ключа кластера в хранилище, используйте следующую команду:

    shardmanctl [общие_параметры] store get -a|--alias stolonspec -f|--file имя_файла
   

Если сам ключ кластера повреждён, конфигурация stolon также не будет отображаться. Вместо использования псевдонима можно также узнать полное имя ключа данных кластера (выведя все ключи командой store keys) и использовать store get, чтобы получить его и найти в нём часть stolon. Учтите, что при использовании последнего варианта параметр shardman.config_uuid не будет удалён, что может привести к конфликту при последующем использовании этих данных. Для манипуляций с конфигурацией stolon рекомендуется использовать команду shardmanctl store get -a stolonspec.

Получение имён ключей кластера и ковша для текущего кластера

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

    shardmanctl [общие_параметры] store keys
   

Они могут отображаться только в формате JSON. Также будут выведены псевдонимы для тех ключей, у которых они есть (за исключением stolonspec и spec, так как они являются частями других ключей)

Вывод информации о текущей блокировке метаданных кластера

Можно просмотреть информацию о текущих блокировках метаданных кластера, полученных любой командой:

    shardmanctl [общие_параметры] store lock -f|--format json
   

Чтобы получить отчёт в формате JSON, используйте параметр -f|--format=json (не указан выше, поскольку формат text используется по умолчанию). Если блокировка не существует, возвращает Lock not found.

Установка новой конфигурации для кластера

Чтобы установить новую часть конфигурации кластера, выполните следующую команду:

    shardmanctl [общие_параметры] store set --alias=spec --file=spec.json
   

Поскольку spec является частью ключа данных кластера, его нельзя задать в параметре --key. Если выбранный файл не формата JSON, новая часть конфигурации не будет установлена.

Резервное копирование кластера Shardman

Требования к резервному копированию и восстановлению кластера Shardman командой basebackup перечислены в Подразделе 2.6.1.1.

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

    shardmanctl [общие_параметры] backup --datadir каталог
   

Следует указать каталог для записи выходных данных в параметре --datadir. Можно ограничить количество одновременно выполняющихся задач (команды pg_receivewal или pg_basebackup), указав ограничение в параметре --maxtasks.

Регистрация кластера Shardman

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

    shardmanctl [общие_параметры] init [-y|--yes] [-f|--spec-file имя_файла_конфигурации]|текст_конфигурации
   

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

  • В командной строке — не указывать параметр -f и передать строку в текст_конфигурации.

  • В стандартном вводе — указать параметр -f и передать - в имя_файла_конфигурации.

  • В файле — указать параметр -f и передать имя файла в имя_файла_конфигурации.

Восстановление кластера Shardman

Расширение shardmanctl может выполнять полное восстановление, восстановление только метаданных или восстановление только схемы кластера Shardman из резервной копии, созданной командой backup.

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

    shardmanctl [общие_параметры] recover --info файл
   

Передайте файл для загрузки информации о резервной копии в параметре --info. В большинстве случаев в этом параметре нужно указывать файл backup_info в каталоге резервного копирования или его изменённую копию.

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

   shardmanctl [общие_параметры] recover --dumpfile файл --metadata-only
   

Следует указать файл для загрузки ранее выгруженных метаданных etcd в параметре --dumpfile.

Если нужно восстановить только информацию о схеме, например: таблицы, роли и т. д., следует указать параметр --schema-only.

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

Можно указать параметр --shard для восстановления только в одном сегменте.

Перед выполнением команды recover укажите DataRestoreCommand и RestoreCommand в файле backup_info. DataRestoreCommand извлекает базовую резервную копию и восстанавливает её в каталог данных stolon. RestoreCommand извлекает файл WAL и сохраняет его в файл pg_wal в каталоге stolon. Эти команды могут использовать следующие замены:

%p

Путь назначения на сервере.

%s

SystemId восстанавливаемой базы данных (одинаковый в резервной копии и в восстанавливаемом кластере).

%f

Имя файла WAL для восстановления.

процесс stolon keeper запускает обе команды на каждом узле в кластере, поэтому:

  • Резервную копию нужно сделать доступной для этих узлов (например, сохранив её в общей файловой системе или используя протокол удалённого копирования, такой как SFTP).

  • Команды для извлечения резервной копии выполняются от имени пользователя операционной системы, под которым работают демоны stolon (обычно postgres), поэтому необходимо установить соответствующие разрешения для файлов резервных копий.

В данных примерах показано, как задать RestoreCommand и DataRestoreCommand:

  • Если резервная копия доступна через SCP без пароля, можно использовать:

     "DataRestoreCommand": "scp -r user@host:/var/backup/shardman/%s/backup/* %p",
     "RestoreCommand": "scp user@host:/var/backup/shardman/%s/wal/%f %p"
      
  • Если резервная копия хранится в NFS и доступна по пути /var/backup/shardman, используйте:

     "DataRestoreCommand": "cp -r /var/backup/shardman/%s/backup/* %p",
     "RestoreCommand": "cp /var/backup/shardman/%s/wal/%f %p"
      

Резервное копирование кластера Shardman командой probackup

Требования к резервному копированию и восстановлению кластера Shardman командой probackup перечислены в Подразделе 2.6.3.1.

Например, следуя этим требованиям, на узле резервного копирования:

  groupadd postgres
  useradd -m -N -g postgres -r -d /var/lib/postgresql -s /bin/bash
 

Затем добавьте ключи SSH, чтобы обеспечить SSH-соединение без пароля между узлом резервного копирования и узлами кластера Shardman. Затем на узле резервного копирования:

  apt-get install pg-probackup shardman-utils
  mkdir -p каталог
  chown postgres:postgres каталог -R
  shardmanctl [общие_параметры] probackup init --backup-path=каталог --etcd-path=каталог/etcd --remote-user=postgres --remote-port=22
  shardmanctl [общие_параметры] probackup archive-command --backup-path=каталог --remote-user=postgres --remote-port=22
  

Если вышеуказанные требования соблюдены, запустите подкоманду backup для резервного копирования кластера:

shardmanctl [общие_параметры] probackup backup --backup-path=каталог --etcd-path=каталог --backup-mode=РЕЖИМ
  

Следует указать каталоги в параметрах --backup-path и --etcd-path, а режим резервного копирования в --backup-mode. Доступны различные режимы копирования: FULL, DELTA, PTRACK и PAGE. Также можно указать параметры сжатия резервной копии в флагах --compress, --compress-algorithm и --compress-level и указать флаги --remote-port и --remote-user. Можно ограничить количество одновременно выполняемых задач при резервном копировании, задав ограничение во флаге --maxtasks.

По умолчанию для создания резервной копии используется копирование данных по протоколу SSH. Чтобы изменить это поведение и скопировать данные в смонтированную секцию, используется параметр --storage-type со значением mount. Это значение будет автоматически использоваться в процессе восстановления.

Можно скопировать данные в S3-совместимое хранилище. Для этого используйте параметр --storage-type со значением S3. Это значение требует указания каталога для хранения журналов pg_probackup в команде --log-directory или в переменной окружения SDM_LOG_DIRECTORY, например:

export SDM_LOG_DIRECTORY=/backup/logs

Чтобы выполнить резервное копирование или восстановление только для S3-совместимого хранилища, вместо указания параметра --storage-type в каждой команде probackup можно установить переменную окружения:

export SDM_STORAGE_TYPE=S3
                

Восстановление кластера Shardman командой probackup

Расширение shardmanctl в режиме probackup может выполнять полное восстановление, восстановление только метаданных или восстановление только схемы кластера Shardman из резервной копии, созданной командой probackup backup.

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

shardmanctl [общие_параметры] probackup show --backup-dir=путь --format=формат [--archive ] [-i|--backup-id ид_резервной_копии] [--instance экземпляр]

После этого должен отобразиться список резервных копий с их идентификаторами в формате таблицы или JSON. Затем выберите нужный идентификатор резервной копии и запустите команду восстановления probackup.

shardmanctl [общие_параметры] probackup restore --backup-dir=путь --backup-id=идентификатор

Укажите путь к репозиторию в параметре --backup-dir и идентификатор резервной копии во флаге --backup-id.

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

shardmanctl [общие_параметры] probackup restore --backup-dir=путь --backup-id=идентификатор --metadata-only

Если нужно восстановить только информацию о схеме, например: таблицы, роли и т. д., следует указать параметр --schema-only.

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

Можно указать параметр --shard для восстановления только в одном сегменте.

Также можно указать параметр --recovery-target-time для выполнения восстановления на момент времени. В этом случае Shardman находит ближайшую точку синхронизации к указанной временной метке и предлагает выполнить восстановление по найденному значению LSN. Чтобы ограничить количество обрабатываемых сегментов WAL, можно указать параметр --wal-limit.

Важно

Перед восстановлением кластера Shardman необходимо убедиться, что кластер запущен, выполнив команду shardmanctl status. Если в выводе присутствуют ошибки, восстановление кластера может сделать его недоступным. Сначала необходимо исправить ошибки, повторно инициализировав кластер, и восстановить метаданные etcd. Только после этого можно проводить восстановление кластера из резервной копии.

Переинициализация реплик

Если реплики находятся в неправильном состоянии, их можно сбросить с помощью команды shardmanctl:

shardmanctl [общие_параметры] shard --shard=имя_сегмента replicas reinit

Эта команда определяет узлы, на которых запущены реплики указанного сегмента, и отправляет запрос shardmand на этих узлах. После получения этого запроса shardmand очищает каталог данных postgres и перезапускает процесс keeper, отвечающий за управление репликой. После этого реплики перезапускаются и начинают получать данные от соответствующего ведущего сервера.

Примеры

Инициализация кластера

Для инициализации кластера Shardman с именем cluster0, который использует кластер etcd, состоящий из прослушивающих порт 2379 узлов n1, n2 и n3, проверьте правильность параметров в файле конфигурации sdmspec.json и выполните:

$ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 init -f sdmspec.json

Получение строки подключения к кластеру

Чтобы получить строку подключения для кластера Shardman с именем cluster0, который использует кластер etcd, состоящий из узлов n1, n2 и n3, прослушивающих порт 2379, выполните:

  $ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 getconnstr
  
  dbname=host postgres=n1,n4,n2,n1,n1,n2,n4,n3 password=yourpasswordhere port=5432,5433,5432,5433,5432,5433,5432,5433 user=postgres
  
  

Чтобы добавить информацию о репликах в результат команды getconnstr, используется параметр --all.

Получение статуса кластера

Ниже представлен пример вывода статуса из shardmanctl со статусами OK и Error:

        $ shardmanctl status --filter store,shardmand,rg --sort=node
        
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                            == STORE STATUS ==                                            │
├────────────┬─────────────────────────────────────────────┬───────────────────────┬───────────────────────┤
│   STATUS   │                   MESSAGE                   │   REPLICATION GROUP   │          NODE         │
├────────────┼─────────────────────────────────────────────┼───────────────────────┼───────────────────────┤
│     OK     │ etcd store is OK                            │                       │                       │
└────────────┴─────────────────────────────────────────────┴───────────────────────┴───────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                          == SHARDMAND STATUS ==                                           │
├────────────┬─────────────────────────────────────────────┬───────────────────────┬───────────────────────┤
│   STATUS   │                   MESSAGE                   │   REPLICATION GROUP   │          NODE         │
├────────────┼─────────────────────────────────────────────┼───────────────────────┼───────────────────────┤
│     OK     │ shardmand on node 56d819b4e9e4 is OK        │                       │      56d819b4e9e4     │
├────────────┼─────────────────────────────────────────────┼───────────────────────┼───────────────────────┤
│     OK     │ shardmand on node 6d0aabd50acc is OK        │                       │      6d0aabd50acc     │
└────────────┴─────────────────────────────────────────────┴───────────────────────┴───────────────────────┘
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                       == REPLICATION GROUP STATUS ==                                      │
├────────────┬──────────────────────────────────────────────┬───────────────────────┬───────────────────────┤
│   STATUS   │                    MESSAGE                   │   REPLICATION GROUP   │          NODE         │
├────────────┼──────────────────────────────────────────────┼───────────────────────┼───────────────────────┤
│     OK     │ Replication group clover-1-56d819b4e9e4 is   │ clover-1-56d819b4e9e4 │                       │
│            │ OK                                           │                       │                       │
├────────────┼──────────────────────────────────────────────┼───────────────────────┼───────────────────────┤
│            │ Replication connection is down for slave     │                       │                       │
│    Error   │ 6d0aabd50acc:5442 in replication group       │ clover-1-6d0aabd50acc │   6d0aabd50acc:5442   │
│            │ clover-1-6d0aabd50acc                        │                       │                       │
└────────────┴──────────────────────────────────────────────┴───────────────────────┴───────────────────────┘
          
        

Изменение конфигурации stolon

Сначала получите список доступных ключей в хранилище, используя следующую команду:

      $ shardmanctl store keys
        
{
 "Key": "shardman/cluster0/data/cluster",
 "Alias": "cluster"
}{
 "Key": "shardman/cluster0/data/shardmand/56d819b4e9e4"
}{
...
 "Key": "shardman/cluster0/stolon/remoteLogs/6d0aabd50acc/clover-1-6d0aabd50acc/keeper_1/error"
}
        
      

Получите конфигурацию stolon из хранилища и сохраните её в файле stolonspec.json, используя команду

       $ shardmanctl store get -a stolonspec -f stolonspec.json
     

Примените необходимые изменения и загрузите новую конфигурацию командой shardmanctl config update. Учтите, что параметр shardman.config_uuid удаляется в команде shardmanctl store get -a stolonspec, а не в shardmanctl store get -k full/path/to/clusterspec; использование конфигурации с существующим shardman.config_uuid приведёт к конфликту.

Важно

Не используйте команду store set для обновления конфигураций кластера, поскольку она не применяет новую конфигурацию ко всем узлам, а только записывает её в хранилище. Для текущего примера с конфигурацией stolon допустимо выполнение shardmanctl config update.

Для перепроверки можно получить ключ кластера с новой StolonSpec по полному имени ключа (которое было показано ранее командой store keys):

      $ shardmanctl store get -k shardman/cluster0/data/cluster
        
{
  "FormatVersion": 1,
  "Spec": {
    "PgSuAuthMethod": "md5",
    "PgSuPassword": "12345",
    "PgSuUsername": "postgres",
    "PgReplAuthMethod": "md5",
    "PgReplPassword": "12345",
    "PgReplUsername": "repluser",
    "ShardSpec": {
      ...
}
        
      

Добавление узлов в кластер

Чтобы добавить узлы n1,n2, n3 и n4 в кластер, выполните:

$ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 nodes add -n n1,n2,n3,n4

Важно

Количество добавляемых узлов должно быть кратно Repfactor + 1, если используется политика размещения cross.

Удаление узлов из кластера

Чтобы удалить узлы n1 и n2 из кластера cluster0, выполните:

      $ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 nodes rm -n n1,n2
    

Если используется политика размещения cross, вместе с узлами будут удалены звенья, содержащие эти узлы.

Выполнение запроса во всех группах репликации

Чтобы выполнить запрос select version() во всех группах репликации, используйте:

 $ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 forall --sql 'select version()'
 
 Node 1 says:
 [PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit]
 Node 4 says:
 [PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit]
 Node 3 says:
 [PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit]
 Node 2 says:
 [PostgreSQL 13.1 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, 64-bit]
 
 

Выполнение перебалансировки

Чтобы выполнить перебалансировку сегментированных таблиц в кластере cluster0, выполните:

 $ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 rebalance
 

Обновление параметров конфигурации PostgreSQL

Чтобы установить для параметра max_connections значение 200 в кластере, создайте файл конфигурации (например, ~/stolon.json) со следующим содержимым:

 {
   "pgParameters": {
     "max_connections": "200"
   }
 }
 

Затем выполните:

  $ shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 config update -p -f ~/stolon.json
  

Поскольку для изменения max_connections требуется перезапуск, эта команда перезапускает экземпляры СУБД.

Выполнение резервного копирования и восстановления

Чтобы создать резервную копию кластера cluster0, используя etcd на etcdserver, прослушивающем порт 2379, и сохранить его в локальном каталоге /var/backup/shardman, выполните:

$ shardmanctl --store-endpoints http://etcdserver:2379 backup --datadir=/var/backup/shardman

Предположим, что вы выполняете восстановление из резервной копии в кластер cluster0, используя etcd на etcdserver, прослушивающем порт 2379, и берёте описание резервной копии из файла /var/backup/shardman/backup_info. Отредактируйте файл /var/backup/shardman/backup_info, если необходимо, задайте параметры DataRestoreCommand, RestoreCommand и запустите:

$ shardmanctl --store-endpoints http://etcdserver:2379 recover --info /var/backup/shardman/backup_info

For metadata-only restore, run:

$ shardmanctl --store-endpoints http://etcdserver:2379 recover --metadata-only --dumpfile /var/backup/shardman/etcd_dump

For schema-only restore, run:

$ shardmanctl --store-endpoints http://etcdserver:2379 recover --schema-only --dumpfile /var/backup/shardman/etcd_dump

For single shard restore, run:

$ shardmanctl --store-endpoints http://etcdserver:2379 recover  --info /var/backup/shardman/backup_info --shard shard_1

Выполнение резервного копирования и восстановления с использованием команды probackup

Чтобы создать резервную копию кластера cluster0, используя etcd на etcdserver, прослушивающем порт 2379, и сохранить её в локальном каталоге /var/backup/shardman, сначала инициализируйте репозиторий резервных копий подкомандой init:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup init --backup-path=/var/backup/shardman --etcd-path=/var/backup/etcd_dump

Затем добавьте и включите команду archive_command с подкомандой archive-command:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup archive-command add --backup-path=/var/backup/shardman

Если репозиторий успешно инициализирован и успешно добавлена archive-command, создайте резервную копию в режиме FULL, используя подкоманду backup:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup backup --backup-path=/var/backup/shardman --etcd-path=/var/backup/etcd_dump --backup-mode=FULL --compress --compress-algorithm=zlib --compress-level=5

Чтобы создать резервную копию в режиме DELTA, PTRACK или PAGE, запустите подкоманду backup со значением DELTA, PTRACK или PAGE параметра --backup-mode:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup backup --backup-path=/var/backup/shardman --etcd-path=/var/backup/etcd_dump --backup-mode=DELTA --compress --compress-algorithm=zlib --compress-level=5

Чтобы узнать идентификатор созданной резервной копии, запустите подкоманду show:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup show --backup-path=/var/backup/shardman --format=table

┌────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                                                                                                      == BACKUP ID 'S88FRO'                                                                                                     │
│                                                                                                               ==                                                                                                               │
├───────────────────────────────────┬───────────────────────────────────┬───────────────────────────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┬────────────┤
│              INSTANCE             │                HOST               │           RECOVERY TIME           │    MODE    │  WAL MODE  │     TLI    │    DATA    │     WAL    │   Z-RATIO  │  START LSN │  STOP LSN  │   STATUS   │
├───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│              shard-1              │               n1                  │       2024-02-02 14:19:05+00      │    FULL    │   ARCHIVE  │     1/0    │  42.37MiB  │    16MiB   │    1.00    │  0/C000028 │  0/D0018B0 │     OK     │
├───────────────────────────────────┼───────────────────────────────────┼───────────────────────────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┼────────────┤
│              shard-2              │               n2                  │       2024-02-02 14:19:05+00      │    FULL    │   ARCHIVE  │     1/0    │  42.38MiB  │    16MiB   │    1.00    │  0/C000028 │  0/D001E00 │     OK     │
└───────────────────────────────────┴───────────────────────────────────┴───────────────────────────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┴────────────┘


В режиме PTRACK Shardman отслеживает изменения страниц на лету. Чтобы он работал, не требуется производить непрерывное архивирование. При каждом изменении страницы отношения она помечается в специальной битовой карте PTRACK. Это отслеживание немного увеличивает издержки в работе сервера, но значительно ускоряет инкрементальное резервное копирование.

Если будут использоваться резервные копии PTRACK, выполните следующие дополнительные шаги:

  • Предварительно загрузите общую библиотеку ptrack на каждом узле. Добавьте значение ptrack к параметру shared_preload_libraries.

  • Создайте расширение PTRACK на каждом узле кластера:

                                $ shardmanctl --store-endpoints http://etcdserver:2379 forall --sql "create extension ptrack"
    
  • Для включения отслеживания изменений страницы, задайте параметр ptrack.map_size следующим образом:

                                $ shardmanctl --store-endpoints http://etcdserver:2379 update '{"pgParameters":{"ptrack.map_size":"64"}}'
    

    Для оптимальной производительности рекомендуется задавать ptrack.map_size равным N/1024, где N — максимальный размер узла кластера в мегабайтах. Если задать меньшее значение, увеличится вероятность наложения информации из разных блоков в карте PTRACK, что повлечёт ложные положительные результаты при определении изменённых блоков и, как следствие, увеличение размера инкрементальной копии, так как в копию будут попадать и фактически неизменённые блоки. Использовать значения ptrack.map_size, превышающие 1024, не рекомендуется, хотя PTRACK поддерживает большие карты.

Чтобы проверить созданную резервную копию, запустите подкоманду validate:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup validate --backup-path=/var/backup/shardman --backup-id=RFP1FI

Предположим, что выполняется восстановление из резервной копии в кластер cluster0, используя etcd на etcdserver, прослушивающем порт 2379, и берётся идентификатор резервной копии из команды show:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup restore --backup-path=/var/backup/shardman --backup-id=RFP1FI
  

Наконец, нужно снова включить archive_command.

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup archive-command add --backup-path=/var/backup/shardman

Для восстановления только метаданных выполните:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup restore --schema-only --backup-path=/var/backup/shardman --backup-id=RFP1FI

Для восстановления одного сегмента выполните:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup restore --backup-path=/var/backup/shardman --backup-id=RFP1FI --shard shard_1

Для восстановления на определённый момент времени выполните:

$ shardmanctl --store-endpoints http://etcdserver:2379 probackup restore --metadata-only --backup-path=/var/backup/shardman --backup-id=RFP1FI --recovery-target-time='2006-01-02 15:04:05' -s

Загрузка данных из текстового файла

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

$ shardmanctl --store-endpoints http://etcdserver:2379 load --file=/var/load/data.tsv --table=mytable --source file --format text -j 8
    

В этом примере данные загружаются из файла данных /var/load/data.tsv (с разделением табуляцией) в таблицу mytable в 8 параллельных потоков. Можно использовать schema.table в качестве имени таблицы.

Загрузка данных из таблицы PostgreSQL

Чтобы загрузить данные в кластер Shardman из таблицы PostgreSQL, выполните следующую команду:

$ shardmanctl --store-endpoints http://etcdserver:2379 load -t desttable --source postgres --source-connstr "dbname=db host=srchost port=srcport user=login password=passwd" --source-table sourcetable -j 8
     

В этом примере данные загружаются из таблицы sourcetable в таблицу desttable в 8 параллельных потоков. Можно использовать schema.table в качестве имён таблиц.

Загрузка данных из схемы PostgreSQL

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

$ shardmanctl --store-endpoints http://etcdserver:2379 load --schema load_schema.yaml
     

Файл load_schema.yaml имеет следующий формат:

version: "1.0"
migrate:
  connstr: "dbname=workdb host=workhost port=workport user=workuser password=workpassword"
  jobs: 8
  batch: 1000
  options:
    - create_schema
    - create_table
    - create_index
    - create_sequence
    - create_foreign_key
    - create_role
    - copy_ownership
    - copy_grants
    - truncate_table
    - skip_no_pkey_tables
    - skip_create_index_error
    - skip_create_extension_error
    - skip_load_errors
    - skip_create_foreign_key_error
    - skip_create_role_error
    - skip_copy_grants_error
    - skip_copy_ownership_error
  schemas:
    - name: public
      all: false
      tables:
        - name: tab1
          type: sharded
          partitions: 6
          distributedby: id
          priority: 3
        - name: tab2
          type: global
        - name: tab3
          type: sharded
          partitions: 6
          distributedby: field_id
          colocatewith: tab1
        - name: table4
            type: global
            source: schema.view
            source_pk: field_id
        - name: table5
            type: global
            source: schema.func(arg)
            source_pk: field_id
    - name: schema2
      all: false
      default_type: sharded
      default_partitions: 6
      tables:
        - name: table1
          distributedby: field_id
          priority: 2
        - name: table2
          type: global
        - name: table3
          source: schema.view
          distributedby: field_id
          priority: 3
        - name: table4
          distributedby: field_id
          source: schema.func(arg)
        - name: table5
          source: schema."complex.""table.name"
          distributedby: field_id
    - name: schema3
      all: true
      skip_tables: [table1, table2, table3]     
  roles:
    - name: test_user1
      password: test_password
    - name: test_user2  
    

Параметр migrate.jobs определяет количество параллельных процессов загрузки данных.

Параметр migrate.batch задаёт число строк в одной порции (рекомендуемое значение — 1000).

Параметр migrate.schema определяет массив желаемых схем исходной базы данных. Все остальные схемы будут пропущены.

Если для параметра all задано значение true, то будут перенесены все таблицы из текущей схемы (с типом global по умолчанию). Если таблица указана в массиве migrate.schemas.tables, то для неё необходимо явно указать тип целевой таблицы. В настоящее время поддерживаются два типа таблиц: global и sharded. Сначала загружаются глобальные (global) таблицы, затем сегментированные (sharded) таблицы и в конце сегментированные таблицы с параметром colocatedwith. Порядок загрузки таблиц одного типа можно изменить с помощью параметра priority.

Секция migrate.schemas.skip_tables определяет массив имён таблиц, которые будут пропущены при загрузке схемы, даже если для параметра all установлено значение true.

Для сегментированных таблиц должны быть установлены следующие атрибуты: distributedby (указывает имя столбца, используемого для секционирования таблицы) и partitions (количество секций, которые будут созданы для этой таблицы). Для сегментированных таблиц может быть дополнительно установлен атрибут colocatewith (имя таблицы, с которой выполняется совместное размещение). Shardman попытается разместить секции созданной таблицы с тем же ключом секции на тех же узлах, что и соответствующие секции таблицы, указанные в colocatewith.

Можно указать параметр таблицы default_type для схемы: global или sharded (по умолчанию: global). Для сегментированного типа также можно указать параметр default_partitions (по умолчанию: 20). Если установлен default_type sharded, необходимо указать параметр distributedby для каждой таблицы.

Параметр source для таблицы должен включать схему и исходную таблицу: schema.source. Исходной может быть таблица, представление или функция. Например: public.table, public.view, public.func(arg). Если устанавливается представление или функция source для глобальной таблицы, необходимо указать в параметре source_pk, какой первичный ключ установлен для этой таблицы. Если source не указан или содержит имя таблицы, также можно указать параметр source_pk, чтобы создать первичный ключ или переопределить существующий.

Параметр priority для таблицы определяет порядок загрузки таблиц одного типа. Таблицы с большим значением priority загружаются раньше. Значение priority по умолчанию — 0.

Раздел migrate.roles определяет массив имён таблиц и паролей, которые будут скопированы из исходной базы данных, если задан параметр create_role.

Схема поддерживает следующие параметры:

  • create_schema — создавать схемы баз данных, если они не существуют.

  • create_table — создавать таблицы, если они не существуют.

  • create_index — создавать индексы после создания таблиц.

  • create_sequence — создавать последовательности, если они не существуют.

  • create_index — создавать индексы после создания таблиц.

  • truncate_table — опустошать таблицы перед загрузкой данных.

  • create_role — создать глобальные роли, заданные в migrate.roles, и скопировать параметры ролей из исходной базы данных.

  • copy_grants — скопировать права доступа из исходной базы данных.

  • copy_ownership — сменить владельцев таблиц на владельца в исходной базе данных.

  • skip_no_pkey_tables — пропускать таблицы без первичных ключей.

  • skip_create_index_error — пропускать ошибки создания индекса.

  • skip_create_extension_error — пропускать ошибки создания расширений.

  • skip_load_errors — продолжать загрузку при возникновении ошибок.

  • skip_create_foreign_key_error — пропускать ошибки создания внешних ключей.

  • skip_create_role_error — пропускать ошибки создания ролей.

  • skip_copy_ownership_error — пропускать ошибки смены владельца таблицы.

  • skip_copy_grants_error — пропускать ошибки при копировании прав доступа из исходной базы данных.

Инициализация и тесты производительности

Чтобы инициализировать тест производительности через shardmanctl, используя pgbench со схемой shardman, масштабирование=1000, разделы=40, запустите:

$ shardmanctlbench init --schema-type=shardman --scale=1000 --partitions=40

Чтобы запустить инициализированный тест производительности для той же схемы shardman, при количестве заданий=4, количестве клиентов=10, продолжительности в секундах=60 и с полным выводом pgbench, используйте:

$ shardmanctl bench run --schema-type=shardman --jobs=4 --client=10 --time=60 --full-output

Чтобы инициализировать тест производительности с использованием custom схемы из файла schema.psql с масштабированием=1000, выполните:

$ shardmanctlbench init --schema-type=custom --schema-file=schema.psql --scale=1000

Чтобы запустить инициализированный тест производительности с использованием custom схемы и пользовательского скрипта транзакции из script.psql с количеством заданий =4, числом клиентов=10, продолжительность в секундах=60, используйте:

$ shardmanctl bench run --schema-type=custom --file=script.psql --jobs=4 --client=10 --time=60

Чтобы очистить базу данных PostgreSQL от таблиц tpc-b, используйте:

$ shardmanctl bench cleanup

Скрипты генерации тестов производительности

Чтобы сгенерировать последовательность тестов производительности через shardmanctl из файла конфигурации=cfg.yaml и вывести результат в file=script.sh, запустите:

$ shardmanctlbenchgenerate --config=cfg.yaml --output-file=script.sh

Пример файла конфигурации:

    benches:
    - schema_type: single
      init_flags: "-s 3"
      run_flags: "-n -P 10 -c 10 -j 4 -T 10"
    - schema_type: simple
      init_flags: "-s 4"
      run_flags: "-n -P 10 -c 20 -j 4 -T 10"
      partitions: 100
    - schema_type: shardman
      init_flags: "-s 5"
      run_flags: "-n -P 10 -c 20 -j 4 -T 10"
    - schema_type: custom
      init_flags: "-s 6"
      schema_file: "schema.psql"
                            

См. также

sdmspec.json , shardmand