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
Londiste kasutamine
Londiste http://wiki.postgresql.org/wiki/Londiste_Tutorial on asünkroonne master/slave-tüüpi andmete replitseerimislahendus. Londiste tarkvara sisaldub Skytools komplektis ühe rakendusena. Omakorda, Londiste koosneb sellistest komponentidest
- ticker.ini
- p-to-s.ini
Süsteemi peab olema paigaldatud pakett python-psycopg2
# apt-get install python-psycopg2
ticker.ini
Londiste kasutamiseks tuleb tekitada seadistusfail ticker.ini
$ cat /home/postgres/londiste/ticker.ini [pgqadm] job_name = myticker_name db = dbname=baasinimi host=10.0.13.170 user=postgres password=parool port=5432 # how often to run maintenance [seconds] maint_delay = 600 # how often to check for activity [seconds] loop_delay = 0.1 logfile = ~/londiste/log/%(job_name)s.log pidfile = ~/londiste/pid/%(job_name)s.pid
kusjuures ühendussõnet saab testida selliselt
$ python ... >>> import psycopg2 >>> con = psycopg2.connect('dbname=baasinimi host=10.0.13.170 \ user=postgres password=parool port=5432') >>> Ctrl-D
PGQ baasi osa paigaldamiseks tuleb seejärel öelda
$ export PYTHONPATH=/usr/local/skytools/lib/python2.4/site-packages $ /usr/local/skytools/bin/pgqadm.py /home/postgres/londiste/ticker.ini install 2009-11-03 13:28:41,793 28491 INFO plpgsql is installed 2009-11-03 13:28:41,795 28491 INFO txid_current_snapshot is installed 2009-11-03 13:28:41,796 28491 INFO Installing pgq 2009-11-03 13:28:41,796 28491 INFO Reading from \ /usr/local/skytools/share/skytools/pgq.sql
Tickeri käivitamiseks tuleb öelda
$ /usr/local/skytools/bin/pgqadm.py /home/postgres/londiste/ticker.ini ticker -d
ja jääb käima vastav protsess.
p-to-s.ini seadistamine
$ cat p-to-s.ini [londiste] job_name = test_to_subcriber provider_db = dbname=portaal host=10.0.13.170 user=postgres \ password=parool port=5433 subscriber_db = dbname=portaal host=10.0.13.177 user=postgres \ password=parool port=5432 # it will be used as sql ident so no dots/spaces pgq_queue_name = londiste.replica logfile = /home/postgres/londiste/log/%(job_name)s.log pidfile = /home/postgres/londiste/pid/%(job_name)s.pid
Logiserverist öelda
$ londiste.py p-to-s.ini provider install $ londiste.py p-to-s.ini subscriber install
ning käivitada deemon
$ londiste.py p-to-s.ini replay -d
Andmete replitseerimiseks tuleb logiserverisse moodustada vastavad tableid ning seejärel öelda logiserverist
$ londiste.py p-to-s.ini provider add public.T1 public.T2 $ londiste.py p-to-s.ini subscriber add public.T1 public.T2
PL/Proxy
PL/Proxy https://developer.skype.com/SkypeGarage/DbProjects/PlProxy on PL/Proxy.
Tarkvara paigaldamine
$ wget http://pgfoundry.org/frs/download.php/2447/plproxy-2.0.9.tar.gz $ tar ... $ make $ make install
ja tulemusena lisanduvad süsteemi kaks faili
/usr/local/postgresql/share/contrib/plproxy.sql /usr/local/postgresql/lib/plproxy.so
Seejärel tuleb baasi keele lisamiseks täita plproxy.sql skript, nt öeldes
$ psql -U postgres -h localhost portaal < /usr/local/postgresql/share/contrib/plproxy.sql
Iseenesest see skript sisaldab lauseid
-- handler function CREATE FUNCTION plproxy_call_handler () RETURNS language_handler AS '$libdir/plproxy' LANGUAGE C; -- language CREATE LANGUAGE plproxy HANDLER plproxy_call_handler;
Kasutamine
TODO