Slony (Master-Slave) konfigurationen

Hi, und zwar arbeite ich gerade an einer Einrichtung eines Master <> Slave (Slony) Replikations-Systems auf unterschiedlichen Hosts.

Local (d.h. beides auf einem System) hab ich ein soweit ordentlich zum laufen bekommen. Bei der Übertragung das nun auf zwei getrennten System laufen zu lassen enstehen komische fehler, aber dazu gleich.

Mein Script:

slonik <<_EOF_
        cluster name = my_cluster2;

        node 1 admin conninfo = 'dbname=node_1 	host=192.168.0.13 user=postgres password=***';
        node 2 admin conninfo = 'dbname=node_2 	host=192.168.0.21 user=postgres password=***';

        init cluster ( id=1, comment = 'Slony Cluster-Test');

        create set (id=1, origin=1, comment='Alle Tabellen');
        set add table (set id=1, origin=1, id=1,
                fully qualified name = 'public.t_klasse', comment='Klassen');
        set add table (set id=1, origin=1, id=2,
                fully qualified name = 'public.t_schueler',
		comment='Schueler');

        store node (id=2, comment = 'Slave node');
        store path (server = 1, client = 2, 
		conninfo='dbname=node_1 host=192.168.0.13 user=postgres password=***');
        store path (server = 2, client = 1, 
		conninfo='dbname=node_2 host=192.168.0.21 user=postgres password=***');
        store listen (origin=1, provider = 1, receiver =2);
        store listen (origin=2, provider = 2, receiver =1);
        # FRAGE, darf ich das hier schon schreiben?
	subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);
_EOF_

Quelle: Slony konfigurieren


So und zwar mal eine konzeptionelle frage: Diese Script muss im Prinzip auf beide systeme angewendet werden. Slony wird dann anhand den IP’s den master & slave später erkennen. Seh ich das richtig?

Gibt es eine Reihenfolge die beachtet werden muss, wann was bei welchen System eingerichtet werden muss, damit es funktionieren kann?

So nun weiter:
Das Script wird via user “postgres” ausgeführt >> “sh slony_init.sh”. Script hat ebenfalls chmod +x rechte.

Ich führe es aus, “sh slony_init.sh”

Fehler: (tritt auf beiden system auf).

<stdin>:15: PGRES_FATAL_ERROR load '$libdir/xxid';  - ERROR:  could not access file "$libdir/xxid": No such file or directory
<stdin>:15: Error: the extension for the xxid data type cannot be loaded in database 'dbname=node_2     host=192.168.0.21 user=postgres password=****'

Hoffe evt. kennt sich jemand mit der Materie aus. :rolleyes:

Okay scheint wohl mit dem Paket:
sudo apt-get install postgresql-8.2-slony1 zu funktionieren.

Okay läuft jetzt. Einmaliges ausführen auf dem Master-System hat alles wunderbar eingerichtet. Ich musste lediglich den prozess beim slave einschalten.

Frage zu Slony

[Master->Client].

Und zwar gibt es Probleme, wenn ich den Master (lokal in der Firma) hinter einem Router stehen habe? Client ist im Netz ein Ubuntu-Server.

Aber da ich in den Configs “richtig” IP-Adressen hinterlegen muss, kann ich den Server nicht direkt ansprechen.

Da kommt es jetzt drauf an, wie Slony arbeitet. Ist es eine reine Server->Client Kommunikation oder eine Server <-> Client?

Bei einer Server->Client Kom. baut nur der Master(Server) zum Client (Slave) eine Verbindung auf. Daher sollte es in diesem Fall kein Problem sein.

Im Anderen Fall erreich ich den Server (Master) nicht vom Client da ich nicht weiß welche Portweiterleitung (evt. 5432?) hier notwenig sind.

Evt. hat jemand ne Ahnung wie das hier läuft?

So läuft das. Aber ob Du da nicht noch eine Sicherungsschicht, z.B. via SSH, einbauen willst, ist Deine Entscheidung.

Andreas

Alles klar. Mal wieder besten Dank!

So hab nun alles zum Laufen bekommen. Das Problem bei:

:15: PGRES_FATAL_ERROR load ‘$libdir/xxid’; - ERROR: could not access file “$libdir/xxid”: No such file or directory
:15: Error: the extension for the xxid data type cannot be loaded in database ‘dbname=node_2 host=192.168.0.21 user=postgres password=****’

war darauf zurückzuführen, dass ich versehentlich postgresql-8.3 installiert hatte und das paket “postgresql-8.2-slony1” nur (wie der Namen schon sagt) für Version 8.2 geeignet ist.
Also Postgresql8.2 hier installiert und siehe da es funktioniert wirklich super.


FRAGE, darf ich das hier schon schreiben?

subscribe set ( id = 1, provider = 1, receiver = 2, forward = no);

konnte ich ohne Probleme in mein init-script einbeziehen.


Das init-script wird einmalig auf dem Master-Server ausgeführt, der ebenfalls direkt den Client(Slave) einrichtet und konfiguriert.

Der Slave führt lediglich aus:

slon slony_cluster 'dbname=mydb_to_rep host=IP user=myuser password=mypass'

Hey. Und zwar hab ich gerade die Konstelation, dass wir eine Standard-Replizierung von einem Lokalen SystemMaster auf einen Online-Server Slave eingerichtet haben.

Jetzt möchten wir das ganze so erweitern, dass noch ein Master-System hinzukommen, um weitere Tabellen auf den Slave zu replizieren.

ich denke, problematisch kann es bezüglich ports geben.

Sprich, du hast zwei unabhängige Master, die beide in den gleichen Slave schreiben wollen?

Was ist mit doppelt vergebenen IDs ect?

Was ist mit doppelt vergebenen IDs ect?

Was für ID’s? :slight_smile:

Also wenn ich das generell betrachte wird das nicht funktionieren, da auf dem Slave 2 Instanzen laufen müssen, die sich vermutlich vom port her gleich verhalten. hab nun eine andere Lösung gefunden. Würd mich aber dennoch für eine solche Lösung interessieren.

So ich schreib das mal hier einfach dazu.

Postgresql-8.3
Postgresql-8.3-slony1
Slony1-bin
Slonik

Ihr müsst aufpassen, dass beide Datenbank-Kodierung identisch sind. SQL-ASCII hat einwandfrei funktioniert. MIt utf8 hatte ich probleme.