WalMgr kasutamine

Allikas: Kuutõrvaja

Sissejuhatus

Ülidselt saab PostgreSQL andmebaasi tööle seada archive logs režiimis, mis tähendab, et kõik toimunud tegevused kirjutatakse eraldi spetsiaalses formaadis logifaili. Seda logifaili nimetatakse WAL (ingl. k. write ahead log) logiks. Lisaks, kui andmebaasile öelda

 SQL> select pg_start_backup('string');

siis viiakse andmebaas sellisesse seisu, et data clusterile vastav failisüsteem ei muutu ning sellest kataloogist võib teha failisüsteemi vahenditega, nt rsync abil koopia. Peale koopia tegemist tuleb öelda

 SQL> select pg_stop_backup();

Selliselt moodustatud andmeklustri (ingl. k. data cluster) failisüsteemi koopiat ja peale koopia tegemist moodustustunud WAL logisid saab kasutada mingile etteöeldud koopiajärgsele ajahetkele vastava andmebaasi oleku moodustamiseks. Selleks tuleb sooritada selline järgnevus

  • kopeerida andmebaasi andmeklustri failisüsteemi, nt /srv/postgresql, pg_start_backup('string') käigus varundatud andmed
  • tekitada nt sellise sisuga fail /srv/postgresql/recovery.conf andmeklusteri kataloogi, fail peab olema postgres kasutaja oma
 restore_command = 'cp /srv/backup/postgresql/archive-logs-20070802/%f %p'
  • käivitada andmebaas tavapäraselt viisil, kusjuures soovitavalt on archive_logs välja lülitatud

Näiteks sobib see tehnika töötava andmebaasi kõrvale teise arvutisse andmebaasi mingi seisu moodustamiseks.

WalMgr utiliit võimadab on aga sellist asjakorraldust, et kaks PostgreSQLi andmebaasi eksemplari töötavad pidevalt sellises režiimis, et ühe andmebaasi (master - ingl. k. isand) logi loetakse sisse teise (slave - ingl. k. ori) andmebaasi. Nii töötavas skeemis on küll kahe andmebaasi sisu endam-vähem sama, kuid ei ole logide sisselugemise ajal teine andmebaas kasutatav. Siiski, selline asjakorraldus pakub järgmisi võimalusi

  • suhteliselt hõlpsasti saab lülitada kasutajad ümber ühelt andmebaasi eksemplarilt teisele, nt esimese andmebaasi hoolduse ajaks
  • peale WAL logidega tegelemise ei ole vaja andmebaasis teha mingisuguseid muudatusi, nt lisada tabelitele trigger'eid

WalMgr on Skype poolt valmistatud tarkvarakomplekti Skytools üks komponent, tarkvara kodulehekülg asub aadressil https://developer.skype.com/SkypeGarage/DbProjects/SkyTools/WalMgr.

WalMgr esineb Pyhtoni skripti kujul ja ta kasutab standarses PostgreSQL andmebaasis olemasolevaid omadusi lihtsustades kasutajal kahe eelkirjeldatud moel töötava PostgreSQLi eksemplari tööleseadmist ja kasutamist.

Kasutamine Debian Sidiga 2008 aasta suvel

WalMgr lahenduse katsetamiseks on üks hõlbus võimalus 2008 aasta suvel kasutada Debian Sid'i, seal on skytools pakett olemas, paigaldamiseks tuleb öelda

 bash# apt-get install skytools

Skytools sisaldab lisaks walmgr'ile ka muid programme, kui käesoleva teksti seisukohast on oluline vaid walmgr

 /usr/bin/walmgr
 /usr/share/doc/skytools/conf/wal-master.ini
 /usr/share/doc/skytools/conf/wal-slave.ini

Master'i ettevalmistamine

Master'isse peab olema paigaldatud PostgreSQL andmebaas, sobib kasutada Sidi paketihalduse andmebaasi

 bash# apt-get install postgresql-8.3

