Für Mehrknoten-Admins mit parallelen Runnern in mehreren Regionen: Topologie-Matrix, zwei CLI-Tabellen (restic/rclone), rsnapshot-Abgrenzung via Repository und forget, plus 1TB/2TB-Schwellen und Lock-Offset.
- Repository-Kollisionen: Zwei Hosts, die dasselbe restic-Repository ohne zentrale Lock-Disziplin beschreiben, erzeugen Pack-Konflikte und inkonsistente Index-Zustände.
- rsnapshot-Hardlinks: Lokale Snapshot-Bäume skalieren auf APFS zwar elegant, spiegeln aber weder Verschlüsselung noch geo-redundante Offsite-Anforderungen moderner Audit-Teams.
- Fensterüberlappung: Wenn
restic pruneoder rclone-syncparallel zu Xcode-Lanes läuft, verlieren interaktive SSH-Sitzungen IOPS, obwohl die WAN-Leitung noch nicht gesättigt ist. - S3-Kosten: Unbegrenzte Retries ohne
tpslimiterzeugen API-Gebühren, bevor Nutzdaten den Speicher füllen.
Backup-Topologie: Region, Pfad und Ziel trennen
Pro clustervps-Knoten Quellpfade festlegen (z. B. Derived Data, .build, Artefakte laut rsync-Matrix) und im Objekt-Storage getrennte Präfixe je Region oder Runner-Pool vergeben.
| Topologie-Muster | Quellpfad (Beispiel) | Objekt-Storage-Ziel | Verschlüsselung | Stabilitätshinweis |
|---|---|---|---|---|
| 1 Host = 1 restic-Repo | /var/backups/ci |
s3://fleet/eu/node12 |
restic init Passwort + Repo-Key |
Geringstes Lock-Risiko |
| Shard je Region | Mehrere lokale Pfade via --files-from |
s3://fleet/us-west/shard-b |
KMS-SSE + restic | Monitoring auf Präfix-Ebene |
| rclone Mirror | Immutable *.tar.zst |
s3://logs/archive |
Bucket-Policy + TLS | Checksummenpflicht aktivieren |
| Hybrid | restic für Code, rclone für Blobs | Getrennte Remotes | Zwei Schlüsselrotationen planen | Zeitfenster strikt trennen |
State-Lease-Logik aus der Pulumi-Matrix analog anwenden, damit IaC- und Backup-IOPS nicht denselben Puffer leeren. Dokumentieren Sie zudem, welche Runner-Labels (nomad.node_pool oder interne Tags) welches Präfix beschreiben dürfen — das verhindert versehentliche Doppelpfade nach Autoscaling-Events.
Limitierung und Parallelität: ausführbare Parameter
WAN-Caps konservativ starten; nach einem Zyklus df, df -i und Load prüfen. Tabellenzeilen direkt in launchd-Skripte übernehmen.
| restic-Flag / Option | Funktion | Startwert (Nacht) | Validierung | Sicherheitsnotiz |
|---|---|---|---|---|
--limit-upload 6000 |
Kilobyte pro Sekunde upstream | 4–8 Mbit/s effektiv | SSH-Latenz messen | SSH priorisieren |
-o s3.connections=4 |
Parallele S3-Streams | 2–4 | CPU <70 % | Weniger oft stabiler |
--pack-size 8 |
MiB pro Pack-Datei | 4–16 MiB | RAM-Spitzen beobachten | M4: mittlere Packs |
unlock + Repo-Lockfile |
Abbruch-Recovery | Runbook-Pflicht | Manuell nach Crash | Nur freigegeben |
forget --keep-daily 7 --keep-weekly 5 --keep-monthly 12 --prune |
Retention + Speicherfreigabe | Wöchentlich nach Backup | Objekt-Storage-Metrik „deleted“ | Nicht beim ersten Full |
Vor automatisiertem prune mindestens 15 % freien APFS-Raum einplanen.
| rclone-Flag | Funktion | Startwert | Chunk / Transfer | Stabilität |
|---|---|---|---|---|
--bwlimit 8M |
Upload-Drossel | 6–12 MiB/s | — | + --tpslimit 12 |
--transfers 4 |
Parallele Dateien | 2–4 | — | Bei Kleindateien ↓ |
--s3-chunk-size 64M |
Multipart-Teile | 32–128 MiB | RAM ∝ Chunk | RAM steigt mit Chunk |
--checksum |
Integrität | Pflicht für CI-Tarballs | CPU beachten | Integrität |
copy vs sync |
Mutationsrisiko | copy bevorzugt |
— | sync --dry-run pflichtig |
Aufbewahrung: restic-Repository + forget vs. rsnapshot
rsnapshot nutzt lokale Hardlink-Rotation; restic führt ein verschlüsseltes Repository mit Packs — Historie via forget + prune, ohne manuelles Löschen von Snapshot-Bäumen.
| Kriterium | rsnapshot | restic + Objekt-Storage | Ops-Aufwand | Audit-Tauglichkeit |
|---|---|---|---|---|
| Speicherort | Lokal/NFS | S3-kompatibel offsite | NFS-Latenz | Geo-Redundanz |
| Retention-Modell | Rotation + Hardlinks | forget-Policy |
Policy-as-Code | Nachvollziehbar |
| Kostenfalle | Platte volllaufen | API-PUT + Prune | Budget pro Präfix | Kosten monitoren |
| Wiederherstellung | Sofort lokal | restore streaming |
Zeitfenster planen | Quartals-Restore |
Hybrid: rsnapshot optional lokal, restic als Offsite-Autorität — Startzeiten versetzen (Disk-Matrix). Vergessen Sie nicht, forget-Policies im Git-Repo versioniert abzulegen, damit einzelne Knoten nicht abweichende Aufbewahrungsregeln fahren, sobald neue Regionen online gehen.
Zeitfenster: Backups vs. CI-Buildsperren
CI nutzt flock, Nomad oder Queues bis spät — launchd-Timer so legen, dass restic 30–45 Minuten nach Lock-Ende startet; große rclone-Jobs separat schedulen.
- Locks: Nomad-Affinity mit Cron korrelieren.
- Dual-Timer:
backupundforget --prunean verschiedenen Nächten. - I/O:
nice/ioniceim Wrapper. - Metriken: Upload-Dauer und freier Speicher ins CI-Dashboard.
- 1TB/2TB-Gates: Warn bei <120 GiB bzw. <220 GiB frei; Hard-Stop bei <80 GiB bzw. <150 GiB — dann rclone-
syncstoppen,restic checkplanen. - Skalierung: Bei chronischer Kollision Knoten erweitern, nicht Limits streichen.
FAQ
rclone + restic im selben Präfix? Getrennte Unterordner; kein sync --delete-after auf Pack-Pfade.
restic check? Monatlich mit --read-data-subset=n% rotierend.
Region-Latenzen? Pro Region --limit-upload und --s3-upload-cutoff statt globaler Caps.
Mehr M4-Knoten für saubere Backup-Fenster
Wenn WAN-Limits trotz Parametertuning weiter mit CI kollidieren, erweitern Sie die Flotte: Tarife transparent vergleichen, in der Hilfe SSH- und Storage-Hinweise lesen oder direkt bestellen — so bleiben Nacht-Backups reproduzierbar, ohne interaktive Sessions zu opfern.