PostgreSQL - Folyamatos archiválás (8.3 pg standby)
A RoolWikiBÓL
Ez a folyamatos archiválás teszt és dokumentáció a 24.4. Warm Standby Servers for High Availability postgresql dokumentáció alapján készült.
A cél egy másik számítógépre duplikálni az éles szerver adatbázisait úgy, hogy folyamatosan - a lehető leginkább - naprakész legyen. Ha a fő rendszer bármilyen hiba miatt működésképtelenné válik, akkor ez a biztonsági léphet a helyébe. A biztonsági adatbázis nem hozzáférhető ebben az üzemmódban. A használatba állításához le kell állítani a folyamatos mentés funkcióját.
Tartalomjegyzék |
Engedélyezzük a WAL log archiválást az éles szerveren
A postgresql.conf fájlban néhány paramétert be kell állítani.
Archiv mód bekapcsolása
archive_mode = on
A wal logokat átmásoljuk az archiv szerverre. (Egy sorba kell írni a parancsot!) Mivel a másolás a háttérben történik, be kell állítani, hogy az scp ne kérjen jelszót.
archive_command = 'scp /var/lib/postgresql/8.3/data/%p 192.168.1.115:~/8.3/data_wal/%f'
Előírható, hogy az utolsó wal (log) fájl után legkésőbb mennyi idő múlva készüljön el a következő wal fájl. (A wal fájl akkor készül el, ha a változások mennyisége miatt a wal fájl eléri a 16MB-os méretet. Előfordulhat, hogy ez sokáig nem történik meg.) A példában ez az idő 15 perc.
archive_timeout = 15min
Újra kell olvastatni a postgresql-el a konfigurációs fájlokat.
darkstar:~$ /etc/init.d/postgresql8.2.3 reload
Innentől kezdve az éles szerver már másolja is a fájlokat. Ha még nem létezik az archiv szerveren a ~/8.3/data_wal mappa, akkor a wal fájlokat gyűjti, amíg sikeres nem lesz a másolás.
Következő lépés: készíteni kell egy mentést az éles szerver data mappájáról az archiv szerverre
- Előfeltétel a WAL log archiválás engedélyezése az éles szerveren.
- Be kell lépni a backup módba. (az alábbi tárolt eljárás egy sztringet vár paraméterül, ami tetszőleges lehet. Ezzel magunk számára azonosítjuk a mentést. )
darkstar:~$ psql -Upostgres -hlocalhost -p5435 postgres=# select pg_start_backup('2009-09-14');
- Fájlrendszer szintű mentést kell készíteni
darkstar:/usr/local/pgsql8.3$ tar cjf data.backup.tbz2 data
- backup mód vége (mentés elkészülte után)
postgres=# select pg_stop_backup();
Befejezi a backup módot. Kiírja az utolsó wal szegmens számát. Eddig felhasználva a wal szegmenseket (azaz log fájlokat) a stop backuppal azonos állapotú adatbázis jöhet létre.
Létrehozzuk az adatbázist az archiv szerveren
- PostgreSQL-t telepítjük az archiv gépre. (Ugyanaz a verzió legyen mint a forrás rendszeren!)
- a data.backup.tbz2 fájlt átmásoljuk archiv szerverre.
- A data.backup.tbz2 kicsomagoljuk az archiv szerverre. Az így létrejött data mappa lesz az archiv szerver data mappája.
- Töröljük a data/pg_log, data/pg_xlog és data/pg_xlog/archive_status mappákból a fájlokat
- Töröljük a data/serverlog, data/postgresql.pid fájlt!
- Szerkesszük át a postgresql.conf fáljt: ne legyen bekapcsolva a wal archiválás!
archive_mode = off
- A data mappában létre kell hozni egy recovery.conf állományt. Ez tartalmazza a rendszer visszaállítást vezérlő paramétereket. Nekünk most a következő kell:
restore_command = '/usr/lib/postgresql/8.3/bin/pg_standby -l /var/lib/postgresql/8.3/data_wal %f %p 2>>pg_standby.log.5432'
- Indítsuk el a szervert!
A pg_standby program gondoskodik arról, hogy az archiv szerver folyton várja a következő wal fájlt, azaz maradjon visszaállító módban. http://www.postgresql.org/docs/8.3/static/pgstandby.html
Az archiv szerver elindítása normál módban
Az archiv szerver egyáltalán nem használható. A szerver elutasítja a kapcsolódási kérelmeket. Ahhoz, hogy elérhetőek legyenek a szerveren lévő adatbázisok, le kell állítani az archiv módot.
- Szabványos módon (szabályosan) leállítjuk a PostgreSQL adatbázis szervert.
darkstar:~$ /etc/init.d/postgresql8.3 stop
- a recovery.conf fájlban megjegyzésbe tesszük a visszaállító parancsot
# restore_command = '/usr/lib/postgresql/8.3/bin/pg_standby -l /var/lib/postgresql/8.3/data_wal %f %p 2>>pg_standby.log.5432'
- az összes elérhető wal fájlt a data/pg-xlog mappába másoljuk. Az utolsóként betöltött, és az ezt követők kellenek. Az ide másolt fájlokat a szerver induláskor feldolgozza, és csak azután lehet hozzá kapcsolódni.
- újraindítjuk a PostgreSQL adatbázis szervert.
darkstar:~$ /etc/init.d/postgresql8.3 start