Log in


Forgot your password?
prijatelji LUGoNSa
gnu.gif
linuxzasve.jpg
hulk.jpg
zextras_logo.png
 
You are here: Home / Uputstva / Debian/Ubuntu / PostgreSQL cluster

PostgreSQL cluster

by Goran Mekić last modified Jan 26, 2012 03:24 PM
U novijim verzijama, PostgreSQL ima podršku za master-slave replikaciju i hot standby

Č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.

Document Actions