PostgreSQL Replikation


Unix , , ,



Replikation bei Datenbanken ist ein ziemlich umfangreiches Thema. PostgreSQL bietet in der Distribution leider keine mitgelieferte Möglichkeit Datenbanken in einem Master-Slave Setup zu replizieren. Da ist man auf Tools wie Slony-I oder die Skytools angewiesen. Da Slony-I sehr umfangreich und nicht gerade einfach zu konfigurieren ist, habe ich mir die Skytools bzw. londiste näher angeschaut, und muss sagen, dass es wirklich hervorragend funktioniert.

Die Skytools sind von Skype, und können auf der PgFoundry Seite gefunden werden. Als Beispiel nehmen wir eine einfache Datenbank mit nur einer Tabelle…

CREATE sequence test_seq start WITH 1;
CREATE TABLE test (
  id int4 PRIMARY KEY, 
  txt text
);

Jetzt brauchen wir noch ein paar Datensätze…

INSERT INTO test VALUES ((SELECT NEXTVAL('test_seq')), 'bla');
INSERT INTO test VALUES ((SELECT NEXTVAL('test_seq')), 'blub');
INSERT INTO test VALUES ((SELECT NEXTVAL('test_seq')), 'test text');

Nachdem alle Tabelle angelegt ist, sollte die Datenbank auf dem Slave Server erstellt werden. Danach können die Inhalte mit einem Dump initial übernommen werden…

$ pg_dump -U postgres -s test | psql -h <IP-VON-SLAVE> -U postgres test

Damit londiste laufen kann, brauchen wir einen Ticker, dieser muss auf dem Master-Server laufen. Die Konfiguration kann wie folgt aussehen (hier die Datei /etc/ticker.ini):

[pgqadm]
job_name = ticker
db = dbname=test 
maint_delay_min = 1
loop_delay = 0.5
logfile = /tmp/log.%(job_name)s
pidfile = /tmp/pid.%(job_name)s
use_skylog = 0
connection_lifetime = 21
queue_refresh_period = 10

Danach kann der Ticker gestartet werden…

$ pgqadm.py -d /etc/ticker.ini ticker

Als nächstes brauchen wir noch für londiste ebenfalls eine Konfigurationsdatei (hier /etc/londiste.ini):

[londiste]
job_name = test_to_subcriber
provider_db = dbname=test port=5432 host=<IP-VON-MASTER>
subscriber_db = dbname=test port=5432 host=<IP-VON-SLAVE>
pgq_queue_name = londiste.replika
logfile = /tmp/%(job_name)s.log
pidfile = /tmp/%(job_name)s.pid

Die londiste Konfigurationsdatei muss auf beiden Server sein, damit die Replikation funktioniert. Auf dem Slave-System kann londiste nun installiert werden

$ londiste.py /etc/londiste.ini provider install
$ londiste.py /etc/londiste.ini subscriber install
$ londiste.py /etc/londiste.ini provider add test
$ londiste.py /etc/londiste.ini subscriber add test
$ londiste.py -d /etc/londiste.ini replay

Londiste läuft nun im Hintergrund als Daemon und sollte alle neuen Daten sofort auf den Slave replizieren.



Kommentar hinzufügen