Этот документ описывает эксплуатацию IOBackup на Linux в проде-подобном режиме:
.deb,
.rpm), а не сборка из исходников;iobackup-agent как сервис
systemd;iobackupctl (бинарник в
PATH).Сценарии с Docker Compose под «dev-стенды» (Vault,
LDAP, ClickHouse и т.д.) предполагают, что у вас есть каталог
examples/ из репозитория (или копия нужных
docker-compose-файлов) — пакет с бинарями не
обязан поставлять эти YAML.
.deb / .rpmagent.yaml, agent.enviobackupctl: типовые флаги| Компонент | Назначение | После установки пакета |
|---|---|---|
iobackup-agent |
HTTP API оркестратора, выполнение backup | /usr/sbin/iobackup-agent
(DEB/RPM) |
iobackupctl |
CLI-клиент к API | /usr/bin/iobackupctl |
По умолчанию агент слушает адрес из
IOBACKUP_LISTEN (часто
127.0.0.1:8735). Базовый URL для клиента и
curl:
http://127.0.0.1:8735
Если смените IOBACKUP_LISTEN (например
0.0.0.0:8735 за reverse-proxy), все команды ниже
подставляйте свой базовый URL.
Обязательно после установки пакета:
.deb / .rpm);Не нужен Go ни на сервере с агентом, ни на машине
оператора для обычного iobackupctl, если установлен готовый
пакет клиента или тот же пакет (в нём оба бинаря).
Внешние утилиты (по задачам в YAML):
| Условие | Что должно быть на хосте агента |
|---|---|
В job для postgres / mysql указан
dump.runner.mode: docker или
эквивалент |
установлен docker (и образы из вашего
YAML) |
dump.runner.mode: local для
PostgreSQL |
pg_dump в PATH |
dump.runner.mode: local для MySQL |
mysqldump в PATH |
destination.type: s3 и
upload.runner.mode: local |
aws CLI в PATH |
upload.runner.mode: docker для S3 |
docker + образ с AWS CLI |
Проверка (выполняйте только для тех режимов, которые используете):
command -v docker
command -v pg_dump
command -v mysqldump
command -v aws.deb)Из собранного артефакта (версию подставьте свою):
sudo apt-get update # при необходимости
sudo dpkg -i iobackup_<версия>_<архитектура>.deb
sudo apt-get -f install -y # подтянуть зависимости, если пожаловался dpkgПроверка:
iobackup-agent -version
iobackupctl -version
which iobackup-agent iobackupctl.rpm)sudo dnf install -y ./iobackup-<версия>.<архитектура>.rpm
# или на старых системах: sudo yum localinstall ...Файловая траектория пакета: агент в
/usr/sbin, CLI в
/usr/bin (см.
docs/packaging/package-layout.md).
Рекомендуемая схема (можно изменить через переменные в env-файле):
| Назначение | Путь по умолчанию |
|---|---|
| Runtime config | /etc/iobackup/agent.yaml (создаёт оператор из
.example) |
| Example template | /etc/iobackup/agent.yaml.example |
| Env (секреты/overrides) | /etc/iobackup/agent.env |
| Unit systemd (пакет) | /usr/lib/systemd/system/iobackup-agent.service |
| База bbolt агента | /var/lib/iobackup/agent.db |
| Основной лог агента | /var/log/iobackup/agent.log |
| Каталог run/task логов | /var/log/iobackup/runs/ |
Пакет создаёт пользователя iobackup и
каталоги state/log. jobs.dir / auto-load с диска не
включены в v1.0 — задания через API/iobackupctl
(см. docs/reference/agent-config.md).
Первый запуск без agent.yaml:
curl -sS http://127.0.0.1:8735/api/v1/health | jq .config
# ожидается config.missing: true до cp agent.yaml.example → agent.yamlagent.yaml и agent.envПолная справка:
docs/reference/agent-config.md.
Активируйте runtime config (пакет ставит только example):
sudo cp /etc/iobackup/agent.yaml.example /etc/iobackup/agent.yaml
sudo ${EDITOR:-vi} /etc/iobackup/agent.yaml
iobackup-agent config validate --config /etc/iobackup/agent.yamlСекреты и overrides —
/etc/iobackup/agent.env (подхватывается
unit как EnvironmentFile=-/etc/iobackup/agent.env):
sudo install -d -m 0750 -o root -g iobackup /etc/iobackup
printf 'IOBACKUP_API_TOKEN=%s\n' "$(openssl rand -hex 24)" | sudo tee /etc/iobackup/agent.env >/dev/null
sudo chmod 600 /etc/iobackup/agent.env
sudo chown root:iobackup /etc/iobackup/agent.envОтредактируйте YAML/env (listen, auth, пути, feature gates).
Пароли БД и ключи S3 — через env, как в job (*_env), не в
открытом YAML.
Смысл блоков:
IOBACKUP_LISTEN, IOBACKUP_AGENT_ID,
IOBACKUP_AGENT_NAME, IOBACKUP_AGENT_MODE,
IOBACKUP_AGENT_LABELS, IOBACKUP_IDENTITY_DIR,
IOBACKUP_HOSTNAME.IOBACKUP_DB_PATH,
IOBACKUP_LOG_PATH, IOBACKUP_RUNS_LOG_DIR.IOBACKUP_LOG_LEVEL,
IOBACKUP_LOG_OUTPUT (stderr удобен вместе с
journalctl, если направляете вывод в journal — см. политику
вашего unit), IOBACKUP_TASK_LOG_DUP_DB.IOBACKUP_RUN_LOGS_RETENTION_DAYS,
IOBACKUP_DB_RETENTION_DAYS,
IOBACKUP_RETENTION_CLEANUP_INTERVAL (читает процесс агента
из окружения при старте).IOBACKUP_TLS_* если
HTTPS/mTLS не используются; иначе пути к файлам.*_env (видит процесс агента),
*_path (файл на узле агента) или *_vault (KV
v2 ref; клиент Vault — настройки
iobackup-agent:
IOBACKUP_VAULT_ADDR, токен, CA,
-job-secrets-file / IOBACKUP_JOB_SECRETS_FILE
для overlay перед validate). Plaintext ключей в «основном» YAML
discouraged — см. job-format-v1.md.Права на env-файл:
sudo chmod 600 /etc/iobackup/agent.env
sudo chown root:iobackup /etc/iobackup/agent.envDEB/RPM устанавливают unit в
/usr/lib/systemd/system/iobackup-agent.service:
ExecStart=/usr/sbin/iobackup-agent --config /etc/iobackup/agent.yaml
EnvironmentFile=-/etc/iobackup/agent.env
User=iobackupСм. docs/packaging/systemd-unit.md. Ручная установка из
examples/iobackup-agent.service — только для dev без
пакета.
sudo systemctl daemon-reloadsudo systemctl enable --now iobackup-agent.service
sudo systemctl status iobackup-agent.service --no-pagerЕсли IOBACKUP_LOG_OUTPUT=file (как в шаблоне env),
смотрите файл:
sudo tail -n 200 /var/log/iobackup/agent.logИнтеграция с journal (если перенастроите вывод на stderr/both и не дублируете в файл — по вашей политике):
sudo journalctl -u iobackup-agent.service -fsudo systemctl restart iobackup-agent.serviceПодставьте свой базовый URL (ниже — дефолт
127.0.0.1:8735):
export IOBACKUP_API_BASE="http://127.0.0.1:8735"
curl -sS "${IOBACKUP_API_BASE}/api/v1/health"Список jobs (с Bearer, как в типовом prod-включённом
-auth-enabled):
curl -sS -H "Authorization: Bearer $IOBACKUP_API_TOKEN" \
"${IOBACKUP_API_BASE}/api/v1/jobs"iobackupctlУстановлен в PATH вместе с агентом.
Типовой вызов:
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN <команда>Полезно зафиксировать в shell-профиле оператора:
export IOBACKUP_API_BASE="http://127.0.0.1:8735"Справка:
iobackupctl --help
iobackupctl job --helpКоды выхода и глобальные флаги (--server,
--token-env, --output,
--timeout):
docs/reference/cli-standards.md.
Варианты:
/etc/iobackup/jobs/ или в git):
iobackupctl job submit /path/to/job.yaml —
автозагрузка каталога jobs.dir в v1.0 не
включена.site/): удобно для чтения;
для submit всё равно нужен локальный путь к файлу на
машине, где запускается iobackupctl../examples/... как в разделах ниже.Далее в примерах используется переменная:
# пример: разместили копии в /etc/iobackup/jobs
export JOBDIR="/etc/iobackup/jobs"Если используете клон репозитория, замените на
export JOBDIR="/path/to/iobackup/examples".
Файлы: filesystem.local.yaml
· YAML.
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/filesystem.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job run filesystem-localПроверка:
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN run list
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact listФайл: postgres.local.yaml
· YAML.
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/postgres.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job run postgres-localПроверка task (подставьте run_id из вывода
run list):
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN run list
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN task list <run_id>Переменная POSTGRES_BACKUP_PASSWORD
должна быть доступна процессу агента (через
iobackup-agent.env).
Файл: mysql.local.yaml
· YAML.
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/mysql.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job run mysql-localАналогично Postgres:
MYSQL_BACKUP_PASSWORD в окружении
агента.
Каталог примеров на сайте.
Файлы:
filesystem.s3.streaming.yaml
· YAMLfilesystem.s3.env.streaming.yaml
· YAML
(endpoint/region через env)В iobackup-agent.env должны быть заданы
S3_ACCESS_KEY,
S3_SECRET_KEY,
S3_ENDPOINT,
S3_REGION (или только те, что реально
читает ваш YAML).
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/filesystem.s3.streaming.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job run filesystem-s3-streamingПроверка:
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN task list <run_id>
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact listПроверка объектов в bucket (с хоста с aws):
aws s3 ls s3://iobackup/iobackup-tests/filesystem/max-docker/ \
--recursive \
--endpoint-url https://s3.twcstorage.ru \
--region ru-1Нужны файлы из examples/dev/vault/
репозитория. Поднять стенд:
docker compose -f ./examples/dev/vault/docker-compose.yml up -d
chmod +x ./examples/dev/vault/seed-dev.sh
VAULT_ADDR=http://127.0.0.1:18200 VAULT_TOKEN=root ./examples/dev/vault/seed-dev.shПеременная VAULT_TOKEN должна быть
видна процессу агента (добавьте в
/etc/iobackup/iobackup-agent.env или временно экспортируйте
и перезапустите только если так принято политикой — лучше env-файл).
Файл: vault.local.yaml.
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/vault.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN job run vault-local
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact listОстановка стенда:
docker compose -f ./examples/dev/vault/docker-compose.yml down -vСтруктура та же: Docker Compose из
examples/dev/..., затем
job submit/run нужного
examples/*.local.yaml.
OpenLDAP:
docker compose -f ./examples/dev/openldap/docker-compose.yml up -d
# OPENLDAP_ADMIN_PASSWORD в env агента
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/openldap.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN job run openldap-local
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact list
docker compose -f ./examples/dev/openldap/docker-compose.yml down -vClickHouse:
docker compose -f ./examples/dev/clickhouse/docker-compose.yml up -d
chmod +x ./examples/dev/clickhouse/seed-dev.sh
./examples/dev/clickhouse/seed-dev.sh
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/clickhouse.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN job run clickhouse-local
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact list
docker compose -f ./examples/dev/clickhouse/docker-compose.yml down -vDocker Compose как source:
chmod +x ./examples/dev/compose-app/seed-dev.sh
./examples/dev/compose-app/seed-dev.sh
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN \
job submit "${JOBDIR}/docker-compose.local.yaml"
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN job run docker-compose-local
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact list
docker compose -f ./examples/dev/compose-app/docker-compose.yml \
--project-directory ./examples/dev/compose-app down -viobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact list
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN artifact manifest <backup_id>Переменная run_id /
task_id из CLI или API:
curl -sS -H "Authorization: Bearer ${IOBACKUP_API_TOKEN}" \
"${IOBACKUP_API_BASE}/api/v1/runs/<run_id>/tasks/<task_id>/logs"iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN notification list
iobackupctl --server "${IOBACKUP_API_BASE}" --token-env IOBACKUP_API_TOKEN notification get <notification_event_id>Сбой доставки webhook не должен менять финальный результат backup задачи по дизайну продукта (см. webhooks).
examples/tests)Скрипт и набор YAML ожидают рабочее дерево
репозитория (examples/tests, dev-контейнеры,
переменные окружения). Это режим QA/разработки, не обязательный на
каждой prod-ноде.
cd /path/to/iobackup
export IOBACKUP_API_TOKEN=...
export POSTGRES_BACKUP_PASSWORD=...
export MYSQL_BACKUP_PASSWORD=...
export OPENLDAP_ADMIN_PASSWORD=...
export VAULT_TOKEN=...
export S3_ACCESS_KEY=...
export S3_SECRET_KEY=...
export S3_ENDPOINT=https://s3.twcstorage.ru
export S3_REGION=ru-1
bash ./examples/tests/run-full-matrix.shАртефакты матрицы по умолчанию могут падать под
/tmp/iobackups (как задумано в тестах).
Сервис не стартует
sudo systemctl status iobackup-agent.service --no-pager -l
sudo journalctl -u iobackup-agent.service -b --no-pager -n 200Частые причины:
/etc/iobackup/iobackup-agent.env;/var/lib/iobackup или
/var/log/iobackup;IOBACKUP_LISTEN.401 / доступ к API
IOBACKUP_API_TOKEN в env агента и то же
значение у клиента (--token или
--token-env);IOBACKUP_LISTEN (за NAT/proxy см. свой маршрут).«Утилита не найдена» (pg_dump,
mysqldump, aws)
runner.mode: docker (см. job-format-v1).S3 ошибки подписи / endpoint
S3_ENDPOINT, S3_REGION, ключи и
поддержку path-style для вашего провайдера (см. s3-destination).LDAP / Vault / ClickHouse из dev-разделов
iobackup-agent.Рекомендуемый порядок для prod:
.deb/.rpm (поверх
старого) в окно обслуживания.sudo systemctl daemon-reload (если поставили
обновлённый unit или drop-in).sudo systemctl restart iobackup-agent.service.health, при необходимости
GET /api/v1/capabilities /
GET /api/v1/agent/facts, затем один контролируемый
job run./metrics (см. operations; cardinality policy — prometheus).Карта модели и ссылок на документацию:
docs/architecture/model-foundation.md.
Откат: установите предыдущую версию пакета тем же менеджером пакетов и перезапустите сервис.
Подробнее о метриках, ретеншене журналов и операционном регламенте — operations.
sudo systemctl stop iobackup-agent.service
sudo systemctl disable iobackup-agent.service # если нужно отключить автозапускДанные в /var/lib/iobackup и
/var/log/iobackup при этом не
удаляются.