PostgreSQL - Master ReplicaServer Anleitung

VersionDateInformationWho
0.10.0002025-03-23Dokument erstellt mit TestinstallationAlexander Goerisch

Information

Diese Anleitung ist ganz einfach gehalten, mit dieser Anleitung kannst du unter Ubuntu Server 24.04.2 LTS und mit PostgreSQL 17 (letzte Version bei der Dokumentenerstellung) einen Master- und Replica-PostgreSQL-Server erstellen. Das bedeutet alles, was auf dem Master geschrieben wird, landet auch auf dem Replicaserver, von dem die Daten lesend genutzt werden koennen. Man kann naetuerlich auch mehrere Replicaserver erstellen. Das haette unter anderem den Vorteil, dass der Master von den lesenden Zugriffen entlastet wird und auf diesem nur geschrieben wird. In den meisten Faellen werden auch mehr Daten gelesen als geschrieben.

Basic Installation

Zuerst muss man auf zwei PC's oder in einem Hypervisor (Vmware, Proxmox, Xen) zwei Ubuntu Server 24.04.2 LTS Server installieren. In meinem Fall mache ich das auf meiner Testumgebung, die ich mit Proxmox betreibe.

Ich lege zwei VMs an mit je 4GB Ram, 4 vCPUs und 60 GB Storge. Die Dimension der Systeme ist von der Menge an Daten in der Datenbank abhaengig. Es gibt Test-Datenbanken im Internet, die auch ueber 60 GB grosz sind, hier muesste man sowohl RAM als auch den Storaespace entsprechend anpassen.

Ich nenne die beiden Server psqlc1a und psqlc1b und weise ihnen das ISO-Image fuer den Ubuntu Server 2024.02 LTS zu (https://ubuntu.com/download/server).

Die beiden Server bekommen folgende IP-Adressen zugewiesen:

Bei der Installation vom Server aktiviere ich zum Ubuntu Server noch Search for third-party drivers . Bei der Netzwerkkonfiguration gebe ich die Konfiguration selbst ein. Hier ist bei Subnet zu beachten, das die Angabe entsprechen 192.168.42.0/24 angegeben werden muss, natuerlich dein eigene Subnetz, das du verwendest. Rest sollte selbsterklaerend sein bzw. vielleicht noch ein kleiner Hinweis zu den Domainname. Wenn man zu Hause keine eigene Domain hat, aber einen DNS eingerichtet hat, kommt es doch oefter vor das man sich der .local Domain bedient. Diese sollte man nicht verwenden, die Definition fuer private Netzwerke lautet .home.arpa. Also z. B. meinnetzwerk.home.arpa. Das aber nur so am Rande.

Die Disk lasse ich auf Standard und vergroeszere spaeter auf die maximale Groesze des angegebenen Storage.

Bei den Userdaten gebe ich fuer dieses Beispiel dbadmin als User an, Servername wurde oben schon angesprochen und das Passwort muss sowieso jeder fuer sich entscheiden.

Dann waehle ich noch Install OpenSSH server aus damit ich per SSH auf die Systeme komme. Ist etwas einfacher als per Console von Proxmox. Vor allem kann ich auch Copy & Past von dieser Anleitung nutzen.

Der Rest ist dann per default und am Ende gibt es einen Restart. Da muss ich dann unter Hardware noch das ISO-File aushaengen und Enter druecken bis zum 'Reboot Now'.

Das Spiel mit den zu aendernden Daten (Name des Servers, IP-Adresse) mache ich auch auf dem zweiten Server.

Update und Erweitern der Parition

Ich melde mich an der Stelle schon per SSH an den VMs an:

Erstmal die Systeme updaten mit dem folgenden Befehl:

Ich starte nach einem Update das System neu, ist meist nicht notwendig, aber an der Stelle spielt das noch keine Rolle, ob ich den Server neustarte oder nicht. Daher ein sudo reboot.

Nun noch die Partition auf ihre maximale Groesze erweitern, sofern du das System so installiert hast wie ich in diesem Beispiel:

Ausgabe sieht dann in etwas so aus, die kanpp 60GB der / Partition ist zu sehen:

Was man jetzt machen kann, ist ein Snapshot, falls man irgendetwas versemmelt, so das man zum Snapshot zurueckspringen kann. Den Snapshot sollte man am Ende auch wieder loeschen.

Installation des PostgreSQL Servers

Die Installation des PostgreSQL Server laeuft wie folgt ab inkl. der Konfiguration der postgresql.conf und der pg_hba.conf.

PostgreSQL User

Auf beiden Server muss man der postgres Superuser Rolle ein Passwort vergeben:

Tuning postgresql.conf

Wer will, kann an dieser Stelle schon die postgresql.conf einem grundlegenden Tuning unterziehen. Hier gibt es die Webseite https://pgtune.leopard.in.ua/ wo man seine Daten und Anforderungen angeben kann und einen Vorschlag generieren kann. Der sieht fuer das oben angefuehrte System in etwas so aus wie hier drunter angegeben. Die dort ausgegebenen Werte passen in den meisten Situationen und koennen natuerlich auf die jeweilige Applikation, den jeweiligen Anwendungsfall entsprechend angepasst werden. Feintuning kann nie schaden, man sollte aber Wissen was man tut. Eine Standard Config ist keine gute Idee, weil es keine Rolle spiel, wie viel RAM und CPU main dann reinpfeffert, es wird kaum besser.

Editieren der Datei: sudo vim /etc/postgresql/17/main/postgresql.conf

Danach den PostgreSQL Service neustarten:

sudo systemctl restart postgresql

Konfigureren von Master und Replica

User anlegen

Den User fuer die Replication muss man sowohl am Master- als auch am Replica-Server anlegen. Username und Passwort kann natuerlich frei gewaehlt werden, muss aber ident sein.

Wenn die Rolle erfolgreich angelegt wurde, wird ein CREATE ROLE ausgegeben.

Man kann sich die Rolle mit \du anzeigen lassen.

pg_hba.conf bearbeiten

Auf dem Master den Replica-Server eintragen. Wenn es mehrere geben sollte, dann sind die einfach genauso hinzuzufuegen, sprich in der Zeile darunter:

Replica Konfiguration loeschen und neu syncen

Am Replica muss nun die Konfiguration geloescht werden, diese wird danach vom Master gesynct. Um zu sehen wo die Daten liegen kann man den folgenden Befehl in postgresql nutzen: SHOW data_directory;

Loeschen des main-Verzeichnisses mit dem folgenden Befehl bzw. neu anlegen und berechtigen:

Nun Backupen wir vom Primary/Master zum Secondary/Replica, am Secondary/Replica. Das Passwort ist das PW vom replicarole:

Test

Vom Master aus Testen:

Wenn man jetzt eine Datenbank anlegt, wird diese schneller gesynct als man selbst hin und her klicken oder switchen kann und einen refresh machen.

Nicht vergessen, ggf. die Snapshots loeschen.