MinIO
MinIO — открытое объектное хранилище с S3-совместимым API, которое разворачивают на своих серверах вместо облачного Amazon S3.
Что такое MinIO
MinIO — объектное хранилище, которое разворачивают на собственных серверах. Говорит на S3 API, поэтому для приложения выглядит как Amazon S3: тот же протокол, те же SDK, те же CLI-инструменты. Меняется одна строка — endpoint.
Смысл в этом и состоит. Код, написанный под S3, работает с MinIO без правок, а данные при этом остаются на вашем железе — в своей стойке, своём ЦОД или на VPS. Типичные поводы: требования к размещению данных, экономия на egress-трафике, локальный S3 для тестов и CI.
Что такое объектное хранение вообще и чем оно отличается от файлового — в статье object storage.
Запуск
docker run -d --name minio \
-p 9000:9000 -p 9001:9001 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=StrongPass123" \
-v /mnt/data:/data \
quay.io/minio/minio server /data --console-address ":9001"
Порт 9000 — S3 API, 9001 — веб-консоль. Дальше всё как в S3:
import boto3
s3 = boto3.client("s3",
endpoint_url="http://localhost:9000", # единственное отличие от AWS
aws_access_key_id="admin",
aws_secret_access_key="StrongPass123",
)
s3.create_bucket(Bucket="datasets")
s3.upload_file("train.parquet", "datasets", "train.parquet")
s3.download_file("datasets", "train.parquet", "./train.parquet")
Клиент mc
mc alias set local http://localhost:9000 admin StrongPass123
mc mb local/backups # создать бакет
mc cp ./dump.sql.gz local/backups/ # загрузить
mc mirror ./models local/models # синхронизировать каталог
mc ls --recursive local/backups
mc du local/backups # сколько занято
mc ilm rule add local/backups --expire-days 30 # автоудаление через 30 дней
mc mirror и правила жизненного цикла делают MinIO удобной целью для бэкапов: дампы льются в бакет, старые versions удаляются по расписанию самим хранилищем.
Erasure coding
В многодисковом режиме MinIO разбивает объект на data- и parity-блоки и раскладывает их по дискам. Конфигурация вида EC:4 при 8 дисках означает 4 блока чётности — хранилище переживает отказ до 4 дисков без потери данных.
Отличие от RAID: защита работает на уровне самого MinIO и распространяется на диски разных узлов, а восстановление идёт по объектам, а не по всему тому. Поэтому под MinIO диски отдают напрямую (JBOD), не собирая их в RAID предварительно.
# Распределённый кластер: 4 узла по 4 диска
minio server http://node{1...4}/mnt/disk{1...4}
Важное ограничение архитектуры: набор дисков в распределённой конфигурации фиксирован. Расширяют такой кластер не добавлением диска, а добавлением нового server pool целиком.
Ограничения и подводные камни
- Не файловая система. Объект перезаписывается целиком, дописать в середину нельзя. Под диск ВМ или NFS-шару это не замена — там нужны СХД или NAS.
- Не кладите поверх сетевых ФС. MinIO рассчитан на локальные диски; поверх NFS или SMB он работает плохо и непредсказуемо.
- Один узел — одна точка отказа. Отказоустойчивость появляется только в распределённом режиме.
- Лицензия — AGPLv3. Для внутреннего использования вопросов нет; при встраивании в продукт, отдаваемый наружу, условия AGPL нужно читать внимательно. Есть коммерческая лицензия.
- Веб-консоль наружу не публикуют. Как и любую панель управления хранилищем.
Где применяют
- S3 в закрытом контуре — когда данные не должны покидать инфраструктуру.
- Хранилище артефактов — сборки CI/CD, чекпоинты моделей, датасеты.
- Цель для бэкапов с автоудалением по сроку.
- Локальный S3 для разработки и тестов — поднимается одним контейнером в Docker Compose вместо аренды бакета в облаке.
Связанные термины
- object storage — модель хранения, которую реализует MinIO
- СХД — блочное и файловое хранение против объектного
- Облачное хранилище — облачная альтернатива self-hosted MinIO
- Docker — стандартный способ запуска MinIO
- Резервное копирование — частый сценарий применения
- RAID — с чем сравнивают erasure coding
Готовы запустить GPU-задачу?
Запустить GPU-сервер