2014-11-22 7 views
5

Die suggested strategy zu verwalten und Backup-Daten in Docker sieht ungefähr so ​​aus:"Official" Docker Backup-Strategie - Was ist mit Konsistenz?

docker run --name mysqldata -v /var/lib/mysql busybox true 
docker run --name mysql --volumes-from mysqldata mysql 
docker run --volumes-from mysqldata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/mysql 

Allerdings, wenn ich Backup-Lauf Container, die Art und Weise, ich werde nicht eine konsistente Sicherung erhalten, sollte ich? Ich kenne Tools wie mysqldump, aber was ist, wenn ich zum Beispiel einen Ordner sichern muss, zu dem Dateien ständig hinzugefügt und entfernt werden?

Antwort

1

Das zugrunde liegende Problem, d. H. Das Sichern von sich ändernden Dateien, ist unabhängig von docker. Verwenden Sie ein Tool wie rsnapshot oder dirvish, um Backups in ein Volume zu erstellen und verwenden Sie dann die oben genannte Vorgehensweise, um diese Backups basierend auf Ihrer Zuverlässigkeitsanforderung an einen sicheren Ort wie Amazon S3 oder Glacier zu verschieben.

Ob Sie Volumes von einem anderen Container oder dem Host-VM mithilfe des Schalters -v bereitstellen, werden die Änderungen an den Dateien in allen Containern (oder Host-VMs) in mehr oder weniger Echtzeit widergespiegelt. (Es gibt eine gewisse Verzögerung wegen des AUFS, das Docker über Host-Fs verwendet, aber es ist nicht riesig). Wenn der Sicherungscontainer permanent ausgeführt wird, kann er weiterhin Sicherungen durchführen und die Dateien werden immer die neuesten Dateien enthalten, die vom mysql-Container erkannt werden.

Edit: Aus Gründen der Klarheit.

+0

_ "um Backups in ein Volume zu machen" _ Aber diese Backups werden nicht konsistent sein, oder? Was ich meine: Sie können grundsätzlich keine konsistenten Backups in einem Container machen. Sie müssen einen Snapshot (lvm/btrfs)/var/lib/docker/volumes/XYZ erstellen und auf dem Host-Computer sichern. – S1lentSt0rm

+0

Volumes werden zwischen laufenden Containern in Real (ish) -Zeit geteilt. Sie können sie sogar vom Host-Dateisystem aus mounten. Verwenden Sie den Parameter -v/host_fs/location:/container_fs/location. Alle Änderungen an den Dateien im Volume sollten allen Containern und Hosts gleichzeitig zur Verfügung stehen. –

+1

Ich bin mir dessen bewusst. Das Problem ist, dass ich _konsistente_ Backups benötige: Snapshot den Status des Dateisystems _atomically_ zu einem bestimmten Zeitpunkt und Backup-Daten von diesem schreibgeschützten Snapshot. Ich weiß nicht, wie man das in einem Container macht, da ich dafür lvm oder btrfs-tools verwenden muss. Mit dem oben beschriebenen Ansatz verhindert niemand, dass sich das Dateisystem während der Sicherung ändert. – S1lentSt0rm

Verwandte Themen