MongoDB backup

JeduEdu používá jako svůj datastore technologii MongoDB (skvělá dokumentová databáze). Aby dostupnost databáze byla opravdu 100%, data jsou ukládána v ReplicaSetu, který tvoří 3 nezávislé fyzické servery. To znamená, že každý zápis se provádí na primary server a operace zápisu se považuje za úspěšnou, až minimálně jeden další server ReplicaSetu provede zápis u sebe. Skvělé.
Data jsou fyzicky na 3 různých místech. Další výhodou je, že k tomu, aby aplikace koretně stále fungovala stačí, aby fyzicky běžel jen jeden ze serveů. Servery nepadají každý den, ale stát se to může, ale že vám spadnou hned 3 servery je docela nepravděpodobné.

Dalším krokem k zabezpečení dat je jejich pravidelné zálohování. Bez ohledu na kolika strojích ReplicaSt běží, každý den se automaticky provádějí zálohy celé databáze JeduEdu. Opět na všech 3 strojích.

A aby záloh opravdu nebylo málo, pak čas od času spustím zálohování ze svého Macu, takže mám kopletní zálohu úplně mimi produkční prostředí a jsem schopen celou aplikaci, včetně backendu během okamžiku rozjet úplně někde jinde na něčem jiném.

Odzálohovat Mongo je neskutečně jednoduché a dá se dělat za reálného provozu bez nutnosti odstavení jakéhoholiv ze serverů v ReplicaSetu:

#!/bin/sh

TIME=`date +%Y-%m-%d_%H-%M`
GZIP="--gzip"
BACKUP_DIR="./mongo-dump"
OUT="$BACKUP_DIR/$TIME"
DB="jeduedu"
HOST="122.222.33.22" # vloz IP adresu sveho MongoDB serveru
PORT="29003" # cislo portu, na kterem MongoDB bezi
USER="pepa" # pro autorizaci
PASS="mojeSuperHeslo"

if [ ! -d "$BACKUP_DIR" ]; then 
    mkdir "$BACKUP_DIR"
fi

echo "MongoDB BACKUP -> $OUT" 
mongodump --host $HOST --port $PORT -u $USER -p $PASS --authenticationDatabase $DB -d $DB $GZIP --out $OUT

Výhodou ReplicaSetu je, že zálohovat můžete tak, že zastavíte některý ze slave serverů a odkopírujete celý adresář s databází na disku. Po nahození takto „zazálohované“ databáze můžeze slave server zase nahodit a on si automaticky sám dotáhne vše o co přišel po dobu co byl down. Super.