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
Személyes eszközök