MinIO: свой S3-совместимый объектный сторадж
MinIO: свой S3-совместимый объектный сторадж
Amazon S3 стал фактическим стандартом объектного хранилища: тысячи библиотек, инструментов и сервисов умеют работать с его API. Но платить Amazon не всегда разумно — особенно если данные должны оставаться на вашем железе, или если объёмы настолько велики, что стоимость S3 становится неприемлемой. MinIO — высокопроизводительный объектный сторадж с полной совместимостью S3 API, который разворачивается за несколько минут.
Что умеет MinIO
- Полная совместимость с AWS S3 API — любой код написанный для S3 заработает без изменений
- Erasure coding — собственная схема защиты данных, аналог RAID 6
- Шифрование на стороне сервера (SSE-S3, SSE-KMS, SSE-C)
- Репликация между несколькими кластерами или облаками
- Версионирование объектов и Object Lock (WORM)
- Производительность: до 325 ГБ/с на запись на кластере из NVMe-дисков
Быстрый старт: одна нода
# Docker
docker run -d
-p 9000:9000
-p 9001:9001
-v /data/minio:/data
-e MINIO_ROOT_USER=minioadmin
-e MINIO_ROOT_PASSWORD=supersecret
--name minio
quay.io/minio/minio server /data --console-address ":9001"
Веб-консоль доступна на порту 9001, API — на 9000. Одна нода подходит для разработки и небольших объёмов; для продакшна нужен distributed mode.
Distributed mode: отказоустойчивый кластер
MinIO требует минимум 4 ноды (или 4 диска на одной ноде) для включения erasure coding:
# На каждой ноде
minio server
http://minio{1...4}.example.com/data{1...4}
--console-address ":9001"
С 4 нодами и 4 дисками на каждой (16 дисков итого) MinIO создаёт erasure set на 16 дисков. По умолчанию: 8 дисков с данными + 8 с чётностью. Кластер переживает потерю до 8 дисков одновременно.
mc: клиент командной строки
# Настроить alias
mc alias set local http://localhost:9000 minioadmin supersecret
# Создать бакет
mc mb local/backups
# Загрузить файл
mc cp /path/to/file.tar.gz local/backups/
# Синхронизировать директорию
mc mirror /var/www/uploads local/media/uploads/
# Включить версионирование
mc version enable local/backups
# Политика жизненного цикла (удалять через 90 дней)
mc ilm add --expiry-days 90 local/backups
Интеграция с boto3 (Python)
import boto3
s3 = boto3.client(
's3',
endpoint_url='http://localhost:9000',
aws_access_key_id='minioadmin',
aws_secret_access_key='supersecret',
)
# Загрузить файл
s3.upload_file('backup.tar.gz', 'backups', 'backup-2026-03-22.tar.gz')
# Получить список объектов
response = s3.list_objects_v2(Bucket='backups')
for obj in response['Contents']:
print(obj['Key'], obj['Size'])
Мониторинг через Prometheus
MinIO отдаёт метрики в формате Prometheus на /minio/v2/metrics/cluster. Добавьте в prometheus.yml:
scrape_configs:
- job_name: 'minio'
metrics_path: /minio/v2/metrics/cluster
static_configs:
- targets: ['minio.example.com:9000']
Готовые дашборды для Grafana есть на официальном сайте MinIO.
Типичные сценарии использования
- Бэкапы: Restic, Borg, Velero — все умеют писать в S3-совместимое хранилище
- Хранение артефактов CI/CD: образы, архивы, отчёты
- Медиафайлы: замена локального хранилища для веб-приложений
- Логи и аналитика: Loki, ClickHouse, Spark читают из S3
MinIO отлично вписывается в любой self-hosted стек. Если уже используете Kubernetes — есть официальный MinIO Operator с поддержкой автоматического масштабирования.
Используем MinIO как бэкенд для Loki и всё работает отлично — логи за несколько месяцев занимают разумное место благодаря компрессии.