Guten Morgen zusammen!
Ich habe auf der Arbeit mit folgendem zu kämpfen:
Es gibt 2 Postgres-Server auf denen Version 8.2.5 der Software läuft. Ebenso scheint es einmal eine Replikation der beiden mit Slony-I in Version 1.2.16 gegeben zu haben.
Diese Replikation läuft derzeit jedoch nicht. Ebenso gibt es keine Ansprechpartner und keine Doku mehr für das System. Die Datenbank darin ist relativ groß (140 GB auf Dateisystemebene) und eine Eigenentwicklung.
Ich habe nun zwei Ziele:
- Da es letztens einen Ausfall des primären Servers gegeben hat, ist aufgefallen, das die Replikation nicht läuft und man nicht auf den anderen Server zurückgreifen kann. Leider gab es hierfür auch noch kein Monitoring. Es sollte nun zunächst die Replikation zwischen diesen beiden Systemen wieder hergestellt werden.
- Da die Postgres-Version ja wirklich uralt ist, soll in einem zweiten Schritt diese auf die aktuelle im Debian- oder Arch-Repository enthaltene (9.1 / 9.3) angehoben werden.
Wie immer natürlich: Nach Möglichkeit ohne Downtime, da es (noch) die einzige Datenbank in einer produktiven Applikation ist, in der sich kein Wartungsfenster einbauen lässt.
Ein Satz zu mir: Ich habe wenig bis keine PostgreSQL Erfahrung; Slony-I habe ich vor zwei Wochen das erste Mal gesehen. Ich halte mich aber für schnell lernend und blicke auf eine 10 jährige Erfahrung als genereller Linux-Admin zurück und bin LPIC-2 zertifiziert.
Daher: Seht mir dumme Fragen bitte nach
Mein Plan ist, die vorhandene Replikation auf dem anderen Server zu ignorieren und von 0 mit Slony-I neu aufzubauen, da der letzte Stand “da hat irgendwann mal irgendwas nicht funktioniert, deswegen wurde abgeschaltet” ist. Wenn diese Replikation zwischen den beiden Software-Identischen Systemen steht, möchte ich einen 2-Node-Cluster aus aktuellerer Hard- und Software mit Postgres-9.3 oder 9.1 daneben stellen und diese ebenfalls als weitere Subscriber die Datenbank “holen” lassen.
Anschließend möchte ich einen der beiden als neuen Origin definieren, die alten Postgres-8.2 Systeme abschalten und fortan nur noch mit diesen beiden aktuellen Versionen arbeiten.
Soweit der Plan. Hier zunächst die ersten Fragen:
- Macht dieser Plan soweit Sinn, bzw. ist das technisch ohne Downtime (den letzten Switch ausgenommen) mit dieser Art abweichenden Versionen überhaupt möglich?
- Ist Slony-I-1.x und Slony-I-2.x miteinander kompatibel, so das ich Slony-I-2.x auf den neuen laufen lassen kann? Zumindest die alten Server benötigen ja zwingend noch Slony-I-1.x, da 2.x erst Postgres ab Version 8.3 unterstützt …
Weiter in dem, was ich bisher gemacht habe:
Diese produktiven Server einmal außen vorgelassen, habe ich mir auf meiner Workstation zwei virtuelle Maschinen angelegt und dort ein altes Debian-Lenny, sowie eine zu den Produktivservern identisch kompilierte Version von Postgres und Slony-I installiert. Anschließend habe ich sichergestellt, das die simple 3-Tabellen-Datenbank aus dem Buch “PostgreSQL Administration” von O’Reilly mit Slony erfolgreich repliziert werden kann.
Als nächstes wollte ich das ganze mit einer etwas komplexeren Datenbank testen: Damit ich irgendetwas habe mit dem ich das ganze testen kann (ich wollte ungern direkt mit der 140-GB DB anfangen, zumal es davon keine gescheiten Backups gibt), habe ich dort einfach mit phpBB3 eine Datenbank angelegt. Und hier komme ich leider nicht mehr weiter: Hatte die Demo Datenbank noch ausschließlich Tabellen mit Primärschlüsseln, hat die phpBB3 Datenbank viele Tabellen ohne diese. Soweit ich Slony-I verstanden habe, muss eine replizierbare Tabelle jedoch entweder einen Primärschlüssel oder einen anderweitig eindeutigen Index haben. Beides kann ich aber z.B. für die phpBB3 Tabelle “phpbb_acl_groups” nicht finden.
Ich komme daher hier nicht mehr weiter und würde mich über Hilfe sehr freuen!
Im folgenden die Daten mit denen ich arbeite:
Funktionierende Replikation Tabelle “buch” (O’Reilly Beispieltabelle):
Slony-I Perl-Tools Config
Create Script DB “buch”
Ausstehende Tabelle “phpbb3db” (phpBB3 Beispieltabelle):
Create Script DB “phpbb3db” (der User “phpbb3user” wird benötigt)