ZFS Replikation

Ich musste heute einem Kunden einen Weg zeigen, wie er Daten von einem Server auf einen anderen mirroren kann. Er hat nicht die Mittel in eine SAN zu investieren, möchte aber trotzdem eine gewisse Redundanz erreichen. Seine Idee war, einen Hot Standby Server zu installieren und auf diesem ein zweites, identisches Plattenarray wie auf dem ersten dran zu hängen. Seine Frage war nun, wie er die Daten vom einen auf den anderen replizieren kann. Rsync & co. scheiden da natürlich mit ziemlicher Sicherheit aus. Da er aber sowieso ein ZFS verwenden wollte, lag die Idee die Replikation über zfs send/receive nahe.

Hier kurz die Idee:

Angenommen wir haben auf zwei Servern jeweils einen zpool bereits angelegt
Auf dem Master wird nun ein Snapshot angelegt:
zfs snapshot pool/daten@repli1

Diesen senden wir nun an den Mirror:
zfs send pool/daten@repli1 | ssh slave zfs receive pool/daten

Das ist nun die initiale Replik – das erste Mal dauert es (je nachdem wie voll das ZFS bereits ist) relativ lange. Anschließend setzt man noch den Slave auf Read-Only:
zfs set readonly=1 pool/daten

Anschließend macht man dann regelmäßig einen neuen Snapshot, überträgt die Differenz zum Slave und löscht dann den *vorherigen* Snapshot:
zfs snapshot pool/daten@repli2
zfs send -i pool/daten@repli1 pool/daten@repli2 | ssh slave zfs receive pool/daten
zfs destroy pool/daten@repli1

Beim nächsten Mal dann:
zfs snapshot pool/daten@repli1
zfs send -i pool/daten@repli2 pool/daten@repli1 | ssh slave zfs receive pool/daten
zfs destroy pool/daten@repli2
usw.

Oder man verwendet Suns AVS – welches ich mir selbst noch gar nicht angesehen habe und ehrlich gesagt auch nicht weiss, ob es aus den Beta-Schuhen bereits raus ist