In diesem Tutorial zeige ich dir, wie du mit dem Datenbankmanagementsystem PostgreSQL 10.4 eine asynchrone Replikation einrichtest. PostgreSQL ist ein Open-Source Datenbank-Server mit mehr als 15 Jahre aktiver Entwicklungszeit. Es ist eine leistungsstarke Datenbank mit großem Funktionsumfang, der auch große Loads keine Probleme bereiten. Einige der neuen Features, die du bei PostgreSQL 10 findest, sind:
- Logische Replikation
- Quorum Commit für synchrone Replikation
- SCRAM-SHA-256 authentication
- Volltext Suche für JSON and JSONB & mehr
Ziel der Replikation ist es, die Verfügbarkeit und Datensicherheit deiner Datenbank zu erhöhen. Die Einrichtung werden wir auf Ubuntu 16.04 Hosts und innerhalb von einem privaten Netzwerk durchführen. Bei Datenbanken ist es generell Best Practice, diese innerhalb von privaten Netzwerken zu betreiben und nicht direkt über das Internet zugänglich zu machen. Bedenke bitte auch, dass es sich hier um eine asynchrone Replikation handelt. Unter einigen Umständen kann es bei der asynchronen Replikation zu Datenverlust kommen. In der Regel wird die asynchrone Replikation genutzt, um einen extra Layer an Sicherheit für die Daten hinzuzufügen. Wer seine Daten um jeden Preis schützen muss, der sollte auf eine synchrone Konfiguration zurückgreifen. Bei der synchronen Replikation muss die Transaktion auf mindestens zwei Servern durchgeführt worden sein, bevor der Master dem Client einen success meldet.
In deinem Tech4Hosting Panel kannst du das Server-Setup auch ohne große Erfahrung in kurzer Zeit mit unseren Templates nachbauen. Teste Tech4Hosting einfach mal aus und überzeuge dich von den Features und der Einfachheit des Tech4Hosting Panels.
Vorbereitungen
Für das folgende Tutorial benötigst du 2 Ubuntu 16.04 Server.
Master IP: 1.0.0.1 – read/write
Slave IP: 1.0.0.2 – read only
Wenn du dem Tutorial bei Tech4Hosting folgst, dann erstelle zunächst die beiden Server mit Ubuntu Template. Zur Installation von Postgres kannst du beiden Servern erst einmal eine öffentliche IP vergeben und die Server danach in ein privates Netzwerk verlegen.
Mehr zur Installation von Postgres 10 auf Ubuntu gibts hier:
PostgreSQL 10 auf Ubuntu 16.04 / 14.04 installieren
Neu! – Autoscale MySQL-as-a-Service von Tech4Hosting
Alle, die sich nicht mehr mit Datenbank-Administration auseinandersetzen wollen, können jetzt auch die neuen Platform Services von Tech4Hosting nutzen.
Der Vorteil der Platform Services bei Tech4Hosting: Wir kümmern uns um die sichere Konfiguration, den zuverlässigen Betrieb und die Installation von Sicherheitsupdates deiner PaaS-Dienste. In deinem Tech4Hosting Panel kannst du ab sofort mit den Datenbanken PostgreSQL, MySQL und redis starten.
Probiere es einfach mal aus!
Mehr Infos zu PaaS bei Tech4Hosting und wie PaaS funktioniert gibt es in unserem
Getting started mit PaaS bei Tech4Hosting
Platform Services von Tech4Hosting.
Postgres Master Konfiguration
Nach der Installation von Postgres wechselst du in den default Postgres Superuser-Account und loggst dich mit diesem im PostgreSQL-Terminal an.
Hier erstellst du eine neue Role für die Replikation.
CREATE ROLE pgrep WITH REPLICATION LOGIN ;
Dann setzt du die Passwort Verschlüsselung auf scram-sha-256.
postgres=# set password_encryption = 'scram-sha-256 ;
Und noch das Passwort für die Role setzen.
password pgrep
postgresql.conf anpassen
Stoppe zunächst den PostgreSQL Service mit:
systemctl stop postgresql
In der postgresql.conf Datei passt du den Postgres Master Server für die Replikation an. Wähle einen Editor deiner Wahl zum edieren (vim, nano etc.). Die Datei liegt unter /etc/postgresql/10/main.
Die nachfolgenden Zeilen müssen innerhalb der Datei auskommentiert und mit den entsprechenden Werten versehen werden.
Stelle sicher, das der PostgreSQL Server auf deinem Interface lauscht, durch eintragen der internen IP des Master Hosts.
listen_addresses = '10.0.0.1'
Danach müssen die Write-Ahead Log Einstellungen angepasst werden.
wal_level = replica
archive_mode = on
archive_command = 'rsync -a %p postgres@standbyhost:/var/lib/postgresql/10/main/archive/%f'
Die archive_command Variable ist dafür da den XLOG von der Datenbankinstanz an einem bestimmten Ort zu archivieren. Der Vorteil hier ist, du kannst dein beliebiges Shell-Skript verwenden. Optionen sind z.B. die Daten an einen FTP-Server zu schicken, an einen Cloud-Storage-Provider oder einfach auf einen anderen Server. Eine beliebte Methode ist rsync zu verwenden (wie im Beispiel oben).
Hinweis: Damit die rsync Methode im obigen Beispiel funktioniert, musst du noch die IP des Standby-Host und SSH-Access für rsync anpassen.
Dann geht es weiter mit den Einstellungen für die Replikation.
max_wal_senders = 3
wal_keep_segments = 64
Bei wal_keep_segments setzt du die minimale Nummer an Log Segmenten, die auf dem Master gespeichert werden sollen. Beachte, dass ein Segment 16mb groß ist und du im Fall der Fälle genug extra Speicher auf dem Master Host bereit hältst.
Anschließend speicherst du die Datei ab.
Weil der Archiv Mode aktiviert wurde, muss jetzt noch ein neues Verzeichnis für die Archivierung im PGDATA Verzeichnis angelegt werden. Mit den folgenden Befehlen erstellst du das Verzeichnis, vergibst die notwendige Berechtigung und änderst den Owner zu User postgres.
mkdir -p /var/lib/postgresql/10/main/archive/
chmod 700 /var/lib/postgresql/10/main/archive/
chown -R postgres:postgres /var/lib/postgresql/10/main/archive/
pg_hba.conf anpassen
Nachfolgend wird noch die PostgreSQL Client Authentication angepasst, die Datei liegt unter /etc/postgresql/10/main/pg_hba.conf.
# Database administrative login by Unix domain socket
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
#local all all peer
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
host all all ::0/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
hostssl replication pgrep 10.0.0.2/32 scram-sha-256
In der untersten Zeile wurde die Role, IP-Adresse für den Slave Host und die Authentifizierungsmethode definiert. Danach speicherst du ab und verlässt die Datei.
Postgres Slave Konfiguration
Nachdem der Master fertig konfiguriert wurde, wechselst du auf deinen Slave Host.
Stoppe zunächst den PostgreSQL Service.
systemctl stop postgresql
Optional kannst du jetzt auf deinem Slave dieselben Einstellungen an postgresql.conf und pg_hba.conf vornehmen wie auf dem Master (so kann dein Slave auch als Master agieren, falls Failover eingerichtet wurde).
Ändere dann folgende Zeile in der postgresql.conf wie folgt ab:
hot_standby = on
und speicher das ganze.
Jetzt wechselst du in dein PGDATA Verzeichnis.
cd /var/lib/postgresql/10/
Anschließend benennst du das vorhandene main/ Verzeichnis auf dem Slave um.
mv main/ main-backup
chmod 700 main/
Im nächsten Schritt kopierst du dann das main Verzeichnis vom Master auf deinen Slave via pg_basebackup Befehl. Nach der Eingabe wirst du nach deinem Passwort für den User pgrep gefragt.
pg_basebackup -h 10.0.0.1 -D /var/lib/postgresql/10/main/ -P -U pgrep --wal-method=stream
Wechsle in dein neues main/ Verzeichnis
cd main/
und erstelle eine neue Datei mit dem Namen recovery.conf.
vim recovery.conf
Kopiere nun folgende Konfiguration in die Datei:
standby_mode = 'on'
primary_conninfo = 'host=10.0.0.1 port=5432 user=pgrep password=[dein-passwort]'
trigger_file = '/tmp/MasterNow'
#restore_command = '[dein-restore-kommando]'
In der ersten Zeile wird definiert, dass der Slave im standby Modus startet. Unter “primary_conninfo” werden die Parameter für die Verbindung zum Master festgelegt. Und die Zeile “trigger_file” spezifiziert, dass der Slave als Master einspringt, wenn ein Trigger-File existiert (für dieses Failover-Feature brauchst du zusätzliche Software wie z.B. repmgr).
Replikation testen
Nach Anpassen der Konfiguration von Master und Slave müssen die Systeme neu gestartet werden.
Führe also eine reboot auf Master und Slave durch.
reboot now
Zu guter Letzt kannst du den PostgreSQL Service auf Master und Slave starten.
Ein Blick in die log Datei verrät dir, ob alles so geklappt hat, wie es soll.
Und auf dem Master Server kannst du dir mit folgendem Befehl (im psql-Terminal) deinen pgrep User anschauen:
select * from pg_stat_activity where username = ‘pgrep’ ;
Fazit
In diesem Tutorial hast du gelernt, wie man mit Postgres eine Datenbank Replikation einrichtet. Postgres ist ein mächtiges Datenbanksystem, mit dem du wegen seiner umfangreichen Funktionalitäten lange Freude haben wirst. Das Studieren der Postgres Dokumentation ist daher unumgänglich. Auf dem Gebiet der Datenbank Replikation zählen vor allem auch Erfahrungswerte, deswegen heißt es einfach dranbleiben bis zum Replication Pro!
Bei mehr Lust auf Datenbank Themen, einfach mal in folgende Tutorials schauen ?
MongoDB auf Ubuntu installieren
Apache Cassandra auf Ubuntu installieren