Локальное хранилище MinIO

Пакет tengri-minio устанавливает на тот же сервер локальное объектное хранилище MinIO, совместимое с S3, и настраивает его для Tengri. На этой странице описано, откуда берутся учетные данные хранилища, как их посмотреть и сменить, что происходит при обновлении и удалении пакета и как разбирать типичные проблемы.

Обзор

Пакет устанавливает сервер minio, клиент minio-client и сервис minio.service, который слушает S3-API на порту 9002 и веб-консоль на порту 9001. При установке создаются бакеты prostore (данные Tengri) и mimir (метрики), политика prostore и служебная учетная запись public_loader с доступом только к путям Stage/ и iceberg/public/ бакета prostore.

Tengri обращается к хранилищу от имени встроенного пользователя MinIO minioadmin. Пароль этого пользователя генерируется при установке пакета: случайная строка из 30–40 латинских букв и цифр. Ни в одном файле пакета и ни в одном выводе установки пароль не появляется.

Где хранятся учетные данные

Файл Назначение

/etc/tengri/secrets.env

Источник учетных данных для сервисов Tengri: TNGRI_S3_ACCESS_KEY_ID и TNGRI_S3_SECRET_ACCESS_KEY. Файл принадлежит root, группа tengri, права 0640; его заполняют пакеты, править вручную не нужно.

/etc/default/tengri-minio

Параметры запуска MinIO: MINIO_VOLUMES, MINIO_OPTS и, если администратор задал их сам, MINIO_ROOT_USER и MINIO_ROOT_PASSWORD. Пакет этот файл никогда не изменяет.

/etc/tengri/tengri.conf

Настройки Tengri, которые перекрывают secrets.env. Для MinIO этот файл не является источником учетных данных: значения TNGRI_S3_* в нем относятся только к сервисам Tengri.

Сервис minio.service запускается через обертку, которая собирает учетные данные из двух файлов: значение из /etc/default/tengri-minio имеет приоритет, недостающее берется из secrets.env. Логин и пароль ищутся независимо друг от друга; если логин не задан нигде, используется minioadmin. Расхождения между файлами обертка отмечает в журнале, не показывая самих значений.

Посмотреть текущие учетные данные:

sudo grep '^TNGRI_S3_' /etc/tengri/secrets.env

TNGRI_S3_ACCESS_KEY_ID и TNGRI_S3_SECRET_ACCESS_KEY в /etc/tengri/tengri.conf — штатный способ задать сервисам Tengri другие учетные данные: например, отдельную учетную запись MinIO вместо minioadmin или внешнее S3. MinIO этот файл не читает, поэтому обертка сервиса и команда tengri-minio-sync-credentials лишь сообщают о расхождении с secrets.env, не изменяя tengri.conf. Такое предупреждение означает только то, что Tengri и MinIO используют разные учетные данные; если так и задумано, его можно не учитывать.

Смена пароля

  1. Задайте новые значения в /etc/default/tengri-minio (минимальная длина пароля MinIO — 8 символов):

    MINIO_ROOT_USER=minioadmin
    MINIO_ROOT_PASSWORD=<новый пароль>
  2. Скопируйте их в secrets.env для сервисов Tengri:

    sudo tengri-minio-sync-credentials

    Команда только копирует значения из /etc/default/tengri-minio в /etc/tengri/secrets.env, ничего не генерирует и не перезапускает. Если в tengri.conf есть отличающиеся значения, она предупредит об этом.

  3. Перезапустите сервисы:

    sudo systemctl restart minio tengri

Пароль в /etc/default/tengri-minio после этого можно оставить, а можно удалить: secrets.env уже содержит копию, и обертка возьмет пароль оттуда. Учетная запись public_loader при смене пароля не меняется.

tengri-mimir хранит собственные учетные данные S3 в /etc/mimir/config.yaml (access_key_id, secret_access_key) и после генерации или смены пароля их нужно привести в соответствие со значениями из secrets.env и перезапустить mimir.

Обновление с предыдущих версий

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

  • Пароль ранее не задавался — генерируется новый, записывается в secrets.env, сервисы MinIO и Tengri перезапускаются. Ничего делать не нужно.

  • Пароль задан в /etc/default/tengri-minio — он копируется в secrets.env, генерация не выполняется. В выводе появляется сообщение NOTICE: THE MINIO ROOT CREDENTIALS …​ WERE COPIED.

  • Пароль неизвестен: сервер работает с паролем, которого нет ни в одном из файлов — пакет устанавливается, но minio.service не запустится. В выводе появляется сообщение WARNING: THE MINIO ROOT PASSWORD IS NOT KNOWN TO THE PACKAGES.

В последнем случае есть два пути:

  • Если пароль известен администратору — задать его в /etc/default/tengri-minio и выполнить смену пароля.

  • Если данные хранилища не нужны — остановить сервис, очистить каталог данных и переустановить пакет; при переустановке будет сгенерирован новый пароль:

    sudo systemctl stop minio
    sudo rm -rf /var/lib/minio/*
    sudo apt install --reinstall tengri-minio

Диагностика

Причины, по которым minio.service не запускается, обертка записывает в журнал сервиса:

sudo journalctl -u minio -n 50

Ошибка конфигурации завершает сервис с кодом 78, и systemd не перезапускает его автоматически: после исправления файлов сервис нужно запустить вручную командой sudo systemctl restart minio.

Сообщение в журнале Что делать

no root password: MINIO_ROOT_PASSWORD is not set in /etc/default/tengri-minio and TNGRI_S3_SECRET_ACCESS_KEY is not set in /etc/tengri/secrets.env

Пароль не задан ни в одном файле. Задайте его в /etc/default/tengri-minio и выполните tengri-minio-sync-credentials, либо переустановите пакет, чтобы сгенерировать новый.

…​ is set to an empty value in …​

В указанном файле переменная есть, но значение пустое. Задайте значение или удалите строку.

MINIO_VOLUMES is not set in /etc/default/tengri-minio

Верните в файл строку MINIO_VOLUMES="/var/lib/minio".

warning: …​ differs …​

Значения в файлах расходятся; сервис запускается. Если расходятся /etc/default/tengri-minio и secrets.env, выполните tengri-minio-sync-credentials. Если отличается tengri.conf, убедитесь, что переопределение для Tengri задано намеренно.

Проверить, что сервисы Tengri получили те же учетные данные, что и MinIO, можно клиентом от имени пользователя из secrets.env:

sudo sh -c '. /etc/tengri/secrets.env; \
  MC_HOST_local="http://${TNGRI_S3_ACCESS_KEY_ID:-minioadmin}:${TNGRI_S3_SECRET_ACCESS_KEY}@127.0.0.1:9002" \
  minio-client ls local'

Ожидаемый вывод — список бакетов mimir и prostore.

Удаление пакета

Удаление tengri-minio удаляет каталог данных /var/lib/minio вместе с содержимым бакетов prostore и mimir и убирает TNGRI_S3_ACCESS_KEY_ID и TNGRI_S3_SECRET_ACCESS_KEY из /etc/tengri/secrets.env. Резервной копии не создается.

Пакет tengri-minio является зависимостью tengri-mimir, а тот — зависимостью tengri, поэтому команда apt remove tengri-minio удалит и их. Переход на внешнее S3 выполняйте, задав TNGRI_S3_ENDPOINT_URL и учетные данные в /etc/tengri/tengri.conf, не удаляя пакет.