shardmanctl
shardmanctl — Postgres Pro Shardman вспомогательный клиент командной строки и средство развёртывания
Содержание #
Описание #
shardmanctl — это утилита для управления кластером Shardman.
Для любой команды, которая использует имя узла в качестве аргумента, имя узла кластера может быть указано либо по имени узла сети, либо по IP-адресу.
Команда backup
используется для резервного копирования кластера Postgres Pro Shardman . Резервная копия представляет собой каталог с базовыми копиями всех групп репликации и файлами WAL, необходимыми для восстановления. Метаданные etcd сохраняются в файле etcd_dump
. Файл backup_info
создаётся во время резервного копирования и содержит описание копии.
Команда cleanup
используется для очистки после сбоя команды nodes add
или команды rebalance
утилиты shardmanctl . Окончательные изменения в хранилище etcd вносятся в конце выполнения команды. Это упрощает процесс очистки. Во время очистки неполные определения звена и определения соответствующих групп репликации удаляются из метаданных etcd. Определения соответствующих сторонних серверов удаляются из метаданных СУБД остальных групп репликации. Поскольку процесс cleanup
может удалять данные, по умолчанию инструмент работает исключительно в режиме отчёта: он показывает только те действия, которые необходимо выполнить во время фактической очистки. Для выполнения реальной очистки нужно добавить ключ -p
. Использование команды подробно описано в Подразделе «Выполнение очистки».
Команда daemon check
используется, чтобы проверить, что демон shardmand работает на узлах, указанных в параметре --nodes
, и настроен для того же кластера, что и shardmanctl . Использование команды подробно описано в Подразделе «Проверка работы службы shardmand на узлах».
Команда init
используется для регистрации нового кластера Postgres Pro Shardman в хранилище etcd или переинициализации существующего (будет задана новая конфигурация кластера, удалены все данные и узлы). В режиме инициализации утилита shardmanctl считывает спецификацию кластера, обрабатывает её и сохраняет в хранилище etcd как части двух документов JSON: ClusterSpec
— как часть shardman/cluster0/data/cluster
и LadleSpec
— как часть shardman/cluster0/data/ladle
(cluster0
— это имя кластера по умолчанию, используемое утилитами Postgres Pro Shardman). Общие параметры, связанные с хранилищем etcd, например --store-endpoints
, также сохраняются в хранилище etcd и передаются всем службам Postgres Pro Shardman, запущенным расширением shardmand. Формат файла инициализации Postgres Pro Shardman подробно описан в разделе Подразделе 19.21.2, а использование команды init
— в Подразделе «Регистрация кластера Postgres Pro Shardman».
Команда config generate
используется для создания шаблона sdmspec.json
по умолчанию. Результат записывается в стандартный вывод. Чтобы записать результат в файл, используйте флаг -f
. Формат файла инициализации Shardman описан в Подразделе 19.21.2.имя_файла
Команда config verify
используется для проверки корректности входного файла инициализации Postgres Pro Shardman. По умолчанию конфигурация считывается со стандартного ввода. Чтобы конфигурация читалась из файла, используйте флаг -f
. За описанием формата файла инициализации Postgres Pro Shardman обратитесь к Подразделу 19.21.2.имя файла
Команда config get
используется для вывода текущей полной конфигурации кластера или конфигурации указанной версии. Текущая конфигурация кластера берётся из хранилища кластера. Формат файла инициализации Postgres Pro Shardman описан в Подразделе 19.21.2.
Команда config update
используется для обновления конфигурации BiHA-кластера или конфигурации всего Postgres Pro Shardman. Новая конфигурация применяется ко всем группам репликации и сохраняется в ключе etcd shardman/cluster0/data/cluster
. Обратите внимание, что config update
может привести к перезапуску СУБД.
Команда forall
используется для выполнения оператора SQL во всех группах репликации в кластере Postgres Pro Shardman.
Команда getconnstr
используется для получения строки подключения libpq и подключения к кластеру в роли администратора.
Команда load
используется для загрузки данных из текстового файла в распределённую таблицу или для загрузки схемы базы данных из базы данных PostgreSQL в Postgres Pro Shardman. При загрузке данных из файла поддерживаются форматы text
и csv
(файлы могут быть сжаты при помощи gzip, тогда при чтении они декодируются автоматически); если нужно прочесть данные из stdin, то следует указать параметр --file=
. Процесс загрузки данных можно оптимизировать, указав число параллельных рабочих процессов (ключ -
-j
).
Команда nodes add
используется для добавления новых узлов в кластер Shardman. Со стандартной политикой размещения cross
узлы добавляются в кластер в виде звеньев. На каждом узле в звене работает ведущий экземпляр СУБД и, возможно, несколько реплик других узлов этого звена. Число реплик определяется параметром конфигурации Repfactor. Таким образом, каждое звено состоит из Repfactor + 1
узлов и может выдержать потерю Repfactor
узлов.
При ручной политике размещения каждый новый узел добавляется как группа репликации, состоящая из одного ведущего сервера. После добавления ведущих узлов можно добавить реплики в новую группу репликации, используя команду shard add
.
Утилита shardmanctl выполняет операцию nodes add
в несколько этапов:
Получает глобальную блокировку метаданных.
Для каждого указанного узла проверяет, работает ли на нём Postgres Pro Shardman и видит ли он текущую конфигурацию кластера.
Вычисляет службы, которые должны присутствовать на каждом узле, и сохраняет эту информацию в etcd как часть
Layout
объектаshardman/cluster0/data/ladle
.Создаёт конфигурацию для новых BiHA-кластеров (также называемых группами репликации) и инициализирует их.
Регистрирует добавленные группы репликации в ключе etcd
shardman/cluster0/data/ladle
.Ожидает, пока shardmand запустит все необходимые службы, и проверяет доступность новых групп репликации и правильность их конфигураций.
Создаёт вспомогательный сервер трансляций, который удерживает блокировки для каждой существующей группы репликации в кластере.
Для каждой новой группы репликации в кластере копирует все схемы и данные схем
shardman
из случайно выбранной существующей группы репликации в новую группу, а также проверяет, что расширение Postgres Pro Shardman установлено в новой группе репликации, и пересчитывает OID, используемые в таблицах конфигурации расширения.В каждой существующей группе репликации определяет сторонние серверы, ссылающиеся на новую группу репликации, и воссоздаёт определения сторонних серверов в новой группе репликации.
Пересоздаёт все секции сегментированных таблиц как сторонние таблицы, ссылающиеся на данные из старых групп репликации, и регистрирует изменения в хранилище etcd.
Для каждой новой группы репликации копирует данные глобальной таблицы из существующих групп репликации в новую.
Выполняет перебалансировку секции сегментированных таблиц. В процессе перебалансировки для каждой сегментированной таблицы итерационно определяется группа репликации с максимальным и минимальным количеством секций и создаётся задача на перемещение одной секции в группу репликации с минимальным количеством секций. Этот процесс повторяется, пока
max - min > 1
. Для перемещения секций используется логическая репликация. Секции совместно размещённых таблиц перемещаются совместно с секциями распределённых таблиц, на которые они ссылаются. Можно пропустить этот шаг, используя--no-rebalance
.
Использование данной команды подробно описано в Подразделе «Добавление узлов в кластер Postgres Pro Shardman».
Команда nodes rm
используется для удаления узлов из кластера Shardman. В режиме manual удаляются только указанные узлы. Если узел является последним в репликационной группе, то удаляется и вся группа репликации. В режиме cross команда удаляет из кластера звенья, содержащие указанные узлы. Последнее звено в кластере не может быть удалено. Любые данные (например, секции сегментированных отношений) в удалённых группах репликации переносятся в оставшиеся группы посредством логической репликации, а все ссылки на удалённые группы репликации (включая определения сторонних серверов) удаляются из метаданных оставшихся групп репликации. Наконец, обновляются метаданные в etcd. Использование команды подробно описано в Подразделе «Удаление узлов из кластера Postgres Pro Shardman».
Команда probackup
выполняет резервное копирование и восстановление кластера Shardman, используя утилиту резервного копирования pg_probackup. Более подробное использование команды pg_probackup описано в Подразделе «Команда probackup
».
Команда rebalance
используется для равномерной перебалансировки сегментированных таблиц в кластере. Это может быть полезно, например, если перебалансировка не выполнялась при добавлении узлов в кластер. Если не указан параметр --force
, таблицы с разделами, перемещёнными вручную, будут пропущены.
Команда cleanup
с флагом --after-rebalance используется для выполнения очистки после сбоя команды rebalance
. На каждом узле она удаляет подписки и публикации, оставшиеся после команды rebalance
, а также таблицы, в которых хранятся данные частично переданных секций сегментированных таблиц.
Команда cluster repfactor set
используется для установки значения коэффициента репликации для кластера Postgres Pro Shardman. Эту команду можно использовать только в ручном (manual
) режиме топологии кластера. Значение нового коэффициента репликации передаётся через флаг командной строки --value
.коэффициент_репликации
Команда cluster start
используется для запуска всех экземпляров PostgreSQL, остановленных командой cluster stop
. Чтобы команда работала, должен быть запущен shardmand.
Команда cluster stop
используется для остановки всех экземпляров PostgreSQL для кластера Postgres Pro Shardman. При этом демоны shardmand продолжают работать.
Команда cluster topology
используется для визуализации топологии кластера. По умолчанию топология возвращается в виде таблицы. Если необходимо получить представление в формате JSON, используйте флаг --format
.json
|text
Команда recover
восстанавливает кластер Postgres Pro Shardman из резервной копии, созданной командой backup
.
Команда restart
используется для перезапуска кластера Postgres Pro Shardman, включая все экземпляры shardmand. Если экземпляры PostgreSQL были предварительно остановлены командой cluster stop
, они будут запущены. Команда возвращает управление после перезапуска всех ведущих серверов в кластере.
Команда set
используется для установки одного или нескольких параметров экземпляров СУБД кластера Postgres Pro Shardman. Параметры передаются в командной строке в качестве аргументов, каждый из них имеет вид param=value
. Эта команда является аналогом shardmanctl config update -p
для изменения параметров базы данных.
Команда status
используется для отображения состояния работоспособности подсистем кластера Postgres Pro Shardman. Она может отображать состояние нескольких компонентов: хранилища, метаданных, shardmand, групп репликации, ведущих серверов, словаря, статуса представления biha.status_v
и перезапуска необходимых параметров. Если нужна информация об определённых подсистемах, можно использовать параметр --filter
. Также status
поддерживает сортировку своих результатов по значениям status
, node
или replication group
и выводит их в виде таблицы (table
), текста (text
) или в формате JSON
(json
) на stdout, значение по умолчанию — table
. Использование команды описано в разделе «Получение статуса подсистем кластера».
Команда store dump
получает все ключи и их значения из хранилища etcd и выводит их в --file
, причём значение -
используется для вывода в стандартный вывод (по умолчанию). Она предназначена для отладки, поэтому во время выполнения могут возникать некоторые некритичные ошибки, но при этом вся доступная информация будет сохранена. Будут выгружены только ключи для текущего кластера (с текущим префиксом кластера, например shardman/cluster0/
). Использование команды описано в разделе «Выгрузка всех ключей из хранилища для отладки конфигурации ошибок».
Команда store get
получает конкретное значение из хранилища по имени ключа. Ожидается, что это значение JSON, поэтому, если это не так (что не запрещено), могут возникать некоторые некритичные ошибки. Ключ для извлечения из хранилища можно указать в параметре --key
; несколько ключей имеют псевдонимы — короткие имена для удобства использования. Чтобы получить ключ по его псевдониму, используйте параметр --alias
с одним из доступных псевдонимов (используйте --help
или примеры ниже для справки). Также псевдонимы shardspec и spec можно использовать для явного управления начальным кластером и конфигурацией BiHA, не извлекая их из полной конфигурации кластера. Рекомендуется использовать существующие псевдонимы вместо полных имён ключей, так как при обработке псевдонимов есть некоторые дополнительные проверки, которые помогают достичь более надёжных результатов. По умолчанию ключ выводится на стандартный вывод (явно — с параметром --file=
), но может быть выведен в любой желаемый файл. Использование команды описано в разделе «Получение текущей конфигурации сегмента».-
Команда store keys
показывает все сохранённые ключи для текущего кластера (с префиксом кластера) и его псевдонимов. Псевдонимы shardspec
и 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 используется глобальная блокировка метаданных.
Команды резервного копирования и восстановления #
Команда backup
#
Чтобы создать резервную копию кластера Postgres Pro Shardman, вы можете запустить следующую команду:
shardmanctl [общие_параметры
] backup --datadirкаталог
[--use-ssh]
Следует указать каталог для записи выходных данных в параметре --datadir
. Можно ограничить количество одновременно выполняющихся задач (команды pg_receivewal
или pg_basebackup
), указав ограничение в параметре --maxtasks
.
Если указано --use-ssh
, команда shardmanctl recover
будет использовать команду scp
для восстановления данных. Это позволяет использовать хранилище резервных копий на локальном узле.
Команда probackup
#
Синтаксис:
shardmanctl [общие_параметры
] probackup [init|archive-command|backup|checkdb|delete|merge|restore|set-config|show|validate|show-config] [--log-to-console][--help] [параметры_подкоманды
]
Создаёт резервную копию кластера Postgres Pro Shardman и восстанавливает кластер Postgres Pro Shardman из резервной копии, используя pg_probackup.
Список подкоманд: #
-
init
# Инициализирует новый каталог репозитория для резервной копии кластера Postgres Pro Shardman, а также создаёт конфигурационный файл для подключения к хранилищу резервных копий, если для параметра
--storage-type
установлено значениеS3
.-
archive-command
# Добавляет, включает или отключает
archive_command
для каждой группы репликации в кластере Postgres Pro Shardman или только для одной группы, если указан параметр--shard
.-
backup
# Создаёт резервную копию кластера Postgres Pro Shardman.
-
checkdb
# Проверяет кластер Postgres Pro Shardman на наличие физических повреждений или логических нарушений.
-
delete
# Удаляет резервную копию кластера Postgres Pro Shardman с заданным идентификатором
backup_id
.-
merge
# Объединяет резервные копии, относящиеся к одной цепочке инкрементальных копий. При полном копировании резервные копии объединяются с их первой инкрементальной копией. При инкрементальном резервном копировании резервные копии объединяются с их родительской полной копией и всеми инкрементальными копиями между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные. В текущей версии не поддерживается выполнение команды
merge
через интерфейс S3.-
restore
# Восстанавливает кластер Postgres Pro Shardman из выбранной резервной копии.
-
show
# Показывает список резервных копий кластера Postgres Pro Shardman.
-
validate
# Проверяет целостность выбранной резервной копии кластера Postgres Pro Shardman.
-
show-config
# Выводит все текущие параметры конфигурации pg_probackup, в том числе те, что содержатся в файле
pg_probackup.conf
, размещённом в каталоге
, а также те, что были заданы в командной строке.каталог_копий
/backups/имя_сегмента
-
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-typemount|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]
Инициализирует новый каталог репозитория для резервной копии кластера Postgres Pro Shardman.
-
-B
path
--backup-path
#path
Требуется при отсутствии параметра
--s3-config-only
. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.-
-E
path
--etcd-path
#path
Требуется при отсутствии параметра
--s3-config-only
. Указывает путь к каталогу, в котором должны храниться копии etcd.-
--remote-port
#порт
Указывает удалённый порт SSH для экземпляров группы репликации.
По умолчанию:
22
.-
--remote-user
#username
Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.
По умолчанию:
postgres
.-
--ssh-key
#path
Указывает закрытый ключ SSH для удалённого выполнения команд по SSH.
По умолчанию:
$HOME/.ssh/id_rsa
.-
--storage-type
#mount|remote|S3
Тип хранилища резервных копий. При значении
remote
протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра--storage-type
значениеmount
илиS3
соответственно.По умолчанию:
remote
.-
--s3-config-path
#path
Задаёт путь к каталогу, в котором создаётся файл конфигурации S3 на всех узлах Postgres Pro 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
#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-typemount|remote|S3
] [--remote-portпорт
] [--remote-userимя_пользователя
] [-s|--shardимя_сегмента
] [--s3-config-pathпуть
] [-y|--yes]
Добавляет/удаляет и включает/отключает команду архивирования для каждой группы репликации в кластере Postgres Pro Shardman для размещения журналов WAL в инициализированном репозитории резервных копий.
-
add
# Добавляет и включает команду
archive
для каждой группы репликации в кластере Postgres Pro Shardman.-
rm
# Отключает команду
archive
в каждой группе репликации в кластере Postgres Pro Shardman. Никаких дополнительных параметров не требуется.-
-B
path
--backup-path
#path
Требуется при добавлении
archive_command
. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.-
--batch-size
#batch_size
Для ускорения архивирования используется параметр
--batch-size
, определяющий размер порции из нескольких копируемых сегментов WAL. Вместе с параметром--batch-size
также можно применить указание-j
, чтобы порции копировались в несколько потоков.-
--jobs
число
-j
#число
Число параллельных потоков, которые используются pg_probackup при создании резервной копии. По умолчанию: 1.
-
--compress
# Включает сжатие резервных копий. Если этот флаг не установлен, сжатие будет отключено. Если флаг установлен, используется принятый по умолчанию алгоритм
zstd
с уровнем сжатия 1, в то время как остальные параметры сжатия игнорируются, даже если они заданы.-
--compress-algorithm
#алгоритм
Определяет алгоритм сжатия:
zlib
,lz4
,zstd
,pglz
илиnone
. Как только алгоритм задан, этот параметр проверяет, что значение уровня сжатия находится в пределах возможных значений для заданного алгоритма.Список поддерживаемых алгоритмов сжатия зависит от версии Postgres Pro Shardman, включающей используемое приложение pg_probackup. Подробная информация описана в статье Параметры сжатия.
По умолчанию:
none
.-
--compress-level
#level
Определяет уровень сжатия: 0-9 для
zlib
, 1 дляpglz
, 0-22 дляzstd
и 0-12 дляlz4
.По умолчанию: 1.
-
--storage-type
#mount|remote|S3
Тип хранилища резервных копий. При значении
remote
протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра--storage-type
значениеmount
илиS3
соответственно.По умолчанию:
remote
.-
--remote-port
#порт
Указывает удалённый порт SSH для экземпляров группы репликации.
По умолчанию:
22
.-
--remote-user
#username
Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.
По умолчанию:
postgres
.-
-s|--shard
#имя_сегмента
Задаёт имя сегмента, в котором необходимо добавить, включить или выключить команду
archive
. Если параметр не указан, командаarchive
включается или выключается во всех сегментах.-
--s3-config-path
#path
Задаёт путь к файлу конфигурации S3.
По умолчанию:
<shardman-data-dir>/s3.config
.-
-y
--yes
# Подтвердить перезапуск вместо того, чтобы запрашивать подтверждение из стандартного ввода. Применяется только для команды
add
.
backup
#
Синтаксис:
shardmanctl [общие_параметры
] probackup backup -B|--backup-pathпуть
-E|--etcd-pathпуть
-b|--backup-modeРЕЖИМ
[-j|--jobsчисло
] [--compress] [--compress-algorithmалгоритм
] [--compress-levelуровень
] [--batch-sizeразмер_порции
] [--storage-typemount|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] [--retention-redundancy] [--retention-window] [--wal-depth] [--delete-wal] [--delete-expired] [--merge-expired] [-y | --yes] [--lock-lifetime] [-e |--external-dirsимя_каталога
]
Создаёт резервную копию кластера Postgres Pro Shardman.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.
-
-E
path
--etcd-path
#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
# Включает сжатие резервных копий. Если этот флаг не установлен, сжатие будет отключено. Если флаг установлен, используется принятый по умолчанию алгоритм
zstd
с уровнем сжатия 1, в то время как остальные параметры сжатия игнорируются, даже если они заданы.-
--compress-algorithm
#алгоритм
Определяет алгоритм сжатия:
zlib
,lz4
,zstd
,pglz
, илиnone
.Список поддерживаемых алгоритмов сжатия зависит от версии Postgres Pro Shardman, включающей используемое приложение pg_probackup. Подробная информация описана в статье Параметры сжатия.
По умолчанию:
none
.-
--compress-level
#level
Определяет уровень сжатия: 0-9 для
zlib
, 1 дляpglz
, 0-22 дляzstd
и 0-12 дляlz4
.По умолчанию: 1.
-
--remote-port
#порт
Указывает удалённый порт SSH для экземпляров группы репликации.
По умолчанию:
22
.-
--remote-user
#username
Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.
По умолчанию:
postgres
.-
--ssh-key
#path
Указывает закрытый ключ 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
#path
Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра
--storage-type
установлено значениеS3
и не задана переменная окруженияSDM_LOG_DIRECTORY
.По умолчанию:
<backup-directory>/backup/log
.-
--s3-config-path
#path
Задаёт путь к файлу конфигурации S3.
По умолчанию:
<shardman-data-dir>/s3.config
.-
--retention-redundancy=
избыточность
#
Указывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть неотрицательным целым числом. Ноль отключает сохранение.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--retention-window=
окно
#
Количество дней, в течение которого возможно восстановление. Должно быть неотрицательным целым числом. При нулевом значении окно восстановления отсутствует.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--wal-depth=
#глубина_wal
Количество резервных копий на каждой линии времени, которое должно сохраняться для обеспечения возможности восстановления PITR. Должно быть неотрицательным целым числом. При нулевом значении этот параметр отключается.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--delete-wal
#Удаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.
По умолчанию:
false
.--delete-expired
#Удаляет резервные копии, не удовлетворяющие политике хранения.
По умолчанию:
false
.--merge-expired
#
Объединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики хранения, с её родительскими копиями, срок хранения которых истёк.
По умолчанию:
false
.-
-y
--yes
# Подтвердить перезапуск вместо того, чтобы запрашивать подтверждение из стандартного ввода.
-
--lock-lifetime
# Позволяет задать максимальное время удержания блокировки утилитой probackup (в секундах).
По умолчанию: 1800.
-
-e
имя_каталога
--external-dirs
# Перечисляет каталоги вне
PGDATA
, которые необходимо включить в резервную копию.
checkdb
#
Синтаксис:
shardmanctl [общие_параметры
] probackup checkdb [--amcheck [--skip-block-validation] [--heapallindexed]] [--shardсегмент
] [-m|--maxtasksчисло_заданий
]
Проверяет кластер Postgres Pro Shardman на наличие физических повреждений или логических нарушений.
--amcheck
#Выполняет логическую проверку индексов при отсутствии повреждений в ходе проверки файлов данных. Для проверки индексов в базе данных должно быть установлено расширение amcheck или amcheck_next. Для баз данных без расширения amcheck проверка индексов пропускается. Расширение amcheck входит в состав установочного пакета Postgres Pro Shardman.
--heapallindexed
#Проверяет, что все кортежи из кучи, требующие индексирования, действительно проиндексированы. Этот параметр используется только совместно с параметром
--amcheck
. Поддержка данного параметра зависит от версии установленного amcheck/amcheck_next. Расширение amcheck из установочного пакета Postgres Pro 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-typemount|remote|S3
] [--s3-config-pathпуть
] [--delete-wal] [-y|--yes] [--retention-redundancy] [--retention-window] [--wal-depth] [--delete-expired] [--merge-expired]
Удаляет резервную копию кластера Postgres Pro Shardman с заданным идентификатором backup_id
или запускает процедуру удаления резервных копий или заархивированных файлов WAL, не удовлетворяющих текущей политике хранения.
Обратите внимание, что backup_id
нельзя использовать одновременно с merge-expired
или delete-expired
.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу (или ключ в корзине S3-совместимого хранилища), в котором должны храниться резервные копии кластера Postgres Pro 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
#path
Задаёт путь к файлу конфигурации S3.
По умолчанию:
<shardman-data-dir>/s3.config
.-
--delete-wal
# Удаляет файлы WAL, которые не являются необходимыми для восстановления кластера из имеющихся резервных копий.
По умолчанию:
false
.-
-y
--yes
# Подтверждает операцию.
По умолчанию:
false
.-
--retention-redundancy=
избыточность
#
Указывает, сколько полных резервных копий должно сохраняться в каталоге данных. Должно быть неотрицательным целым числом. Ноль отключает сохранение.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--retention-window=
окно
#
Количество дней, в течение которого возможно восстановление. Должно быть неотрицательным целым числом. При нулевом значении окно восстановления отсутствует.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--wal-depth=
#глубина_wal
Количество резервных копий на каждой линии времени, которое должно сохраняться для обеспечения возможности восстановления PITR. Должно быть неотрицательным целым числом. При нулевом значении этот параметр отключается.
По умолчанию: текущее значение в файле
pg_probackup.conf
, если не задано, то0
.--delete-expired
#Удаляет резервные копии, не удовлетворяющие политике хранения.
По умолчанию:
false
.--merge-expired
#
Объединяет самую старую инкрементальную копию, удовлетворяющую требованиям политики хранения, с её родительскими копиями, срок хранения которых истёк.
По умолчанию:
false
.
merge
#
Синтаксис:
shardmanctl [общие_параметры
] probackup merge -B|--backup-pathпуть
-i|--backup-idид_резервной_копии
[-j|--jobsчисло
] [-m|--maxtasksчисло_заданий
] [--no-validate] [--no-sync] [-y|--yes]
Объединяет резервные копии, относящиеся к одной цепочке инкрементальных копий. При полном копировании резервные копии объединяются с их первой инкрементальной копией. При инкрементальном резервном копировании резервные копии объединяются с их родительской полной копией и всеми инкрементальными копиями между ними. После выполнения команды полная копия содержит все объединённые данные, а инкрементальные копии удаляются как ненужные.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro 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-typemount|remote|S3
] [--wal-limitчисло_сегментов_wal
] [--log-directoryпуть
] [--data-validate] [-e |--external-dirsимя_каталога
] [-T |--tablespace-mappingпрошлый_каталог=новый_каталог
] [-e |--external-mappingпрошлый_каталог=новый_каталог
] [-skip-external-dirs] [--reinit-before-restore]
Восстанавливает кластер Postgres Pro Shardman из выбранной резервной копии.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.
-
-i
id
--backup-id
#id
Обязательный параметр. Указывает идентификатор резервной копии для восстановления.
-
--jobs
число
-j
#число
Число параллельных потоков, которые используются pg_probackup при восстановлении из резервной копии. По умолчанию: 1.
-
--recovery-target-time
#timestamp
Параметр 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
#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
#path
Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра
--storage-type
установлено значениеS3
и не задана переменная окруженияSDM_LOG_DIRECTORY
.По умолчанию:
<backup-directory>/backup/log
.-
--data-validate
# Если включен, перед восстановлением проверяет данные с помощью команды
probackup validate
.По умолчанию: отключено.
-
-e
имя_каталога
--external-dirs
# Перечисляет каталоги вне
PGDATA
, которые необходимо включить в резервную копию.-
-T
--tablespace-mappingпрошлый_каталог{rgid}=новый_каталог{rgid}
# Задаёт сопоставление для табличных пространств. При восстановлении содержимое
старого_каталога
перемещается вновый каталог
, если табличное пространство всё ещё существует и расположение идентично. Возможно использовать значения{rgid}
для ИД репликационной группы, как для команды CREATE TABLESPACE.-
-e
--external-mapping
старый_каталог=новый_каталог
# Задаёт сопоставление для внешних каталогов, указанных параметром
--external-dirs
. При восстановлении содержимоестарого_каталога
перемещается вновый каталог
, если каталог всё ещё существует.-
--skip-external-dirs
# Если задан, внешние каталоги не восстанавливаются.
-
--reinit-before-restore
# Повторно инициализировать кластер с такой же топологией перед восстановлением.
По умолчанию:
false
.
show
#
Синтаксис:
shardmanctl [общие_параметры
] probackup show -B|--backup-pathпуть
[-f|--formatтаблица
|json
] [--archive ] [-i|--backup-idид_резервной_копии
] [--instanceэкземпляр
] [--storage-typemount|remote|S3
] [--s3-config-pathпуть
]
Показывает список резервных копий кластера Postgres Pro Shardman.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.
-
-f
таблица
|json
--format
#таблица
|json
Указывает выходной формат.
По умолчанию:
table
.-
--archive
# Показывает информацию об архиве WAL.
-
-i
ид_резервной_копии
--backup-id
#ид_резервной_копии
Показывает информацию о конкретных резервных копиях.
-
--instance
#экземпляр
Показывает информацию о конкретных экземплярах.
-
--s3-config-path
#path
Задаёт путь к файлу конфигурации S3.
По умолчанию:
<shardman-data-dir>/s3.config
.-
--storage-type
#mount|remote|S3
Тип хранения резервных копий. При значении
remote
протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра--storage-type
значениеmount
илиS3
соответственно. Чтобы показать резервную копию с параметром--storage-type
со значениемS3
, укажите их при запуске командыshow
.По умолчанию:
remote
.
show-config
#
Синтаксис:
shardmanctl [общие_параметры
] probackup show-config -Bпуть
[-f|--formattext
|json
] [--no-scale-units] -s|--shardимя_сегмента
[--s3-config-pathпуть
] [--storage-typemount|remote|S3
]
Выводит все текущие параметры конфигурации pg_probackup, в том числе те, что содержатся в файле pg_probackup.conf
, размещённом в каталоге
, а также те, что были заданы в командной строке.каталог_копий
/backups/имя_сегмента
-
-B
строка
--backup-path=
#строка
Обязательный параметр. Задаёт абсолютный путь к каталогу резервных копий.
-
--format
#text
|json
Указывает выходной формат.
По умолчанию:
text
.-
--no-scale-units
# Выводить значения конфигурационных параметров времени и объёма памяти в единицах измерения по умолчанию.
По умолчанию:
false
.-
-s
строка
--shard=
#строка
Имя сегмента, для которого необходимо выполнить команду
show-config
.-
--s3-config-path
#path
Задаёт путь к каталогу, в котором создаётся файл конфигурации S3 на всех узлах Postgres Pro Shardman.
По умолчанию:
<shardman-data-dir>/s3.config
.-
--storage-type
#mount|remote|S3
Тип хранилища резервных копий. При значении
remote
протокол SSH используется для копирования файлов с данными в удалённый каталог резервных копий. Но это поведение можно изменить, если для хранения резервных копий используется каталог, смонтированный на всех узлах, или S3-совместимое объектное хранилище. Чтобы это сделать, установите для параметра--storage-type
значениеmount
илиS3
соответственно.По умолчанию:
remote
.
validate
#
Синтаксис:
shardmanctl [общие_параметры
] probackup validate -B|--backup-pathпуть
-i|--backup-idидентификатор
[-t|--timeoutсекунды
] [-m|--maxtasksчисло_заданий
] [--log-to-console] [--storage-typemount|remote|S3
] [--s3-config-pathпуть
] [--log-directoryпуть
] [--remote-portпорт
] [--remote-userимя_пользователя
]
Проверяет целостность выбранной резервной копии кластера Postgres Pro Shardman.
-
-B
path
--backup-path
#path
Обязательный параметр. Указывает путь к каталогу, в котором должны храниться резервные копии кластера Postgres Pro Shardman.
-
-i
id
--backup-id
#id
Обязательный параметр. Указывает резервный идентификатор для проверки.
-
--log-to-console
# Включает вывод журналов pg_probackup на консоль.
По умолчанию:
false
.-
-t
секунды
--timeout
#секунды
Выход с ошибкой после указанной в секундах задержки при ожидании готовности кластера.
-
-m
число_заданий
--maxtasks
#число_заданий
Задаёт максимальное количество одновременно выполняемых задач (команды
pg_probackup
).По умолчанию соответствует числу логических CPU в системе.
-
--s3-config-path
#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
#path
Задаёт путь к каталогу журналов для приложения pg_probackup. Обязательный параметр в случаях, если для параметра
--storage-type
установлено значениеS3
и не задана переменная окруженияSDM_LOG_DIRECTORY
.По умолчанию:
<backup-directory>/backup/log
.-
--remote-port
#порт
Указывает удалённый порт SSH для экземпляров группы репликации.
По умолчанию:
22
.-
--remote-user
#username
Указывает удалённого пользователя для подключения по SSH для экземпляров группы репликации.
По умолчанию:
postgres
.-
--ssh-key
#path
Указывает закрытый ключ SSH для удалённого выполнения команд по SSH.
По умолчанию:
$HOME/.ssh/id_rsa
.
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строка
] [-e |--external-dirsимя_каталога
]
Добавляет указанные параметры в файл pg_probackup.conf
или изменяет существующие.
-
--archive-timeout
int
# Устанавливает время ожидания для архивирования или потоковой репликации сегментов WAL, в секундах.
По умолчанию: pg_probackup ждёт 300 секунд.
-
-B
строка
--backup-path=
#строка
Задаёт абсолютный путь к каталогу резервных копий.
-
-m
int
--maxtasks=
#int
Задаёт максимальное количество одновременно выполняемых задач (команды
pg_probackup
).По умолчанию соответствует числу логических CPU в системе.
-
--remote-port
int
# Порт для подключения к SSH серверу, где создаётся резервная копия.
По умолчанию:
22
.-
--remote-user
строка
# Пользователь, который подключается к удалённому SSH серверу для создания резервной копии.
-
--retention-redundancy
int
# Определяет количество полных резервных копий, которое должно сохраняться в каталоге данных. Должно быть неотрицательным целым числом. При нулевом значении отключает сохранение.
По умолчанию:
0
.-
--retention-window
int
# Количество дней, в течение которых возможно восстановление. Должно быть неотрицательным целым числом. При нулевом значении окно восстановления отсутствует.
По умолчанию:
0
.-
--wal-depth
int
# Количество резервных копий на каждой линии времени, которое должно сохраняться для обеспечения возможности восстановления PITR. Должно быть неотрицательным целым числом. При нулевом значении этот параметр отключается.
-
--s3-config-path
строка
# Задаёт путь к файлу конфигурации S3.
По умолчанию:
/var/lib/pgpro/sdm-17/data/s3.config
.-
-s
строка
--shard=
#строка
Имя сегмента, для которого необходимо запустить команду
set-config
. Если сегмент не указан, команда запускается для всех сегментов.По умолчанию: текущее значение в файле
pg_probackup.conf
.-
--storage-type
строка
# Тип хранилища резервных копий, возможные значения:
remote
,mount
,S3
.По умолчанию:
remote
.-
-e
имя_каталога
--external-dirs
# Перечисляет каталоги вне
PGDATA
, которые необходимо включить в резервную копию.
Резервное копирование кластера Postgres Pro Shardman командой probackup
#
На резервном узле:
groupadd postgres useradd -m -N -g postgres -r -d /var/lib/postgresql -s /bin/bash
Далее добавьте SSH ключ для установления SSH соединения без пароля между резервным узлом и узлами кластера Postgres Pro 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
Восстановление кластера Postgres Pro Shardman командой probackup #
Расширение shardmanctl в режиме probackup может выполнять полное восстановление, восстановление только метаданных или восстановление только схемы кластера Postgres Pro Shardman из резервной копии, созданной командой probackup backup
.
Чтобы выполнить полное или частичное восстановление, сначала необходимо выбрать желаемую резервную копию для восстановления. Чтобы отобразить список доступных резервных копий, выполните следующую команду:
shardmanctl [общие_параметры
] probackup show --backup-path=путь
--format=формат
[--archive ] [-i|--backup-idид_резервной_копии
] [--instanceэкземпляр
]
После этого должен отобразиться список резервных копий с их идентификаторами в формате таблицы или JSON. Затем выберите нужный идентификатор резервной копии и запустите команду восстановления probackup.
shardmanctl [общие_параметры
] probackup restore --backup-path=путь
--backup-id=идентификатор
Укажите путь к репозиторию в параметре --backup-path
и идентификатор резервной копии во флаге --backup-id
.
Если возникли проблемы с экземпляром etcd, лучше выполнить восстановление только метаданных. Для этого можно запустить следующую команду:
shardmanctl [общие_параметры
] probackup restore --backup-path=путь
--backup-id=идентификатор
--metadata-only
Если нужно восстановить только информацию о схеме, например: таблицы, роли и т. д., следует указать параметр --schema-only
.
Для обоих видов восстановления можно указать --timeout
, чтобы утилита завершала работу ошибкой после указанной в секундах задержки при ожидании готовности кластера или завершения восстановления.
Можно указать параметр --shard
для восстановления только в одном сегменте.
Также можно указать параметр --recovery-target-time
для выполнения восстановления на момент времени. В этом случае Postgres Pro Shardman находит ближайшую точку синхронизации к указанной временной метке и предлагает выполнить восстановление по найденному значению LSN. Чтобы ограничить количество обрабатываемых сегментов WAL, можно указать параметр --wal-limit
.
Важно
Перед восстановлением кластера Postgres Pro Shardman необходимо убедиться, что кластер запущен, выполнив команду shardmanctl status
. Если в выводе присутствуют ошибки, восстановление кластера может сделать его недоступным. Сначала необходимо исправить ошибки, повторно инициализировав кластер, и восстановить метаданные etcd. Только после этого можно проводить восстановление кластера из резервной копии.
Восстановление кластера Postgres Pro Shardman #
Расширение shardmanctl может выполнять полное восстановление, восстановление только метаданных или восстановление только схемы кластера Postgres Pro 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
извлекает базовую резервную копию и восстанавливает её в каталог данных сегмента. RestoreCommand
извлекает файл WAL и сохраняет его в файл pg_wal
в каталоге сегмента. Эти команды могут использовать следующие замены:
процесс keeper
сегмента запускает обе команды на каждом узле в кластере, поэтому:
Резервную копию нужно сделать доступной для этих узлов (например, сохранив её в общей файловой системе или используя протокол удалённого копирования, такой как SFTP).
Команды для извлечения резервной копии выполняются от имени пользователя операционной системы, под которым работают сегменты (обычно
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"
Команды конфигурации #
config get
#
Синтаксис:
shardmanctl [общие_параметры
] config get [-c | --choose-revision] [-r | --revision ] [-f | --file]
Выгружает текущую полную конфигурацию кластера или конфигурацию указанной версии.
config revisions rm
#
Синтаксис:
shardmanctl [общие_параметры
] config revisions rm [-r | --revision ] [-y | --yes]
Удаляет указанную версию конфигурации из истории состояний.
config update
#
Синтаксис:
shardmanctl [общие_параметры
] config update [[-f|--fileфайл_конфигурации_сегмента|файл_конфигурации_shardman
]|текст_конфигурации
[-p|--patch][-w|--wait]]] [--force][-y | --yes]
Обновляет конфигурацию сегмента или полную конфигурацию Postgres Pro Shardman. Поддерживает следующие местозаполнители для параметров postgres
: {{cluster}}
, {{shard}}
, {{dataDir}}
, {{keeperDir}}
, {{keeperID}}
, {{host}}
. Примеры можно найти здесь.
-
-f
файл_конфигурации_сегмента|файл_конфигурации_shardman
--specfile=
#файл_конфигурации_сегмента|файл_конфигурации_shardman
Указывает файл конфигурации сегмента или полной конфигурации Postgres Pro Shardman. Тип файла конфигурации определяется автоматически. Значение
-
означает стандартный ввод. По умолчанию конфигурация передаётся втексте_конфигурации
.-
-w
--wait
# Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации. Если новая конфигурация не может быть загружена всеми группами репликации, время ожидания shardmanctl будет бесконечным.
-
-p
--patch
# Объединяет новой конфигурации с существующей. По умолчанию новая конфигурация заменяет существующую.
-
--force
# Выполнять принудительное изменение, если выполняется операция на уровне кластера.
-
-y
--yes
# Подтвердить перезапуск, необходимый для вступления в силу значений параметров. Если параметр не задан, а для изменения параметров требуется перезапуск, то будет запрошено подтверждение вручную. Если подтверждение не получено, кластер продолжит работу, но новые значения параметров вступят в силу только после перезапуска.
config rollback
#
Синтаксис:
shardmanctl [общие_параметры
] config rollback [-r | --revision] [-w|--waitдлительность
] [--force] [-y|--yes][--repair]
Выполняет откат конфигурации Postgres Pro Shardman к одному из предыдущих состояний. При откате к версии конфигурации, имеющей параметры max_connections
, max_prepared_transactions
или max_worker_processes
, реплики переинициализируются.
При откате конфигурации к одному из прошлых состояний ни один из параметров max_connections
, max_prepared_transactions
, max_locks_per_transaction
, max_wal_senders
, max_worker_processes
не откатывается, если текущее значение выше того, на которое необходимо откатить.
-
-r
--revision
# Идентификатор версии, до которой нужно откатить состояние конфигурации. Это временная метка операции, которая привела к изменению конфигурации Postgres Pro Shardman.
Если не указан, выводится список версий, из которого пользователь может выбрать нужную.
-
-w
--wait
# Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации. Если новая конфигурация не может быть загружена всеми группами репликации, время ожидания shardmanctl будет бесконечным.
По умолчанию:
1h
.-
-f
--force
# Выполнить принудительную настройку параметра, если выполняется операция на уровне кластера.
-
-y
--yes
# Выполнять автоматическое подтверждение.
-
--repair
# Включает режим восстановления кластера, который вышел из строя из-за недопустимых значений параметров.
По умолчанию: отключён.
config revisions
#
Синтаксис:
shardmanctl [общие_параметры
] config revisions [-f|--formattext
|json
]
Выводит историю версий конфигурации кластера Postgres Pro Shardman. Для каждой версии содержит следующую информацию:
revision_id
— временная метка операции, вызвавшей изменение конфигурации Postgres Pro Shardmanhost
— имя узла, на котором запустили операциюuser
— пользователь, запустивший операциюcommand
— сама операция
-
-f=
text
|json
--format=
#text
|json
Указывает выходной формат.
По умолчанию:
text
.
config revisions set
#
Синтаксис:
shardmanctl [общие_параметры
] config revisions set [--keep-config-revisions]
Позволяет задать длину истории версий конфигурации. Не может быть меньше 5; это значение устанавливается автоматически, если указать длину меньше. Для кластеров Postgres Pro Shardman, у которых ещё не была сформирована история версий конфигурации, автоматически выставляется значение 20.
-
--keep-config-revisions
# Лимит на количество версий одной конфигурации Postgres Pro Shardman. Если лимит меньше текущей длины истории, наиболее старые версии за пределами этого лимита будут удалены. Если количество операций, приводящих к изменению конфигурации, превышает лимит, наиболее старая версия удаляется.
По умолчанию:
20
.
config update ip
#
Синтаксис:
shardmanctl [общие_параметры
] config update ip [-u|ip_1=ip_2,hostname_1=hostname_2][-y|--yes][--repair]
Обновляет указанные IP-адреса узлов кластера.
config update credentials
#
Синтаксис:
shardmanctl [общие_параметры
] config update credentials [-u | --user] [-p | --password] [-k | --ssl-key] [-c | --ssl-cert] [-w|--wait длительность] [--force] [-y | --yes]
Изменяет пароль или сертификат/ключ пользователя для подключения к кластеру Postgres Pro Shardman. Изменяет только тип аутентификации, указанный пользователем (scram-sha-256
, ssl
), а не сам тип.
-
-u
--user
# Пользователь, для которого требуется изменить параметры аутентификации.
-
-p
--password
# Новый пароль.
-
-k
--ssl-key
# Новый SSL-ключ.
-
-c
--ssl-cert
# Новый SSL-сертификат.
-
-w
--wait
# Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации. Если новая конфигурация не может быть загружена всеми группами репликации, время ожидания shardmanctl будет бесконечным.
-
--force
# Выполнять принудительное изменение, если выполняется операция на уровне кластера.
-
-y
--yes
# Подтверждает операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.
Команды кластера #
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] [-m|--message]
Останавливает все экземпляры сервера PostgreSQL.
cluster topology
#
Синтаксис:
shardmanctl [общие_параметры
] cluster topology -f|--formattable|json|text
Выводит топологию кластера.
-
-f
table|json|text
--format=
#table|json|text
Формат вывода. За подробностями обратитесь к Подразделу «Отображение топологии кластера».
init
#
Синтаксис:
shardmanctl [общие_параметры
] init [-y|--yes] [-f|--spec-fileимя_файла_конфигурации
]|текст_конфигурации
Регистрирует новый кластер Postgres Pro Shardman в хранилище etcd или повторно инициализирует уже существующий кластер, задавая новую конфигурацию кластера и удаляя все его данные и узлы.
-
-f
имя_файла_конфигурации
--specfile=
#имя_файла_конфигурации
Задаёт файл со строкой конфигурации кластера. Значение
-
означает стандартный ввод. По умолчанию строка передаётся втексте_конфигурации
. Использование данной команды подробно описано в разделе «Регистрация кластера Postgres Pro Shardman».-
-y
--yes
# Подтверждает операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.
intcheck
#
Синтаксис:
shardmanctl [общие_параметры
] intcheck [-s|--system] [-u|--user] [-c|--catalog] [-o|--output] [-n|--nodeузел
]
Запускает pg_integrity_check на всех узлах кластера Postgres Pro 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целевая_таблица
]
Загрузка данных в кластер Postgres Pro Shardman.
-
-b
предел_числа_строк
--batch-size=
#предел_числа_строк
Показывает список резервных копий кластера Postgres Pro 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
filename
--file=
#filename
Имя файла входных данных (или
-
для стандартного ввода)-
-F
текст|csv
--format=
#текст|csv
Формат входных данных. Возможные значения:
text
иcsv
.По умолчанию:
text
.-
-j
число
--jobs=
#число
Число параллельных процессов для загрузки данных.
По умолчанию равно числу групп репликации.
-
-q
символ
--quote=
#символ
Указывает символ кавычек, используемый для заключения данных в кавычки. По умолчанию это символ двойных кавычек. Задаваемый символ должен быть однобайтовым. Этот параметр поддерживается только для формата
CSV
.-
--reject-file=
#filename
Все порции данных с ошибками при загрузке будут записаны в этот файл. Если значение не задано, то такие порции будут пропущены.
-
--schema=
#filename
Схема, определяющая правила передачи данных из PostgreSQL в Postgres Pro Shardman. Если установлен данный параметр, то все остальные параметры не используются.
-
--source=
#файл|postgres
Тип источника данных —
file
илиpostgres
.По умолчанию:
file
.-
--source-connstr=
#строка
Строка подключения к базе источника данных
-
--source-fields=
#список_полей
Список полей исходной таблицы, разделённых запятыми. Если значение не задано, то используются все поля таблицы в порядке их объявления.
-
--source-table=
#таблица
Исходная таблица, представление или функция (
funcname(
).param1
,...,paramN
)-
-t
таблица
--table=
#таблица
Целевая таблица.
restart
#
Синтаксис:
shardmanctl [общие_параметры
] restart [-y|--yes] [--no-wait] [-m|--message]
Перезапускает кластер Postgres Pro Shardman.
set
#
Синтаксис:
shardmanctl [общие_параметры
] set param1=value1 [param2=value2 […]] [-y|--yes] [-w|--waitдлительность
] [-f|--force] [--repair]
Задаёт значения указанных параметров кластера базы Postgres Pro Shardman. Поддерживает следующие местозаполнители для параметров postgres
: {{cluster}}
, {{shard}}
, {{dataDir}}
, {{keeperDir}}
, {{keeperID}}
, {{host}}
. Примеры можно найти здесь.
-
-w
--wait
# Указывает, что shardmanctl должен дождаться вступления в силу изменений конфигурации. Примеры значений:
2h45m
,1m30s
,5m
,10s
.По умолчанию:
1h
.-
-y
--yes
# Подтвердить перезапуск, необходимый для вступления в силу значений параметров. Если параметр не задан, а для изменения параметров требуется перезапуск, то будет запрошено подтверждение вручную. Если подтверждение не получено, кластер продолжит работу, но новые значения параметров вступят в силу только после перезапуска.
-
-f
--force
# Выполнить принудительную настройку параметра, если выполняется операция на уровне кластера.
-
--repair
# Включает режим восстановления кластера, который вышел из строя из-за недопустимых значений параметров.
По умолчанию: отключён.
unset
#
Синтаксис:
shardmanctl [общие_параметры
]unsetpgParam1 [pgParam2 [...]]
[-y|--yes] [-w|--waitдлительность
] [-f|--force] [--repair]
Сбрасывает заданные параметры PostgreSQL до значений по умолчанию.
-
-w
--wait
# Задаёт максимальное время shardmanctl, при котором ожидается вступление в силу изменений конфигурации.
По умолчанию:
1h
.-
-y
--yes
# Подтвердить перезапуск, необходимый для вступления в силу значений параметров. Если параметр не задан, а для изменения параметров требуется перезапуск, то будет запрошено подтверждение вручную. Если подтверждение не получено, кластер продолжит работу, но новые значения параметров вступят в силу только после перезапуска.
-
-f
--force
# Выполнить принудительную настройку параметра, если выполняется операция на уровне кластера.
-
--repair
# Включает режим восстановления кластера, который вышел из строя из-за недопустимых значений параметров.
По умолчанию: отключён.
Регистрация кластера Postgres Pro Shardman #
Чтобы зарегистрировать кластер Postgres Pro Shardman в хранилище etcd, выполните следующую команду:
shardmanctl [общие_параметры
] init [-y|--yes] [-f|--spec-fileимя_файла_конфигурации
]|текст_конфигурации
В этой команде необходимо передать строку с конфигурацией кластера. Это можно сделать следующим образом:
В командной строке — не указывать параметр
-f
и передать строку втекст_конфигурации
.В стандартном вводе — указать параметр
-f
и передать-
вимя_файла_конфигурации
.В файле — указать параметр
-f
и передать имя файла вимя_файла_конфигурации
.
Отображение топологии кластера #
Команда cluster topology
отображает текущую топологию кластера, по умолчанию в виде таблицы. Все узлы кластера будут сгруппированы по группам репликации, к которым они принадлежат. Для каждого узла будет отображаться его статус.
shardmanctl [общие_параметры
] cluster topology -f|--formattable|json|text
Команды узлов #
nodes add
#
Синтаксис:
shardmanctl [общие_параметры
] nodes add -n|--nodesимена_узлов
[--no-rebalance]
Добавляет узлы в кластер Postgres Pro Shardman. По завершении команды создаётся дамп.
-
-n
имена_узлов
--nodes=
#имена_узлов
Обязательный параметр.
Задаёт список добавляемых узлов, разделённых запятыми.
-
--no-rebalance
# Пропуск шага перебалансировки секций сегментированных таблиц. За подробностями обратитесь к Подразделу «Добавление узлов в кластер Postgres Pro Shardman».
nodes rm
#
Синтаксис:
shardmanctl [общие_параметры
] nodes rm -n|--nodesимена_узлов
Удаляет узлы из кластера Postgres Pro Shardman. По завершении команды создаётся дамп.
-
-n
имена_узлов
--nodes=
#имена_узлов
Задаёт список удаляемых узлов, разделённых запятыми. Использование данной команды подробно описано в Подразделе «Добавление узлов в кластер Postgres Pro Shardman».
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
Не ждать перезапуска узлов.
nodes stop
#
Синтаксис:
shardmanctl [общие_параметры
] nodes stop -n|--nodesимена_узлов
[--no-wait]
Останавливает узлы.
-
-n
имена_узлов
--nodes=
имена_узлов
Имена узлов.
-
--no-wait
Не ждать остановки узлов.
Добавление узлов в кластер Postgres Pro Shardman #
Чтобы добавить узлы в кластер Postgres Pro Shardman, выполните следующую команду:
shardmanctl [общие_параметры
] nodes add -n|--nodesимена_узлов
Необходимо указать -n
(--nodes
) для передачи списка добавляемых узлов, разделённых запятыми. Ко всем узлам можно обращаться по их именам хостов или IP-адресам. Имена должны быть правильно разрешены на всех узлах.
Если во время выполнения команды nodes add
произошёл сбой, используйте команду cleanup --after-node-operation
, чтобы исправить возможные проблемы с конфигурацией кластера.
Удаление узлов из кластера Postgres Pro Shardman #
Чтобы удалить узлы из кластера Postgres Pro Shardman, выполните следующую команду:
shardmanctl [общие_параметры
] nodes rm -n|--nodesимена_узлов
Укажите параметр -n
(--nodes
) для передачи списка удаляемых узлов, перечисленных через запятую. Команда восстанавливает все секции сегментированных таблиц.
Примечание
Не используйте команду cleanup
для устранения возможных проблем с конфигурацией кластера после сбоя команды nodes rm
. Вместо этого ещё раз выполните nodes rm
.
Чтобы удалить все узлы в кластере без сохранения данных, повторно инициализируйте кластер. Если удалённая группа репликации содержит локальные (несегментированные и неглобальные) таблицы, данные теряются после удаления группы репликации.
Команды сегментов #
shard add
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardимя_сегмента
add -n|--nodesимена_узлов
[--no-wait]
Добавляет реплику в сегмент. По завершении команды создаётся дамп.
shard master set
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardимя_сегмента
master set -n| nodeимена_узлов
Задаёт приоритет для определённого главного сервера для заданного сегмента.
shard master reset
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s |--shardимя_сегмента
master reset
Сбрасывает параметры приоритетного главного сервера для сегмента.
shard add
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardshard_name
reset [--yes | -y][--new-primary | -p]
Сбрасывает узлы группы репликации, если они зависли.
shard rm
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardимя_сегмента
rm -n|--nodesимя_узла
[-f|--force]
Удаляет реплику из сегмента. По завершении команды создаётся дамп.
shard switch
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardимя_сегмента
switch [--new-primaryимена_узлов
]
Переключает ведущий узел.
shard start
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s |--shardимя_сегмента
start [--no-wait] [-n|--nodeимя_узла
]
Запускает сегмент.
shard stop
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s |--shardимя_сегмента
stop [-n|--nodeимя_узла
]
Останавливает сегмент.
shard replicas reinit
#
Синтаксис:
shardmanctl [общие_параметры
] shard -s|--shardимя_сегмента
replicas reinit [-n|--nodeимена_узлов
] [-y|--yes] [--no-wait]
Сбрасывает реплики определённого сегмента.
-
-s
имя_сегмента
--shard=
#имя_сегмента
Имя сегмента.
-
-n
имена_узлов
--node=
#имена_узлов
Указывает узел, на котором необходимо сбросить реплики. Если не задан, проверяет реплики сегмента на всех узлах.
-
-y
--yes
# Подтверждает операцию вместо того, чтобы запрашивать подтверждение от стандартного ввода.
-
--no-wait
# Не ждать готовности реплик.
За подробностями обратитесь к Подразделу «Переинициализация реплик»
Переинициализация реплик #
Если реплики находятся в неправильном состоянии, их можно сбросить с помощью команды shardmanctl:
shardmanctl [общие_параметры
] shard --shard=имя_сегмента
replicas reinit
Эта команда определяет узлы, на которых запущены реплики указанного сегмента, и отправляет запрос shardmand на этих узлах. После получения этого запроса shardmand очищает каталог данных postgres и перезапускает процесс keeper
, отвечающий за управление репликой. После этого реплики перезапускаются и начинают получать данные от соответствующего ведущего сервера.
Команды статуса #
status
#
Синтаксис:
shardmanctl [common_options
] status [-f|--formattable
|json
] [--filterstore
|metadata
|shardmand
|rg
|master
|dictionary
|biha
|keeper
|restart_required_params
] [-s|--sortnode
|rg
|status
] [--excludestore
|metadata
|shardmand
|rg
|master
|dictionary
|biha
|keeper
|restart_required_params
]
Выводит информацию о состоянии подсистем кластера Postgres Pro Shardman. Если проблем не обнаружено, подробности и таблицы статуса не отображаются.
-
-f
таблица
|json
--format=
#таблица
|json
Указывает формат отчёта.
По умолчанию:
table
.За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».
-
--filter
#store
|metadata
|shardmand
|группа_репликации
|master
|словарь
|biha
|keeper
|restart_required_params
Указывает подсистемы, информация о состоянии которых должна быть включена в вывод.
По умолчанию:
all
.За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».
-
-s
node
|группа_репликации
|status
--sort
#node
|группа_репликации
|status
Сортирует сообщения внутри одной группы (таблицы) указанным способом.
По умолчанию:
node
.За подробностями обратитесь к Подразделу «Получение статуса подсистем кластера».
-
--exclude
#store
|metadata
|shardmand
|группа_репликации
|master
|словарь
|biha
|keeper
|restart_required_params
Указывает подсистемы, которые необходимо исключить из вывода
status
.
status transactions
#
Синтаксис:
shardmanctl [общие_параметры
] status transactions [-r|--repgroupимя_группы_репликации
Показывает распределённые транзакции, которые не удалось разобрать встроенными инструментами мониторинга Postgres Pro Shardman.
-
-r
имя_группы_репликации
--repgroup=
#имя_группы_репликации
Указывает группу репликации, для которой необходимо выводить транзакции.
По умолчанию: все группы репликации.
За подробностями обратитесь к Подразделу «Вывод списка неразобранных распределённых транзакций».
Получение статуса подсистем кластера #
Чтобы получить отчёт о состоянии кластера Postgres Pro Shardman в формате таблицы для подсистем metadata
и store
, отсортированных по группам репликации, выполните следующую команду:
shardmanctl [общие_параметры
] status --filter=metadata,store --sort=rg
Чтобы получить отчёт в формате JSON, используйте параметр -f|--format=json
(не включён выше, так как формат table
используется по умолчанию). О каждой обнаруженной проблеме сообщается со статусом «Unknown», «Warning», «Error» или «Fatal error». Инструмент также может сообщить об операционной ошибке, что означает, что во время проверки работоспособности кластера возникла проблема. Когда команда обнаруживает критическую или операционную ошибку, дальнейшая диагностика прекращается. Например, несогласованность метаданных хранилища не позволяет выполнять правильные операции с кластером и должна быть устранена в первую очередь.
Вывод списка неразобранных распределённых транзакций #
Чтобы просмотреть список распределённых транзакций, которые не удалось разобрать встроенными средствами мониторинга Postgres Pro Shardman, выполните следующую команду:
shardmanctl [общие_параметры
] status transactions -r|--repgroupимя_группы_репликации
Информация о каждой транзакции состоит из tx_id
(идентификатор транзакции), coordinator_id
, creation_time
и description
(ошибка или статус транзакции). Чтобы отобразить список транзакций для определённой группы репликации, используйте параметр -r|--repgroup
(по умолчанию для всех групп репликации). Если таких транзакций нет, команда возвращает значение null
в формате JSON.
Команды хранилища #
store dump
#
Синтаксис:
shardmanctl [общие_параметры
] store dump [-f|--fileимя_файла
]
Выгружает текущие конфигурации кластеров из хранилища.
-
-f
filename
--file=
#filename
Задаёт выходной файл (
-
для стандартного вывода).По умолчанию:
-
.За подробностями обратитесь к Подразделу «Выгрузка всех ключей из хранилища для отладки конфигурации ошибок».
store restore
#
Синтаксис:
shardmanctl [общие_параметры
] store restore [-f|--fileимя_файла
][-y|--yes]
Позволяет безопасно восстановить кластер etcd
из дампа, созданного с помощью команды shardmanctl store dump
.
store lock
#
Синтаксис:
shardmanctl [общие_параметры
] store lock [-f|--formattext
|json
]
Показывает информацию о текущей блокировке метаданных кластера.
-
-f=
text
|json
--format=
#text
|json
Указывает выходной формат.
По умолчанию:
text
.За подробностями обратитесь к Подразделу «Вывод информации о текущей блокировке метаданных кластера».
store get
#
Синтаксис:
shardmanctl [общие_параметры
] store get [[-a|--aliasимя_псевдонима
]|[-k|--keyимя_ключа
] [-f|--fileимя_файла
]]
Получает указанный ключ из хранилища.
-
-a
имя_псевдонима
--alias=
#ladle
|cluster
|spec
|shardspec
Указывает использование псевдонима вместо полного имени ключа. Нельзя использовать с параметром
--key
.За подробностями обратитесь к Подразделу «Получение текущей конфигурации сегмента».
-
-k
имя_ключа
--key=
#имя_ключа
Указывает ключ для извлечения из хранилища. Нельзя использовать с параметром
--alias
.За подробностями обратитесь к Подразделу «Получение текущей конфигурации сегмента».
-
-f
filename
--file=
#filename
Задаёт файл для вывода значения.
По умолчанию:
-
(стандартный вывод).За подробностями обратитесь к Подразделу «Получение текущей конфигурации сегмента».
store keys
#
Синтаксис:
shardmanctl [общие_параметры
] store keys
Получает из хранилища все ключи с текущим префиксом кластера.
За подробностями обратитесь к Подразделу «Получение имён ключей кластера и ковша для текущего кластера».
store set
#
Синтаксис:
shardmanctl [общие_параметры
] store set [[-a|--aliasимя_псевдонима
]|[-k|--keyимя_ключа
]] [-f|--fileимя_файла
]
Создаёт или перезаписывает ключ в хранилище.
-
-a
ladle
|cluster
|spec
|shardspec
--alias=
#ladle
|cluster
|spec
|shardspec
Указывает использование псевдонима вместо полного имени ключа. Нельзя использовать с параметром
--key
.-
-k
имя_ключа
--key=
#имя_ключа
Указывает имя ключа для размещения в хранилище. Нельзя использовать с параметром
--alias
.-
-f
filename
--file=
#filename
Задаёт файл с входными данными (
-
для стандартного ввода).За подробностями обратитесь к Подразделу «Установка новой конфигурации для кластера».
Выгрузка всех ключей из хранилища для отладки конфигурации ошибок #
Столкнувшись с ошибкой при использовании кластера Postgres Pro Shardman, для получения исчерпывающего отчёта полезно выгрузить все конфигурации, которые могут привести к такой ошибке, используя следующую команду:
shardmanctl [общие_параметры
] store dump -f|--fileимя_файла
Могут отображаться некоторые некритичные ошибки, но они не будут прерывать выгрузку. Если имя файла не указано, данные выводятся в stdout и могут замусорить терминал.
Получение текущей конфигурации сегмента #
Чтобы получить текущую конфигурацию сегмента, которая обычно является частью ключа кластера в хранилище, используйте следующую команду:
shardmanctl [общие_параметры
] store get -a|--alias shardnspec -f|--fileимя_файла
Если сам ключ кластера повреждён, конфигурация сегмента также не будет отображаться. Вместо использования псевдонима можно также узнать полное имя ключа данных кластера (получив список всех ключей с помощью store keys
) и использовать store get
, чтобы получить имя ключа и найти в нём часть сегмента. Учтите, что при использовании последнего варианта параметр shardman.config_uuid
не будет удалён, что может привести к конфликту при последующем использовании этих данных. Для манипуляций с конфигурацией stolon рекомендуется использовать команду shardmanctl store get -a shardspec
.
Получение имён ключей кластера и ковша для текущего кластера #
Чтобы получить сразу все имена ключей в хранилище, выполните следующую команду:
shardmanctl [общие_параметры
] store keys
Список ключей может отображаться только в формате JSON. Также будут выведены псевдонимы для тех ключей, у которых они есть (за исключением shardspec
и spec
, так как они являются частями других ключей)
Вывод информации о текущей блокировке метаданных кластера #
Можно просмотреть информацию о текущих блокировках метаданных кластера, полученных любой командой:
shardmanctl [общие_параметры
] store lock -f|--formatjson
Чтобы получить отчёт в формате JSON, используйте параметр -f|--format=json
(не указан выше, поскольку формат text
используется по умолчанию). Если блокировка не существует, возвращает Lock not found
.
Установка новой конфигурации для кластера #
Чтобы установить новую часть конфигурации кластера, выполните следующую команду:
shardmanctl [общие_параметры
] store set --alias=spec --file=spec.json
Поскольку spec
является частью ключа данных кластера, его нельзя задать в параметре --key
. Если выбранный файл не формата JSON, новая часть конфигурации не будет установлена.
Команды таблиц #
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число
]
Перемещает указанную секцию сегментированной таблицы в новый сегмент.
Команды тестов производительности #
bench init
#
Синтаксис:
shardmanctl [общие_параметры
] bench init [--schema-typesingle|simple|shardman|custom
] [--schema-fileимя_файла
] [-s|--scaleзначение_масштабирования
] [-n|--no-vacuum] [-F|--fillfactorзначение_коэффициента_заполнения
]
Инициализирует схему тестирования через pgbench. Схема может быть пользовательской или предопределённой. Создаёт таблицы схемы tpc-b
и заполняет их.
-
--schema-type=
#single|simple|shardman|custom
Тип схемы, используемый при её инициализации. Возможные значения:
single
— схема для одиночного теста производительности PostgreSQLsimple
— простая сегментированная схемаshardman
— сегментированная схема, оптимизированная для Postgres Pro Shardmancustom
— схема, инициализированная пользователем из файла--schema-file
По умолчанию:
shardman
.-
--schema-file=
#file_name
Файл с 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-typesingle|simple|shardman|custom
] [-f|--fileимя_файла
] [-c|--clientчисло_клиентов
] [-C|--connect] [--full-output] [-j|--jobsчисло_процессов
][-T|--timeсекунды
][-t|--transactionsчисло_транзакций
] [-s|--scaleкоэффициент_масштаба
] ] [ -P | --progressсекунды
] [ -R | --rateскорость_передачи
] [ -M | --protocolрежим_запросов
]
Запускает инициализированный тест производительности через pgbench. Можно использовать скрипт pgbench по умолчанию или пользовательский скрипт из файла.
-
--schema-type=
#single|simple|shardman|custom
Тип схемы, используемый при её инициализации (
bench init
). Возможные значения:single
— схема для одиночного теста производительности PostgreSQLsimple
— простая сегментированная схемаshardman
— сегментированная схема, оптимизированная для Postgres Pro Shardmancustom
— схема, инициализированная пользователем из файла--schema-file
.
По умолчанию:
shardman
.-
-f
file_name
--file=
#file_name
Добавить в список выполняемых скриптов скрипт транзакции из файла
имя_файла
.Дополнительно можно задать целочисленный вес после
@
, меняющий вероятность выбора этого скрипта относительно других. По умолчанию вес считается равным1
. (Если вам нужно передать имя скрипта, содержащее символ@
, добавьте к такому имени вес, чтобы исключить неоднозначность прочтения, напримерfilen@me@1
).-
-c
число_клиентов
--client=
#число_клиентов
Число имитируемых клиентов, то есть число одновременных сеансов базы данных.
-
-C
--connect
# Устанавливать новое подключение для каждой транзакции вместо одного для каждого клиента.
-
--full-output
# Вывести полный вывод pgbench.
-
-j
число_процессов
--jobs=
#число_процессов
Количество рабочих потоков в pgbench.
-
-s
коэффициент_масштаба
--scale=
#коэффициент_масштаба
Умножить количество сгенерированных строк на заданный коэффициент масштабирования.
-
-T
секунды
--time=
#секунды
Выполнять тест с ограничением по времени в указанное количество секунд. Значение по умолчанию — 0, что означает отсутствие ограничения по времени. Обратите внимание, что флаги
-T
и-t
являются взаимоисключающими, и флаг-T
имеет приоритет. Если задан флаг-T
, флаг-t
игнорируется.-
-t
число_транзакций
--transactions=
#число_транзакций
Выполнять тест с ограничением в указанное количество транзакций на каждом клиенте. Значение по умолчанию — 10. Обратите внимание, что флаги
-T
и-t
являются взаимоисключающими, и флаг-T
имеет приоритет. Если задан флаг-T
, флаг-t
игнорируется.-
-P
секунды
--progress=
#секунды
Выводить отчёт о прогрессе через заданное число секунд (
сек
). Выдаваемый отчёт включает время, прошедшее с момента запуска, скорость (в TPS) с момента предыдущего отчёта, а также среднее время ожидания транзакций, стандартное отклонение и количество неуспешных транзакций с момента последнего отчёта. В режиме ограничения скорости (-R
) время ожидания вычисляется относительно назначенного времени запуска транзакции, а не фактического времени её начала, так что оно включает и среднее время отставания от графика. Когда параметр--max-tries
включает повторение транзакций после ошибок сериализации/взаимоблокировок, в отчёт добавляется количество повторявшихся транзакций и общее число повторов.-
-R
скорость_передачи
--rate=
#скорость_передачи
Выполнять транзакции, ориентируясь на заданную скорость, а не максимально быстро (по умолчанию). Скорость задаётся в транзакциях в секунду. Если заданная скорость превышает максимально возможную, это ограничение скорости не повлияет на результаты.
-
-M
режим_запросов
--protocol=
#режим_запросов
Протокол, выбираемый для передачи запросов на сервер:
simple
: использовать простой протокол запросов.extended
: использовать расширенный протокол запросов.prepared
: использовать расширенный протокол запросов с подготовленными операторами.
В режиме
prepared
pgbench повторно использует результат разбора запроса, начиная со второй итерации, и поэтому работает быстрее, чем в других режимах.По умолчанию:
simple
.
bench cleanup
#
Синтаксис:
shardmanctl [общие_параметры
] bench cleanup
Очищает базу данных схемы после тестов производительности. Удаляет таблицы tpc-b
.
bench generate
#
Синтаксис:
shardmanctl [общие_параметры
] bench generate [-c|--configимя_файла
] [-o|--output-fileимя_файла
]
Получает конфигурацию теста производительности из файла и генерирует bash-скрипт для создания схемы, оптимизированной для Postgres Pro Shardman, и запуска теста производительности с использованием pgbench. Файл конфигурации должен быть в формате yaml
.
-
-f
file_name
--file=
#file_name
Путь к файлу конфигурации. Этот файл содержит последовательность конфигураций скрипта. Каждый скрипт должен иметь тип схемы (
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
file_name
--output-file=
#file_name
Файл вывода. По умолчанию: stdout.
Команды очистки #
cleanup
#
Синтаксис:
shardmanctl [общие_параметры
] cleanup [-p|--processrepgroups] --after-node-operation|--after-rebalance
Выполняет очистку после команды nodes add
или rebalance
.
-
-p
имена_узлов
--processrepgroups=
#имена_узлов
Выполняет фактическую очистку. По умолчанию утилита показывает только действия, которые необходимо выполнить во время фактической очистки. За дополнительными сведениями обратитесь к разделу Подразделу «Выполнение очистки».
-
--after-node-operation
# Выполняет очистку после сбоя команды
nodes add
.-
--after-rebalance
# Выполняет очистку после сбоя команды
rebalance
.
Выполнение очистки #
По умолчанию cleanup
работает только в режиме отчёта, т. е. следующая команда покажет только действия, которые необходимо выполнить во время фактической очистки:
shardmanctl [общие_параметры
] cleanup --after-node-operation|--after-rebalance
Чтобы выполнить фактическую очистку, запустите следующую команду:
shardmanctl [общие_параметры
] cleanup -p|--processrepgroups --after-node-operation|--after-rebalance
Команды схем #
schema verify
#
Синтаксис:
shardmanctl [общие_параметры
] schema verify [--filterpartitions
|extension
|tables
|roles
|schemas
|sequences
]
Проверяет, что в схеме содержатся правильные данные о секциях, а также что они расположены на тех же ведущих узлах, что и соответствующие секции совмещённой таблицы. Также проверяет, что у всех сегментов одинаковые глобальные и сегментированные таблицы, глобальные роли, глобальные последовательности, схемы и расширения, и что имена сегментов отличаются от их локальных версий.
-
--filter
#partitions
|расширение
|таблицы
|roles
|schemas
|sequences
Указывает, какие проверки запустить. Если не задан, запускаются все проверки.
По умолчанию: не задан.
schema list
#
Синтаксис:
shardmanctl [общие_параметры
] schema list [-f|--formattext
|json
]
Показывает список сохранённых дампов схемы shardman
.
-
-f=
text
|json
--format=
#text
|json
Указывает выходной формат.
По умолчанию:
text
.
schema show
#
Синтаксис:
shardmanctl [общие_параметры
] shard show --shardимя_сегмента
--dump-idид_дампа
Выводит дамп с указанным идентификатором для заданного сегмента.
schema restore
#
Синтаксис:
shardmanctl [общие_параметры
] schema restore --dump-idид_дампа
[--shardsсписок_сегментов_через_запятую
] [--smart]
Восстанавливает схему shardman
из дампа с указанным идентификатором.
-
--dump-id=
#ид_дампа
Идентификатор дампа.
-
--shards=
#список_сегментов_через_запятую
Задаёт список сегментов для восстановления. Если значение не задано, восстанавливаются все сегменты кластера. Дамп должен содержать все сегменты, которые необходимо восстановить.
-
--smart
# Восстанавливает схему
shardman
из системных таблиц PostgreSQL, если была нарушена целостность схемы. Можно использовать при включённом параметре конфигурацииshardmanSchemaDumpMonitorDisabled
или при отсутствии рабочего дампа схемы. Однако в некоторых случаях (например, при потере данных на всех сегментах) полное рабочее восстановление гарантировать невозможно, поэтому рекомендуется использовать частично восстановленную схему в качестве источника данных и продолжить восстановление на другой работающий кластер Postgres Pro Shardman. Таблицы, подлежащие восстановлению, при этом должны быть пустыми, что делает частичное восстановление таблиц невозможным.
schema dump
#
Синтаксис:
shardmanctl [общие_параметры
] schema dump [--no-verify]
Создаёт дамп схемы shardman
в etcd с ключом shardman/
. Может быть сохранено не более 10 дампов. В случае превышения этого количества удаляется самый старый дамп. Если новый дамп совпадает с одним из существующих, остаётся только более новый из них.имя_кластера
/shardman_schema_dumps/ид_дампаd
-
--no-verify
# Пропустить проверку согласованности дампов.
По умолчанию: отключено (проверка не пропускается).
Команды демона конфигурации #
daemon set
#
Синтаксис:
shardmanctl [общие_параметры
] daemon set [--session-log-leveldebug | info | warn | error
] [--session-log-formatjson|text
] [--session-log-nodes]
Позволяет обновить параметры протоколирования «на лету».
-
--session-log-level
#debug | info | warn | error
Указывает уровень детализации сообщений:
debug
,info
,warn
илиerror
.-
--session-log-format
#json|text
Указывает выходной формат журнала:
text
илиjson
.-
--session-log-nodes
# Указывает узел, которые необходимо обновить. Если не задан, параметры обновляются на всех узлах.
По умолчанию: все узлы.
daemon check
#
Синтаксис:
shardmanctl [общие_параметры
] daemon check -n|--nodesимя_узла:порт
Проверяет shardmand на узлах.
-
-n
имя_узла:порт
--nodes=
#имя_узла:порт
Список узлов, на которых будет проведена проверка shardmand. За подробностями обратитесь к Подразделу «Проверка работы службы shardmand на узлах».
Проверка работы службы shardmand на узлах #
Команда daemon check
не только проверяет, запущена ли служба shardmand на указанных узлах, но и гарантирует, что эти службы настроены для того же кластера, что и shardmanctl:
shardmanctl [общие_параметры
] daemon check -n|--nodesимена_узлов
Другие команды #
getconnstr
#
Синтаксис:
shardmanctl [общие_параметры
] getconnstr --all
Получает строку подключения libpq для подключения к кластеру в роли администратора.
-
--all
# Добавляет информацию о репликах в результат команды
getconnstr
.
forall
#
Синтаксис:
shardmanctl [общие_параметры
] forall --sqlзапрос
[ --sqlзапрос
[ --sqlзапрос
...]] [--twophase] [-d --dbname]
Выполнение оператора SQL для всех групп репликации в кластере Postgres Pro Shardman.
rebalance
Синтаксис:
shardmanctl [общие_параметры
] rebalance [-f|--force]
Выполняет перебалансировку сегментированных таблиц. По завершении команды создаётся дамп.
-
-f
--force
# Выполнить принудительную перебалансировку сегментированных таблиц, секции которых были перемещены вручную.
upgrade
#
Синтаксис:
shardmanctl [общие_параметры
] upgrade
Обновляет расширение shardman базы данных и изменяет параметры pg_foreign_server
.
script
#
Синтаксис:
shardmanctl [общие_параметры
] script -s|--shardимя_сегмента
][[-f|--fileимя_файла
][--sqlзапрос
]]
Выполняет нетранзакционные команды из файла или командной строки на указанных сегментах.
psql
#
Синтаксис:
shardmanctl [общие_параметры
] psql -s |--shardимя_сегмента
Без заданных параметров подключается к первому доступному ведущему узлу.
-
-s
имя_сегмента
--shard=
#имя_сегмента
Имя сегмента. Если оно указано, подключение происходит к текущему ведущему узлу сегмента.
history
#
Синтаксис:
shardmanctl [общие_параметры
] ] history [--reverse | -r] [-f|--formatjson|text
] [-l|--limitчисло_команд
]
Выводит историю команд, которые привели к изменению кластера. По умолчанию отсортированы от самых недавних к самым старым.
-
-r
--reverse
# Переключает на сортировку по возрастанию.
-
-f
json|text
--format=
#json|text
Указывает выходной формат.
По умолчанию:
text
.-
-l
--limit=
#число_команд
Лимит числа выводимых последних команд. Максимальное число — 200.
По умолчанию: 20.
-
--log-format
#json|text
Указывает выходной формат:
text
илиjson
.
Общие параметры #
Общие параметры shardmanctl — это необязательные параметры, не являющиеся специфичными для данной утилиты. Они определяют параметры подключения etcd, имя кластера и некоторые другие параметры. По умолчанию shardmanctl пытается подключиться к хранилищу etcd 127.0.0.1:2379
и использовать имя кластера cluster0
. Уровень журнала по умолчанию — info
.
-
-h, --help
# Показывает краткую справочную информацию.
-
--cluster-name
#cluster_name
Указывает имя кластера, где будет работать. По умолчанию указывается имя кластера
cluster0
.-
--log-level
#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.
-
--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
.
Примеры #
Инициализация кластера
Для инициализации кластера Postgres Pro 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
Получение строки подключения к кластеру
Чтобы получить строку подключения для кластера Postgres Pro 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 │ │ │ └────────────┴──────────────────────────────────────────────┴───────────────────────┴───────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────────────────────┐ │ == RESTART REQUIRED PARAMS STATUS == │ ├──────────┬──────────────────────────────────────┬───────────────────┬───────────────────┤ │ STATUS │ MESSAGE │ REPLICATION GROUP │ NODE │ ├──────────┼──────────────────────────────────────┼───────────────────┼───────────────────┤ │ OK │ No pending restart parameters │ shard-1 │ shrn1 │ ├──────────┼──────────────────────────────────────┼───────────────────┼───────────────────┤ │ OK │ No pending restart parameters │ shard-2 │ shrn4 │ └──────────┴──────────────────────────────────────┴───────────────────┴───────────────────┘
Изменение конфигурации сегмента
Сначала получите список доступных ключей в хранилище, используя следующую команду:
$
shardmanctl store keys
$ shardmanctl store keys { "Key": "shardman/cluster0/biha/cluster/shard-1/clusterdata" }{ "Key": "shardman/cluster0/biha/cluster/shard-1/keepers/info/keeper_1" }{ "Key": "shardman/cluster0/biha/cluster/shard-2/clusterdata" }{ "Key": "shardman/cluster0/biha/cluster/shard-2/keepers/info/keeper_1" }{ "Key": "shardman/cluster0/data/cluster", "Alias": "cluster" }{ "Key": "shardman/cluster0/data/cluster/revisions" }{ "Key": "shardman/cluster0/data/cluster/revisions/2024-10-31T09:29:26" }{ "Key": "shardman/cluster0/data/ladle", "Alias": "ladle" }{ "Key": "shardman/cluster0/data/repgroups", "Alias": "repgroups" }
Получите конфигурацию сегмента из хранилища и сохраните её в файле shardspec.json
, используя команду
$
shardmanctl store get -a shardspec -f shardspec.json
Примените необходимые изменения и загрузите новую конфигурацию командой shardmanctl config update
. Учтите, что параметр shardman.config_uuid
удаляется в команде shardmanctl store get -a shardspec
, а не в shardmanctl store get -k full/path/to/clusterspec
; использование конфигурации с существующим shardman.config_uuid
приведёт к конфликту.
Важно
Не используйте команду store set
для обновления конфигураций кластера, поскольку она не применяет новую конфигурацию ко всем узлам, а только записывает её в хранилище. Для текущего примера с конфигурацией сегмента допустимо выполнение shardmanctl config update
или shardmanctl set
.
Для перепроверки можно получить ключ кластера с новой 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
Узлы n1
,n2
, n3
and n4
устанавливаются как ведущие для репликационных групп. После этого можно вывести топологию кластера:
$ shardmanctl cluster topology ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-1, RGID - 1 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n1 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-2, RGID - 2 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n2 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-3, RGID - 3 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n3 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-4, RGID - 4 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n4 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
Для добавления новой реплики выполните команду:
shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 shard -s shard-1 add -n n2
Это создаст кластер со следующей топологией:
$ shardmanctl cluster topology ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-1, RGID - 1 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n1 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n2 │ 5433 │ keeper_2 │ FOLLOWER │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-2, RGID - 2 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n2 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-3, RGID - 3 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n3 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘ ┌───────────────────────────────────────────────────────────────────────────────────────────────────┐ │ == REPLICATION GROUP shard-4, RGID - 4 == │ ├───────────┬─────────────────────┬─────────────────────┬─────────────────────┬─────────────────────┤ │ HOST │ PORT │ KEEPER │ STATUS │ PRIORITY │ ├───────────┼─────────────────────┼─────────────────────┼─────────────────────┼─────────────────────┤ │ n4 │ 5432 │ keeper_1 │ LEADER_RW │ NOT SET │ └───────────┴─────────────────────┴─────────────────────┴─────────────────────┴─────────────────────┘
Удаление узлов из кластера
Чтобы удалить узлы 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
в кластере, создайте файл конфигурации (например, ~/shardspec.json
) со следующим содержимым:
{ "pgParameters": { "max_connections": "200" } }
Затем выполните:
$
shardmanctl --store-endpoints http://n1:2379,http://n2:2379,http://n3:2379 config update -p -f ~/shardspec.json
Поскольку для изменения max_connections
требуется перезапуск, эта команда перезапускает экземпляры СУБД.
Выполнение резервного копирования и восстановления
Чтобы создать резервную копию кластера cluster0
, используя etcd на etcdserver
, прослушивающем порт 2379
, и сохранить его в локальном каталоге /var/backup/shardman
, выполните:
$
shardmanctl --store-endpoints http://etcdserver:2379 backup --datadir=/var/backup/shardman --use-ssh
Предположим, что вы выполняете восстановление из резервной копии в кластер 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
Postgres Pro 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
Загрузка данных из текстового файла
Чтобы загрузить данные в кластер Postgres Pro 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
Чтобы загрузить данные в кластер Postgres Pro 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 в кластер Postgres Pro 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
(имя таблицы, с которой выполняется совместное размещение). Postgres Pro 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"