Oft wird in der NoSQL Welt das Thema Backup sehr stiefmütterlich behandelt, mit der Begründung „bei genügend Server Knoten kann ja bei einem Ausfall nichts passieren“, das Problem mit logischen Fehlern wird kaum beachtet. Mit der Oracle NoSQL aber lassen sich Snapshots des gesamten Stores erzeugen. Auf Basis dieser über alle Knoten konsistenten Snapshots kann ein echtes Backup Konzept realisierbar wird. Die Daten in einem Snapshot können auch in einen anderen Store wieder importiert werden, zum Bespiel um eine Testumgebung aus den Produktionsdaten aufzusetzen.
Die Verwaltung der Umgebung erfolgt über das Kommandozeilen Werkzeug.
Aufruf mit:
java -jar $KVHOME/lib/kvstore.jar runadmin -port 5000 -host $HOSTNAME
Mit Hilfe des Snapshot Kommando (snapshot create -name <snapshot name>) wird über den gesamten Store (d.h. über alle Knoten und alle Master und Replikas) ein Snapshot der Daten erzeugt.
Ablauf einer Sicherung:
Beispiel:
# Anlegen kv-> snapshot create -name freitag_14_06_2013 Created snapshot named 130614-123305-freitag_14_06_2013 # Was für Snapshots existieren kv-> show snapshot #Löschen kv-> snapshot remove -name 130614-123305-freitag_14_06_2013 Removed snapshot 130614-123305-freitag_14_06_2013
Fällt die Hardware eines SN komplett aus, ist es hilfreich eine Sicherungskopie der SN Konfiguration des Nodes zuvor erstellt zu haben.
Befehl:
java -jar KVHOME/lib/kvstore.jar generateconfig -host $HOSTNAME -port 5000 -sn sn1 -target ~/sn1.config
Mit der erzeugen Datei, in unseren Beispiel „sn1.config.zip“, kann eine neuer Node mit gleicher IP Adresse, gleichen Namen und gleicher Storage Konfiguration wieder neu initialisiert werden.
Ablauf um einen kompletten Node wieder neu anzulegen:
Für den Restore stehen zwei Möglichkeiten zur Verfügung, den Snapshot direkt wieder einspielen oder die Daten erneut laden.
Die Topologie hat sich nicht verändert d.h. alle Knoten sind unverändert konfiguriert und online! Nur dann lassen die direkt die Snapshots wieder einspielen!
Ablauf:
Beispiel:
# Verzeichnis anlegen mkdir $KVROOT/GPIDB/sn1/rg1-rn1/recovery #snapshot daten dahin verschieben mv $KVROOT/GPIDB/sn1/rg1-rn1/snapshost/130614-142350-freitag/ $KVROOT/GPIDB/sn1/rg1-rn1/recovery # Service stoppen java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT # Starten nohup java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT &
Ein erster Test war allerdings nicht so recht erfolgreich, der Store ließ sich so nicht wirklich wieder zurücksetzen, evtl. nützlich bei größeren Datenmengen um einen Master Teil wieder herzustellen?
Ablauf:
Im zweiten Test wird auf allen Knoten in den SN Verzeichnissen recovery auf das snapshot Verzeichnis gelinkt um beim Neustart der Knoten die alten Daten wieder einzulesen.
# Admin Konsole starten java -jar $KVHOME/lib/kvstore.jar runadmin -port 5000 -host $HOSTNAME # Snapshot anlegen kv-> snapshot create -name sonntag Created snapshot named 130616-183718-sonntag on all 10 nodes # Sequence Nummer aus Ping merken: java -jar $KVHOME/lib/kvstore.jar ping -port 5000 -host nosqldb01 #wie Rep Node [rg1-rn3] Status: RUNNING,REPLICA at sequence number: 1,612,835 haPort: 5010 Rep Node [rg2-rn3] Status: RUNNING,REPLICA at sequence number: 1,620,315 haPort: 5011 Rep Node [rg3-rn3] Status: RUNNING,MASTER at sequence number: 1,619,967 haPort: 5012 # Daten über Testprogramm löschen # Auf allen Knoten Store stoppen java -jar $KVHOME/lib/kvstore.jar stop -root $KVROOT # Auf allen Knoten!! # wie hier auf 1! cd $KVROOT/GPIDB/sn1/rg1-rn1 ln -s snapshots/ recovery cd $KVROOT/GPIDB/sn1/rg2-rn1 ln -s snapshots/ recovery cd $KVROOT/GPIDB/sn1/rg3-rn1 ln -s snapshots/ recovery # Auf allen Knoten die Dienste neu starten nohup java -jar $KVHOME/lib/kvstore.jar start -root $KVROOT & # Warten bis Store wieder online java -jar $KVHOME/lib/kvstore.jar ping -port 5000 -host nosqldb01 # Sequence Nummer sind nun zurück gesetzt: Rep Node [rg1-rn3] Status: RUNNING,REPLICA at sequence number: 1,609,571 haPort: 5010 Rep Node [rg2-rn3] Status: RUNNING,REPLICA at sequence number: 1,616,853 haPort: 5011 Rep Node [rg3-rn3] Status: RUNNING,MASTER at sequence number: 1,616,701 haPort: 5012 # Anzahl der Daten im Store mit Testprogramm prüfen: # > Daten sind wieder da! # alle Recovery Links wieder entfernen cd $KVROOT/GPIDB/sn1/rg1-rn1 unlink recovery #usw. (darauf achten das beim unlink Befehlt kein / am Ende steht .-) !!!
Mit diesem Ablauf ließ sich der Store wieder komplett auf den Snapshot Punkt zurücksetzen.
!!Achtung!!
!!Der Snapshot wird mit dieser Methode automatisch gelöscht!!
Mit dem Lade Programm „oracle.kv.util.Load“ kann ein Snapshot auch wieder in die Datenbank geladen werden.
Verwendung:
java -jar KVHOME/lib/kvstore.jar load -source <backupDir> -store <storeName> -host <hostname> -port <port> [-status <pathToFile>] [-verbose]
Parameter:
Beispiel:
java -jar $KVHOME/lib/kvstore.jar load -source $KVROOT/GPIDB/sn1/rg1-rn1/snapshots/130616-212153-sonntag -store GPIDB -host $HOSTNAME -port 5000 Load succeeded, wrote 2818 records java -jar $KVHOME/lib/kvstore.jar load -source $KVROOT/GPIDB/sn1/rg2-rn1/snapshots/130616-212153-sonntag -store GPIDB -host $HOSTNAME -port 5000 Load succeeded, wrote 2902 records java -jar $KVHOME/lib/kvstore.jar load -source $KVROOT/GPIDB/sn1/rg3-rn1/snapshots/130616-212153-sonntag -store GPIDB -host $HOSTNAME -port 5000 Load succeeded, wrote 2780 records
Nach dem laden ALLER Snapshots der drei SN sind ALLE Daten wieder da.
Alle Daten werden geladen und für existierende Schlüssel die Values überschrieben.