WalMgr kasutamine
Sisukord
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.