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.