Lisaks tuleb moodustada sobiva sisuga WalMgr seadistusfailid, näiteks sellise sisuga wal-master.ini ja wal-slave.ini

 bash$ cat /var/lib/postgresql/wal-master.ini
 [wal-master]
 job_name             = servername_walgmr_master
 logfile              = /var/log/postgresql/wal-master.log
 use_skylog           = 0
 
 master_db            = dbname=template1
 master_data          = /var/lib/postgresql/8.3/main
 master_config        = /etc/postgresql/8.3/main/postgresql.conf
 
 slave_config = /var/lib/postgresql/wal-slave.ini
 slave = 192.168.10.13:/data/walshipping
 
 completed_wals       = %(slave)s/logs.complete
 partial_wals         = %(slave)s/logs.partial
 full_backup          = %(slave)s/data.master
 file_target          = %(slave)s/files.master
 
 # syncdaemon update frequency
 loop_delay           = 5.0
 # use record based shipping available in 8.2
 use_xlog_functions   = 0
 
 #periodic sync
 #command_interval     = 600
 #periodic_command     = /var/lib/postgresql/walshipping/periodic.sh
 bash$ cat /var/lib/postgresql/wal-slave.ini
 [wal-slave]
 job_name             = servername_walmgr_slave
 logfile              = /var/log/postgresql/wal-slave.log
 use_skylog           = 0
 
 slave_data           = /var/lib/postgresql/8.3/main
 slave_stop_cmd       = /etc/init.d/postgresql-8.3 stop
 slave_start_cmd      = /etc/init.d/postgresql-8.3 start
 
 slave                = /data/walshipping
 completed_wals       = %(slave)s/logs.complete
 partial_wals         = %(slave)s/logs.partial
 full_backup          = %(slave)s/data.master
 
 keep_backups         = 0
 archive_command =

Slave'i ettevalmistamine

Slave'i peab olema paigaldatud PostgreSQL andmebaas, sobib kasutada Sidi paketihalduse andmebaasi.

 bash# apt-get install postgresql-8.3

Slave'il peab olema vaid wal-salve.ini

 bash$ cat /var/lib/postgresql/wal-slave.ini
 [wal-slave]
 job_name             = servername_walmgr_slave
 logfile              = /tmp/wal-slave.log
 use_skylog           = 0
 
 slave_data           = /var/lib/postgresql/8.3/main
 slave_stop_cmd       = /etc/init.d/postgresql-8.3 stop
 slave_start_cmd      = /etc/init.d/postgresql-8.3 start
 
 slave                = /data/walshipping
 completed_wals       = %(slave)s/logs.complete
 partial_wals         = %(slave)s/logs.partial
 full_backup          = %(slave)s/data.master
 
 keep_backups         = 0
 archive_command =

Kusjuures wal-slave.ini on sama sisuga masteris ning slave's ning nad tuleb hoida käsitsi ühesugustena.

WalMgr testimine

WalMgr testimiseks sobib kasutada postgresqli andmebaasi contrib'ina jagatavad pgbench (http://developer.postgresql.org/pgdocs/postgres/pgbench.html) utiliiti, näiteks täites sedasi testiks moodustatud baasi

 SQL> create database test;
 bash$ /usr/local/postgresql/bin/pgbench -i -s 10 -h 192.168.10.144 -U postgres test2

Skytools paigaldamine lähtetekstist

Kopeerida http://pgfoundry.org/projects/skytools aadressilt viimane stabiilne Skytools .tar.gz arhiiv, pakkida lahti, veenduda, et pg_config on tee peal ja öelda (kusjuures on oluline, et selle kasutaja alt kellena kompileeritakse ja paigaldatakse oleks path peal õige pg_config programm)

 $ tar zxf skytools-2.1.10.tar.gz && cd skytools-2.1.10
 $ ./configure --prefix=/usr/local/skytools
 $ make
 $ make install

Paigaldamisel lisanduvad /usr/local/postgresql kataloogi

 $ find /usr/local/postgresql/ -mmin -5 
 /usr/local/postgresql/share/contrib
 /usr/local/postgresql/share/contrib/logtriga.sql
 /usr/local/postgresql/share/contrib/pgq.upgrade.sql
 /usr/local/postgresql/share/contrib/londiste.sql
 /usr/local/postgresql/share/contrib/pgq.sql
 /usr/local/postgresql/share/contrib/pgq_triggers.sql
 /usr/local/postgresql/share/contrib/pgq_ext.sql
 /usr/local/postgresql/share/contrib/londiste.upgrade.sql
 /usr/local/postgresql/share/contrib/uninstall_pgq.sql
 /usr/local/postgresql/share/contrib/pgq_lowlevel.sql
 /usr/local/postgresql/doc
 /usr/local/postgresql/doc/contrib
 /usr/local/postgresql/doc/contrib/README.pgq_ext
 /usr/local/postgresql/doc/contrib/README.pgq
 /usr/local/postgresql/doc/contrib/README.londiste
 /usr/local/postgresql/lib
 /usr/local/postgresql/lib/pgq_triggers.so
 /usr/local/postgresql/lib/logtriga.so
 /usr/local/postgresql/lib/pgq_lowlevel.so

Skytools paigaldamise ajal ei pea olema süsteemis veel Pythoni PostgreSQL teeke.