PostgreSQL cluster
Čemu sve ovo?
Koliko god da ste dobar admin, uvek nešto može poći po zlu. Ako ništa drugo, u serveru se uvek može pokvariti neki deo hardvera. Da biste osigurali da će podaci ostati sigurni i dostupni, možete napraviti još jedan server koji će imati kopiju podataka, pa u slučaju gubitka istih na jednom serveru, možete lako preći na drugi server. Ideja je veoma slična diskovima i RAID grupama.
Priprema cluster-a
Pripreme na master serveru
Master je onaj server koji proglasite glavnim. Ideja je da se samo on koristi, a da ostali serveri, koji imaju ulogu slave-a, kopiraju podatke sa njega. Da bi ovo bilo moguće, potrebno je izvršiti neke izmene u odnosu na konfiguraciju koja stiže uz instalaciju paketa postgresql. Prvo, verzija PostgreSQL-a koja se preporučuje je iz grane 9.1.x. Deo koji treba izmeniti u /etc/postgresql/9.1/main/postgresql.conf:
wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/archive/%f'
max_wal_senders = 10
U fajlu /etc/postgresql/9.1/main/pg_hba.conf je potrebno izmeniti dozvole:
local replication postgres peer
Dalje, potrebno je, pod nalogom postgres, napraviti direktorijum archive:
# mkdir /var/lib/postgresql/archive
Restartujte PostgreSQL kao root:
# /etc/init.d/postgresql restart
Potrebno je da napravite base backup pod nalogom postgres, koji ćete učitati u slave server ili servere:
# pg_basebackup -D /var/lib/postgresql/main
Pripreme na slave serveru
Preporučljivo je da imate identičnu verziju PostgreSQL-a kao i na master-u. Sve radnje na master serveru su pod nalogom postgres, osim ako nije drugačije naznačeno. Kao root, zaustavite PostgreSQL:
# /etc/init.d/postgresql stop
Da biste lakše uradili kopiranje backup-a, najbolje da generišete ssh ključ bez lozinke:
# ssh-keygen -t dsa
Na sva pitanja odgovorite sa <Enter>. Sadržaj fajla ~/.ssh/id_dsa.pub prekopirajte u ~/.ssh/authorized_keys na master serveru. Nakon toga, obrišite main direktorijum:
# rm -rf /var/lib/postgresql/9.1/main
Prekopirajte direktorijum /var/lib/postgresql/main sa master servera:
# scp master:main ~/9.1/
Napravite potrebne izmene na konfiguracionom fajlu /etc/postgresql/9.1/main/postgresql.conf:
hot_standby = on
Potrebno je navesti kako će se izmene prebacivati sa master servera na slave i to u fajlu /etc/postgresql/9.1/main/recovery.conf:
standby_mode = 'on' restore_command = 'scp master:archive/%f %p 2>/dev/null'
Za početak ćete možda želeti da izbacite "2>/dev/null" iz gornje komande, kako biste mogli da vidite greške, ako eventualno postoje, ali svakako se preporučuje da vratite kasnije, pošto na svakih sekund ili dva će komanda biti pokrenuta, što će u slučaju da na masteru nema izmena, izbaciti grešku u log fajlu, te će taj fajl biti veoma nečitljiv posle nekog vremena.
Kako basebackup ne kopira sve fajlove koje Debian instalacija očekuje, potrebno je 3 fajla linkovati:
# ln -s /etc/postgresql/9.1/main/recovery.conf
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
Kao root, startujte PostgreSQL:
# /etc/init.d/postgresql start
Posle ovoga, svaka izmena na master serveru bi trebala uz veoma malo kašnjenje da bude vidljiva i na slave serveru. Broj slave servera napravljenih na ovaj način je neograničen, tako da možete imati 1 ili više slave servera. Ukoliko nešto ne funkcioniše kako treba, prvo pogledajte /var/log/postgresql direktorijum i fajlove u njemu.
Дејства на документ