Slony Postgresql "Replication
Fehlerquellen
Sicherheitshalber mal den Output von ldd psql ankucken ob vielleicht irgendwoher alte Libs angezogen werden, dies kann bei Slony merkwürdige Fehler anrichten (Bsp.: Statement: Select 1; FATAL: <breche Transaktion ab> .. Grund falsche Lib version (ist aber nur mittels strace ersichtlich!)
- slonik vielleicht einmal mit strace -s1000 starten man sieht dort auch etwaige Fehler welche sich nicht in der Postgres Logfile wiederspiegeln/siehe vorigen Punkt.
node löschen (wäre das selbe wie drop schema "_T2" cascade auf masterhost und slavehost:
slonik <<_EOF_ 2>> /db/slony_setup.log 1>> /db/slony_setup.log
cluster name = T2;
node 1 admin conninfo = 'dbname=databasex host=masterhost.de port=5432 user=slony password=xxxx';
node 2 admin conninfo = 'dbname=databasex host=slavehost.de port=5432 user=slony password=xxxx';
try {
uninstall node (id = 1);
}
on error {
echo 'Could not uninstall Slony-I on node 1';
exit -1;
}
try {
uninstall node (id = 2);
}
on error {
echo 'Could not uninstall Slony-I on node 2';
exit -1;
}
echo 'Slony-I successfully uninstalled on database databasex';
_EOF_anschließend Datenbank erstellen und Struktur clonden mittels createdb und pg_dump -s(für schema only) databasex | psql ...
Nächster Schritt Node initialisieren:
slonik <<_EOF_ 2>> /db/slony_setup.log 1>> /db/slony_setup.log
cluster name = T2;
node 1 admin conninfo = 'dbname=databasex host=masterhost.de port=5432 user=slony password=xxxx';
node 2 admin conninfo = 'dbname=databasex host=slavehost.de port=5432 user=slony password=xxxx';
try { # schema auf dem master server zu erstellen
echo 'Initializing the cluster';
init cluster (id = 1, comment = 'Node 1');
}
on error {
echo 'Could not initialize the cluster!';
exit -1;
}
echo 'Database cluster initialized as Node 1';
try { # schema auf dem slave server zu erstellen
echo 'Storing node 2';
store node (id = 2, comment = 'Node 2');
}
on error {
echo 'Could not create Node 2!';
exit -1;
}
echo 'Node 2 created';
try {
echo 'Creating store paths';
store path (server = 1, client = 2, conninfo = 'dbname=databasex host=slavehost.de port=5432 user=slony password=');
store path (server = 2, client = 1, conninfo = 'dbname=databasex host=masterhost.de port=5432 user=slony password=');
}
on error {
echo 'Could not create store paths!';
exit -1;
}
echo 'Store paths created';
try {
echo 'Storing listen network';
store listen (origin = 1, provider = 1, receiver = 2);
store listen (origin = 2, provider = 2, receiver = 1);
}
on error {
echo 'Could not store listen network!';
exit -1;
}
echo 'listen network stored';
try {
create set (id = 1, origin = 1, comment = 'databasex tables');
}
on error {
echo 'Could not create subscription set!';
exit -1;
}
echo 'Subscription set created';
# anschließend tabellen hinzufügenZu guter letzt noch einmal slonik ausführen um die Hauptdaten mittels COPY auf den Slave zu transferieren.
slonik <<_EOF_ 2>> /db/slony_setup.log 1>> /db/slony_setup.log
cluster name = T2;
node 1 admin conninfo = 'dbname=databasex host=masterhost.de port=5432 user=slony password=xxxx';
node 2 admin conninfo = 'dbname=databasex host=slavehost.de port=5432 user=slony password=xxxx';
try {
subscribe set (id = 1, provider = 1, receiver = 2, forward = no);
}
on error {
echo 'Could not subscribe the set to the slaves';
exit -1;
}
echo 'Database databasex subscribed to slaves';
_EOF_