Back openDesk Edu for a sovereign, open-source education â every vote counts.
Vote nowSave products you love by clicking the heart icon.
SeaweedFS end to end: master/volume/filer architecture, logical volumes, replication, the S3 gateway, K8up backups, mirroring, and the TLS saga.
MinIO hat sich zum De-facto-Standard fĂŒr selbstgehosteten, S3-kompatiblen Speicher entwickelt. Es bietet einen Drop-in-Ersatz fĂŒr AWS S3, der ĂŒberall lĂ€uft â auf Laptops, Bare Metal oder Kubernetes â und dabei dieselben API-Semantiken verwendet.
Die zentrale architektonische Entscheidung: MinIO ersetzt den lokalen Dateisystem-Speicher durch eine S3-API. Dadurch werden Ihre Anwendungsdaten von dem Server entkoppelt, auf dem die Anwendung lÀuft. Backups, Replikation und Disaster Recovery werden so zu S3-nativen Operationen anstatt zu Dateisystem-Skripten.
MinIO implementiert dieselbe S3-API, die auch AWS S3 verwendet. Jedes Tool, das S3 spricht, funktioniert auch mit MinIO:
import boto3
client = boto3.client(
"s3",
endpoint_url="http://minio:9000",
aws_access_key_id="minioadmin",
aws_secret_access_key="<password>",
)
client.create_bucket(Bucket="data")
client.upload_file("backup.sql", "data", "backups/daily.sql")
Diese KompatibilitĂ€t erstreckt sich auf alle von MinIO unterstĂŒtzten S3-Features:
Was MinIO NICHT unterstĂŒtzt (im Vergleich zu AWS S3):
FĂŒr die meisten selbstgehosteten Workloads ist der unterstĂŒtzte Funktionsumfang vollstĂ€ndig.
MinIO benötigt einen Root-Benutzer (Access Key + Secret Key). Im Gegensatz zu AWS IAM gibt es kein separates Root-Konto â die Anmeldedaten, die Sie in .env festlegen, fungieren als Superadmin:
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=a-strong-32-character-password
Wichtige EinschrÀnkungen:
mc admin user infoMinIO bildet einen lokalen Dateisystempfad (/data) auf die S3-API ab. Jeder Bucket wird zu einem Unterverzeichnis:
/data/
âââ .minio.sys/ # MinIO internal metadata
âââ data/ # S3 bucket "data"
â âââ uploads/
â âââ archives/
âââ backups/ # S3 bucket "backups"
âââ logs/ # S3 bucket "logs"
Diese flache Dateistruktur bedeutet, dass Sie MinIO-Daten direkt auf der Festplatte durchsuchen können (nur lesend â schreiben Sie niemals direkt in /data auĂerhalb von MinIO).
FĂŒr Produktions-Deployments mit mehreren Festplatten bietet das Erasure Coding von MinIO eine RAID-Ă€hnliche Resilienz ohne den RAID-Overhead:
# With 4 data + 2 parity drives, tolerate 2 drive failures
docker compose run --rm minio server /disk{1..6}
Erasure Coding verwendet die Reed-Solomon-Kodierung â Daten werden in N Daten-Shards und M ParitĂ€ts-Shards aufgeteilt. Der Speicher-Overhead betrĂ€gt M/N. Bei 4+2 liegt der Overhead bei 50 %, es werden jedoch zwei gleichzeitige FestplattenausfĂ€lle toleriert.
Der Nginx-Proxy in diesem Stack erfĂŒllt drei Zwecke:
Die Standardkonfiguration von MinIO hat konservative Limits. Der Nginx-Proxy ĂŒberschreibt diese fĂŒr Anwendungen, die groĂe Uploads benötigen:
client_max_body_size 5G;
client_body_buffer_size 10M;
proxy_request_buffering off;
Die Einstellung von proxy_request_buffering off ist entscheidend fĂŒr Uploads ĂŒber 1 GB â ohne diese Einstellung puffert Nginx den gesamten Request-Body auf die Festplatte, bevor er an MinIO gesendet wird, was dazu fĂŒhrt, dass SchreibvorgĂ€nge bei groĂen Uploads ins Stocken geraten.
Object Storage ist bandbreitenintensiv. Rate Limiting verhindert, dass ein einzelner Client die Netzwerkverbindung sÀttigt:
limit_req zone=minio_api burst=200 nodelay;
Die Burst-GröĂe von 200 erlaubt kurze Spitzen, wĂ€hrend ein dauerhaftes Rate Limit von 100 Anfragen pro Sekunde erzwungen wird.
S3-API-Verbindungen können langlebig sein (insbesondere bei Multipart-Uploads):
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
Diese verhindern, dass Nginx inaktive S3-Verbindungen vorzeitig abbricht.
Der backup-agent-Container implementiert eine mehrschichtige Backup-Strategie:
mc mirror --overwrite --watch local/data remote/data
Das Flag --watch ermöglicht eine kontinuierliche Synchronisierung â geĂ€nderte Dateien werden sofort gespiegelt. FĂŒr geplante Backups (z. B. nĂ€chtlich) lassen Sie --watch weg und fĂŒhren den Befehl ĂŒber einen Cron-Zeitplan aus.
Konfigurieren Sie einen Remote-Endpunkt (Backblaze B2, AWS S3, Wasabi) und spiegeln Sie mc mirror alle Buckets auf das Remote-Ziel. Die Vorteile eines Object-to-Object-Backups gegenĂŒber einem Backup auf Dateiebene:
mc mirror ĂŒbertrĂ€gt nur geĂ€nderte ObjekteLassen Sie alte Daten mithilfe von Bucket-Lifecycle-Regeln automatisch ablaufen:
{
"Rules": [
{
"ID": "expire-old-backups",
"Status": "Enabled",
"Expiration": {
"Days": 30
}
}
]
}
Dies geschieht auf MinIO-Ebene â es ist kein externer Cron-Job erforderlich.
MINIO_ROOT_PASSWORD festlegen (24+ Zeichen, alphanumerisch + Symbole)minio server /disk{1..N})/minio/v2/metrics/cluster bereitMINIO_VERSION auf ein spezifisches Release fixieren, nicht auf :latestmc mirror remote/data local/data in umgekehrter Richtungmc admin heal wöchentlich per Cron einrichten, um degradierte Laufwerke zu erkennenmc mirror ist fĂŒr Object Storage zuverlĂ€ssiger als Backups auf Dateisystemebene